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
{
"object_refs": [
{
"url": "<string>",
"digest": "<string>"
}
],
"next_page_token": "<string>"
}
{
"error": "<string>"
}
{
"error": "<string>"
}
{
"error": "<string>"
}
POST /v0/history/bulk/updates
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.
POST
/
api
/
scan
/
v0
/
history
/
bulk
/
updates
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
{
"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 --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
{
"object_refs": [
{
"url": "<string>",
"digest": "<string>"
}
],
"next_page_token": "<string>"
}
{
"error": "<string>"
}
{
"error": "<string>"
}
{
"error": "<string>"
}
Body
application/json
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).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).string
The pagination token returned from a previous call to this endpoint with the same arguments.
number
required
OpenAPI type:
integer (int32).The maximum number of objects returned for this request.Minimum: 1; Maximum: 1000.Responses
200
okapplication/json
BulkStorageObjectRef[]
required
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
string
required
404
not foundapplication/json
string
required
501
not implementedapplication/json
string
required
History
Added
0.5.18