POST /v0/backfilling/updates-before
cURL
Python
JavaScript
PHP
Go
Java
Ruby
curl --request POST \
--url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/backfilling/updates-before' \
--header 'Content-Type: application/json' \
--data '{
"migration_id": 123,
"synchronizer_id": "<string>",
"before": "2026-01-01T00:00:00Z",
"at_or_after": "2026-01-01T00:00:00Z",
"count": 123
}'
import json
import requests
url = "https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/backfilling/updates-before"
headers = {'Content-Type': 'application/json'}
payload = json.loads(r'''{
"migration_id": 123,
"synchronizer_id": "<string>",
"before": "2026-01-01T00:00:00Z",
"at_or_after": "2026-01-01T00:00:00Z",
"count": 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/backfilling/updates-before', {
method: 'POST',
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
"migration_id": 123,
"synchronizer_id": "<string>",
"before": "2026-01-01T00:00:00Z",
"at_or_after": "2026-01-01T00:00:00Z",
"count": 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/backfilling/updates-before',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => <<<'JSON'
{
"migration_id": 123,
"synchronizer_id": "<string>",
"before": "2026-01-01T00:00:00Z",
"at_or_after": "2026-01-01T00:00:00Z",
"count": 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/backfilling/updates-before", bytes.NewBufferString(`{
"migration_id": 123,
"synchronizer_id": "<string>",
"before": "2026-01-01T00:00:00Z",
"at_or_after": "2026-01-01T00:00:00Z",
"count": 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/backfilling/updates-before"))
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString("""
{
"migration_id": 123,
"synchronizer_id": "<string>",
"before": "2026-01-01T00:00:00Z",
"at_or_after": "2026-01-01T00:00:00Z",
"count": 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/backfilling/updates-before')
request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request.body = <<~JSON
{
"migration_id": 123,
"synchronizer_id": "<string>",
"before": "2026-01-01T00:00:00Z",
"at_or_after": "2026-01-01T00:00:00Z",
"count": 123
}
JSON
response = Net::HTTP.start(uri.hostname, uri.port) do |http|
http.request(request)
end
puts response.body
200
404
{
"transactions": [
{
"update_id": "<string>",
"migration_id": 123,
"workflow_id": "<string>",
"record_time": "<string>",
"synchronizer_id": "<string>",
"effective_at": "<string>",
"offset": "<string>",
"root_event_ids": [
"<string>"
],
"events_by_id": {},
"external_transaction_hash": "<string>"
}
]
}
{
"error": "<string>"
}
POST
/
api
/
scan
/
v0
/
backfilling
/
updates-before
cURL
Python
JavaScript
PHP
Go
Java
Ruby
curl --request POST \
--url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/backfilling/updates-before' \
--header 'Content-Type: application/json' \
--data '{
"migration_id": 123,
"synchronizer_id": "<string>",
"before": "2026-01-01T00:00:00Z",
"at_or_after": "2026-01-01T00:00:00Z",
"count": 123
}'
import json
import requests
url = "https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/backfilling/updates-before"
headers = {'Content-Type': 'application/json'}
payload = json.loads(r'''{
"migration_id": 123,
"synchronizer_id": "<string>",
"before": "2026-01-01T00:00:00Z",
"at_or_after": "2026-01-01T00:00:00Z",
"count": 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/backfilling/updates-before', {
method: 'POST',
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
"migration_id": 123,
"synchronizer_id": "<string>",
"before": "2026-01-01T00:00:00Z",
"at_or_after": "2026-01-01T00:00:00Z",
"count": 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/backfilling/updates-before',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => <<<'JSON'
{
"migration_id": 123,
"synchronizer_id": "<string>",
"before": "2026-01-01T00:00:00Z",
"at_or_after": "2026-01-01T00:00:00Z",
"count": 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/backfilling/updates-before", bytes.NewBufferString(`{
"migration_id": 123,
"synchronizer_id": "<string>",
"before": "2026-01-01T00:00:00Z",
"at_or_after": "2026-01-01T00:00:00Z",
"count": 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/backfilling/updates-before"))
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString("""
{
"migration_id": 123,
"synchronizer_id": "<string>",
"before": "2026-01-01T00:00:00Z",
"at_or_after": "2026-01-01T00:00:00Z",
"count": 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/backfilling/updates-before')
request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request.body = <<~JSON
{
"migration_id": 123,
"synchronizer_id": "<string>",
"before": "2026-01-01T00:00:00Z",
"at_or_after": "2026-01-01T00:00:00Z",
"count": 123
}
JSON
response = Net::HTTP.start(uri.hostname, uri.port) do |http|
http.request(request)
end
puts response.body
200
404
{
"transactions": [
{
"update_id": "<string>",
"migration_id": 123,
"workflow_id": "<string>",
"record_time": "<string>",
"synchronizer_id": "<string>",
"effective_at": "<string>",
"offset": "<string>",
"root_event_ids": [
"<string>"
],
"events_by_id": {},
"external_transaction_hash": "<string>"
}
]
}
{
"error": "<string>"
}
Retrieve transactions and synchronizer reassignments prior to the request’s specification.
OpenAPIUpdated 0.6.0
cURL
Python
JavaScript
PHP
Go
Java
Ruby
curl --request POST \
--url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/backfilling/updates-before' \
--header 'Content-Type: application/json' \
--data '{
"migration_id": 123,
"synchronizer_id": "<string>",
"before": "2026-01-01T00:00:00Z",
"at_or_after": "2026-01-01T00:00:00Z",
"count": 123
}'
import json
import requests
url = "https://scan.sv-1.global.canton.network.sync.global/api/scan/v0/backfilling/updates-before"
headers = {'Content-Type': 'application/json'}
payload = json.loads(r'''{
"migration_id": 123,
"synchronizer_id": "<string>",
"before": "2026-01-01T00:00:00Z",
"at_or_after": "2026-01-01T00:00:00Z",
"count": 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/backfilling/updates-before', {
method: 'POST',
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
"migration_id": 123,
"synchronizer_id": "<string>",
"before": "2026-01-01T00:00:00Z",
"at_or_after": "2026-01-01T00:00:00Z",
"count": 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/backfilling/updates-before',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => <<<'JSON'
{
"migration_id": 123,
"synchronizer_id": "<string>",
"before": "2026-01-01T00:00:00Z",
"at_or_after": "2026-01-01T00:00:00Z",
"count": 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/backfilling/updates-before", bytes.NewBufferString(`{
"migration_id": 123,
"synchronizer_id": "<string>",
"before": "2026-01-01T00:00:00Z",
"at_or_after": "2026-01-01T00:00:00Z",
"count": 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/backfilling/updates-before"))
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString("""
{
"migration_id": 123,
"synchronizer_id": "<string>",
"before": "2026-01-01T00:00:00Z",
"at_or_after": "2026-01-01T00:00:00Z",
"count": 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/backfilling/updates-before')
request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request.body = <<~JSON
{
"migration_id": 123,
"synchronizer_id": "<string>",
"before": "2026-01-01T00:00:00Z",
"at_or_after": "2026-01-01T00:00:00Z",
"count": 123
}
JSON
response = Net::HTTP.start(uri.hostname, uri.port) do |http|
http.request(request)
end
puts response.body
200
404
{
"transactions": [
{
"update_id": "<string>",
"migration_id": 123,
"workflow_id": "<string>",
"record_time": "<string>",
"synchronizer_id": "<string>",
"effective_at": "<string>",
"offset": "<string>",
"root_event_ids": [
"<string>"
],
"events_by_id": {},
"external_transaction_hash": "<string>"
}
]
}
{
"error": "<string>"
}
Body
application/json
migration_id
number
required
OpenAPI type:
integer (int64).synchronizer_id
string
required
before
string
required
OpenAPI type:
string (date-time).Only return updates with a record time strictly smaller than this time.at_or_after
string
OpenAPI type:
string (date-time).Only return updates with a record time equal to or greater than this time.count
number
required
OpenAPI type:
integer (int32).Return at most this many updates. The actual number of updates returned may be smaller.Responses
200
okapplication/json
transactions
UpdateHistoryItem[]
required
Show child attributes
Show child attributes
UpdateHistoryTransaction
UpdateHistoryTransaction
Show child attributes
Show child attributes
update_id
string
required
The id of the update.
migration_id
integer (int64)
required
The migration id of the synchronizer.
workflow_id
string
required
This transaction’s Daml workflow ID; a workflow ID can be associated with multiple transactions. If empty, no workflow ID was set.
record_time
string
required
The time at which the transaction was sequenced, with microsecond resolution, using ISO-8601 representation.
synchronizer_id
string
required
The id of the synchronizer through which this transaction was sequenced.
effective_at
string
required
Ledger effective time, using ISO-8601 representation. This is the time returned by
getTime for all Daml executed as part of this transaction, both by the submitting participant and all confirming participants.offset
string
required
The absolute offset. Note that this field may not be the same across nodes, and therefore should not be compared between SVs. However, within a single SV’s scan, it is monotonically, lexicographically increasing.
root_event_ids
string[]
required
Roots of the transaction tree. These are guaranteed to occur as keys of the
events_by_id object.events_by_id
object
required
Changes to the ledger that were caused by this transaction, keyed by ID. Values are nodes of the transaction tree. Within a transaction, IDs may be referenced by
root_event_ids or child_event_ids in ExercisedEvent herein.external_transaction_hash
string
For an externally signed transaction, contains the external transaction hash signed by the external party. Can be used to correlate an external submission with a committed transaction. This field is conditionally omitted from JSON when null (see OmitNullString).
UpdateHistoryReassignment
UpdateHistoryReassignment
A contract reassignment between synchronizer. May be an assignment or unassignment.
Show child attributes
Show child attributes
update_id
string
required
The id of the update.
offset
string
required
The absolute offset. Note that this field may not be the same across nodes, and therefore should not be compared between SVs.
record_time
string
required
The time at which the transaction was sequenced.
event
oneOf
required
The reassignment event. May be an assignment or unassignment.
Show child attributes
Show child attributes
UpdateHistoryAssignment
UpdateHistoryAssignment
Show child attributes
Show child attributes
submitter
string
required
The party ID who submitted this reassignment
source_synchronizer
string
required
The id of the synchronizer from which the contract was reassigned
target_synchronizer
string
required
The id of the synchronizer to which the contract was reassigned
migration_id
integer (int64)
required
The migration id of the target synchronizer
unassign_id
string
required
The id of the corresponding unassign event; this assignment will usually, but not always, occur after the so-identified unassignment event.
created_event
CreatedEvent
required
The corresponding contract create event
Show child attributes
Show child attributes
event_type
string
required
event_id
string
required
The ID of this particular event. Equal to the key of this element of the containing
events_by_id if this is part of a TreeEvent.contract_id
string
required
The ID of the created contract.
template_id
string
required
The template of the created contract.
package_name
string
required
The package name of the created contract.
create_arguments
object
required
The arguments that have been used to create the contract, in the form of JSON representation of a Daml record.
created_at
string (date-time)
required
Ledger effective time of the transaction that created the contract.
signatories
string[]
required
Signatories to the contract, in the form of party IDs.
observers
string[]
required
Observers to the contract, in the form of party IDs.
reassignment_counter
integer (int64)
required
Each corresponding assigned and unassigned event has the same reassignment_counter. This strictly increases with each unassign command for the same contract. Creation of the contract corresponds to reassignment_counter 0.
UpdateHistoryUnassignment
UpdateHistoryUnassignment
Show child attributes
Show child attributes
submitter
string
required
The party who submitted this reassignment
source_synchronizer
string
required
The id of the synchronizer from which the contract was reassigned
migration_id
integer (int64)
required
The migration id of the synchronizer from which the contract was reassigned
target_synchronizer
string
required
The id of the synchronizer to which the contract was reassigned
unassign_id
string
required
The id of the unassign event, to later be correlated to an assign event
reassignment_counter
integer (int64)
required
Each corresponding assigned and unassigned event has the same reassignment_counter. This strictly increases with each unassign command for the same contract. Creation of the contract corresponds to reassignment_counter 0.
contract_id
string
required
The id of the unassigned contract
404
not foundapplication/json
error
string
required
History
Updated
0.6.0The POST /v0/backfilling/updates-before operation changed in this snapshot.
Updated
0.5.17The POST /v0/backfilling/updates-before operation changed in this snapshot.