Skip to content
CCPEDIAby Unity Nodes
Documentation/Canton Network Docs/Splice APIsScan APIsScan APIView on Canton Network Docs

POST /v0/history/bulk/updates

POST
/
api
/
scan
/
v0
/
history
/
bulk
/
updates
Try it
cURL
Python
JavaScript
PHP
Go
Java
Ruby
curl --request POST \
  --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/history/bulk/updates' \
  --header 'Content-Type: application/json' \
  --data '{
  "start_record_time": "2026-01-01T00:00:00Z",
  "end_record_time": "2026-01-01T00:00:00Z",
  "next_page_token": "<string>",
  "page_size": 123
}'
import json
import requests

url = "https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/history/bulk/updates"
headers = {'Content-Type': 'application/json'}
payload = json.loads(r'''{
  "start_record_time": "2026-01-01T00:00:00Z",
  "end_record_time": "2026-01-01T00:00:00Z",
  "next_page_token": "<string>",
  "page_size": 123
}''')
response = requests.request(
    "POST", url, headers=headers, json=payload
)

print(response.text)
const response = await fetch('https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/history/bulk/updates', {
  method: 'POST',
  headers: {
  "Content-Type": "application/json"
},
  body: JSON.stringify({
  "start_record_time": "2026-01-01T00:00:00Z",
  "end_record_time": "2026-01-01T00:00:00Z",
  "next_page_token": "<string>",
  "page_size": 123
}),
});

console.log(await response.text());
<?php
$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/history/bulk/updates',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => <<<'JSON'
{
  "start_record_time": "2026-01-01T00:00:00Z",
  "end_record_time": "2026-01-01T00:00:00Z",
  "next_page_token": "<string>",
  "page_size": 123
}
JSON,
    CURLOPT_HTTPHEADER => [
        "Content-Type: application/json"
    ],
]);

$response = curl_exec($curl);
echo $response;
package main

import (
  "bytes"
  "fmt"
  "io"
  "net/http"
)

func main() {
  req, _ := http.NewRequest("POST", "https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/history/bulk/updates", bytes.NewBufferString(`{
  "start_record_time": "2026-01-01T00:00:00Z",
  "end_record_time": "2026-01-01T00:00:00Z",
  "next_page_token": "<string>",
  "page_size": 123
}`))
  req.Header.Set("Content-Type", "application/json")
  response, _ := http.DefaultClient.Do(req)
  defer response.Body.Close()
  body, _ := io.ReadAll(response.Body)
  fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

var request = HttpRequest.newBuilder()
    .uri(URI.create("https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/history/bulk/updates"))
    .header("Content-Type", "application/json")
    .method("POST", HttpRequest.BodyPublishers.ofString("""
{
  "start_record_time": "2026-01-01T00:00:00Z",
  "end_record_time": "2026-01-01T00:00:00Z",
  "next_page_token": "<string>",
  "page_size": 123
}
"""))
    .build();
var response = HttpClient.newHttpClient().send(
    request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
require 'net/http'
require 'uri'

uri = URI('https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/history/bulk/updates')
request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request.body = <<~JSON
{
  "start_record_time": "2026-01-01T00:00:00Z",
  "end_record_time": "2026-01-01T00:00:00Z",
  "next_page_token": "<string>",
  "page_size": 123
}
JSON
response = Net::HTTP.start(uri.hostname, uri.port) do |http|
  http.request(request)
end
puts response.body
200
400
404
501
{
  "object_refs": [
    {
      "url": "<string>",
      "digest": "<string>"
    }
  ],
  "next_page_token": "<string>"
}
{
  "error": "<string>"
}
{
  "error": "<string>"
}
{
  "error": "<string>"
}

Under Development, do not use in production yet Get download URLs and metadata for update history objects available for bulk download, between two record times. Note that the returned objects may include also updates outside of the requested record time range (since only full objects are served from storage), but guaranteed to include all updates in the requested range.

cURL
Python
JavaScript
PHP
Go
Java
Ruby
curl --request POST \
  --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/history/bulk/updates' \
  --header 'Content-Type: application/json' \
  --data '{
  "start_record_time": "2026-01-01T00:00:00Z",
  "end_record_time": "2026-01-01T00:00:00Z",
  "next_page_token": "<string>",
  "page_size": 123
}'
import json
import requests

url = "https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/history/bulk/updates"
headers = {'Content-Type': 'application/json'}
payload = json.loads(r'''{
  "start_record_time": "2026-01-01T00:00:00Z",
  "end_record_time": "2026-01-01T00:00:00Z",
  "next_page_token": "<string>",
  "page_size": 123
}''')
response = requests.request(
    "POST", url, headers=headers, json=payload
)

print(response.text)
const response = await fetch('https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/history/bulk/updates', {
  method: 'POST',
  headers: {
  "Content-Type": "application/json"
},
  body: JSON.stringify({
  "start_record_time": "2026-01-01T00:00:00Z",
  "end_record_time": "2026-01-01T00:00:00Z",
  "next_page_token": "<string>",
  "page_size": 123
}),
});

console.log(await response.text());
<?php
$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/history/bulk/updates',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => <<<'JSON'
{
  "start_record_time": "2026-01-01T00:00:00Z",
  "end_record_time": "2026-01-01T00:00:00Z",
  "next_page_token": "<string>",
  "page_size": 123
}
JSON,
    CURLOPT_HTTPHEADER => [
        "Content-Type: application/json"
    ],
]);

$response = curl_exec($curl);
echo $response;
package main

import (
  "bytes"
  "fmt"
  "io"
  "net/http"
)

func main() {
  req, _ := http.NewRequest("POST", "https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/history/bulk/updates", bytes.NewBufferString(`{
  "start_record_time": "2026-01-01T00:00:00Z",
  "end_record_time": "2026-01-01T00:00:00Z",
  "next_page_token": "<string>",
  "page_size": 123
}`))
  req.Header.Set("Content-Type", "application/json")
  response, _ := http.DefaultClient.Do(req)
  defer response.Body.Close()
  body, _ := io.ReadAll(response.Body)
  fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

var request = HttpRequest.newBuilder()
    .uri(URI.create("https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/history/bulk/updates"))
    .header("Content-Type", "application/json")
    .method("POST", HttpRequest.BodyPublishers.ofString("""
{
  "start_record_time": "2026-01-01T00:00:00Z",
  "end_record_time": "2026-01-01T00:00:00Z",
  "next_page_token": "<string>",
  "page_size": 123
}
"""))
    .build();
var response = HttpClient.newHttpClient().send(
    request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
require 'net/http'
require 'uri'

uri = URI('https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/history/bulk/updates')
request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request.body = <<~JSON
{
  "start_record_time": "2026-01-01T00:00:00Z",
  "end_record_time": "2026-01-01T00:00:00Z",
  "next_page_token": "<string>",
  "page_size": 123
}
JSON
response = Net::HTTP.start(uri.hostname, uri.port) do |http|
  http.request(request)
end
puts response.body
200
400
404
501
{
  "object_refs": [
    {
      "url": "<string>",
      "digest": "<string>"
    }
  ],
  "next_page_token": "<string>"
}
{
  "error": "<string>"
}
{
  "error": "<string>"
}
{
  "error": "<string>"
}

Body

application/json
start_record_time
string
required
OpenAPI type: string (date-time).The returned objects must include all updates with record time greater than start_record_time (but may also include updates before it).
end_record_time
string
required
OpenAPI type: string (date-time).The returned objects must include all updates with record time at most end_record_time (but may also include updates after it).
next_page_token
string
The pagination token returned from a previous call to this endpoint with the same arguments.
page_size
number
required
OpenAPI type: integer (int32).The maximum number of objects returned for this request.Minimum: 1; Maximum: 1000.

Responses

200

ok
application/json
object_refs
BulkStorageObjectRef[]
required
The list of references to the bulk storage objects containing the updates.

Show child attributes

url
string
required
The URL from which the bulk storage object can be downloaded.
digest
string
required
The sha256 digest of the bulk storage object, for verification of integrity and consistency across SVs.
next_page_token
string
When requesting the next page of results, pass this as after to the next ListBulkUpdateHistoryObjectsRequest invocation. Will be absent when there are no more pages.

400

not found
application/json
error
string
required

404

not found
application/json
error
string
required

501

not implemented
application/json
error
string
required

History

Added0.5.18