POST /v0/history/bulk/updates
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>"
}
POST
/
api
/
scan
/
v0
/
history
/
bulk
/
updates
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.
OpenAPIAdded 0.5.18
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
okapplication/json
object_refs
BulkStorageObjectRef[]
required
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 foundapplication/json
error
string
required
404
not foundapplication/json
error
string
required
501
not implementedapplication/json
error
string
required
History
Added
0.5.18