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

POST /v2/updates

POST
/
api
/
scan
/
v2
/
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/v2/updates' \
  --header 'Content-Type: application/json' \
  --data '{
  "after": {
    "after_migration_id": 123,
    "after_record_time": "<string>"
  },
  "page_size": 123,
  "daml_value_encoding": "compact_json"
}'
import json
import requests

url = "https://scan.sv-1.global.canton.network.sync.global/api/scan/v2/updates"
headers = {'Content-Type': 'application/json'}
payload = json.loads(r'''{
  "after": {
    "after_migration_id": 123,
    "after_record_time": "<string>"
  },
  "page_size": 123,
  "daml_value_encoding": "compact_json"
}''')
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/v2/updates', {
  method: 'POST',
  headers: {
  "Content-Type": "application/json"
},
  body: JSON.stringify({
  "after": {
    "after_migration_id": 123,
    "after_record_time": "<string>"
  },
  "page_size": 123,
  "daml_value_encoding": "compact_json"
}),
});

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/v2/updates',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => <<<'JSON'
{
  "after": {
    "after_migration_id": 123,
    "after_record_time": "<string>"
  },
  "page_size": 123,
  "daml_value_encoding": "compact_json"
}
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/v2/updates", bytes.NewBufferString(`{
  "after": {
    "after_migration_id": 123,
    "after_record_time": "<string>"
  },
  "page_size": 123,
  "daml_value_encoding": "compact_json"
}`))
  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/v2/updates"))
    .header("Content-Type", "application/json")
    .method("POST", HttpRequest.BodyPublishers.ofString("""
{
  "after": {
    "after_migration_id": 123,
    "after_record_time": "<string>"
  },
  "page_size": 123,
  "daml_value_encoding": "compact_json"
}
"""))
    .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/v2/updates')
request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request.body = <<~JSON
{
  "after": {
    "after_migration_id": 123,
    "after_record_time": "<string>"
  },
  "page_size": 123,
  "daml_value_encoding": "compact_json"
}
JSON
response = Net::HTTP.start(uri.hostname, uri.port) do |http|
  http.request(request)
end
puts response.body
200
400
500
{
  "transactions": [
    {
      "update_id": "<string>",
      "migration_id": 123,
      "workflow_id": "<string>",
      "record_time": "<string>",
      "synchronizer_id": "<string>",
      "effective_at": "<string>",
      "root_event_ids": [
        "<string>"
      ],
      "events_by_id": {},
      "external_transaction_hash": "<string>"
    }
  ]
}
{
  "error": "<string>"
}
{
  "error": "<string>"
}

Returns the update history in ascending order, paged, from ledger begin or optionally starting after a record time. Compared to /v1/updates, the /v2/updates removes the offset field in responses, which was hardcoded to 1 in /v1/updates for compatibility, and is now removed.

cURL
Python
JavaScript
PHP
Go
Java
Ruby
curl --request POST \
  --url 'https://scan.sv-1.global.canton.network.sync.global/api/scan/v2/updates' \
  --header 'Content-Type: application/json' \
  --data '{
  "after": {
    "after_migration_id": 123,
    "after_record_time": "<string>"
  },
  "page_size": 123,
  "daml_value_encoding": "compact_json"
}'
import json
import requests

url = "https://scan.sv-1.global.canton.network.sync.global/api/scan/v2/updates"
headers = {'Content-Type': 'application/json'}
payload = json.loads(r'''{
  "after": {
    "after_migration_id": 123,
    "after_record_time": "<string>"
  },
  "page_size": 123,
  "daml_value_encoding": "compact_json"
}''')
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/v2/updates', {
  method: 'POST',
  headers: {
  "Content-Type": "application/json"
},
  body: JSON.stringify({
  "after": {
    "after_migration_id": 123,
    "after_record_time": "<string>"
  },
  "page_size": 123,
  "daml_value_encoding": "compact_json"
}),
});

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/v2/updates',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => <<<'JSON'
{
  "after": {
    "after_migration_id": 123,
    "after_record_time": "<string>"
  },
  "page_size": 123,
  "daml_value_encoding": "compact_json"
}
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/v2/updates", bytes.NewBufferString(`{
  "after": {
    "after_migration_id": 123,
    "after_record_time": "<string>"
  },
  "page_size": 123,
  "daml_value_encoding": "compact_json"
}`))
  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/v2/updates"))
    .header("Content-Type", "application/json")
    .method("POST", HttpRequest.BodyPublishers.ofString("""
{
  "after": {
    "after_migration_id": 123,
    "after_record_time": "<string>"
  },
  "page_size": 123,
  "daml_value_encoding": "compact_json"
}
"""))
    .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/v2/updates')
request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request.body = <<~JSON
{
  "after": {
    "after_migration_id": 123,
    "after_record_time": "<string>"
  },
  "page_size": 123,
  "daml_value_encoding": "compact_json"
}
JSON
response = Net::HTTP.start(uri.hostname, uri.port) do |http|
  http.request(request)
end
puts response.body
200
400
500
{
  "transactions": [
    {
      "update_id": "<string>",
      "migration_id": 123,
      "workflow_id": "<string>",
      "record_time": "<string>",
      "synchronizer_id": "<string>",
      "effective_at": "<string>",
      "root_event_ids": [
        "<string>"
      ],
      "events_by_id": {},
      "external_transaction_hash": "<string>"
    }
  ]
}
{
  "error": "<string>"
}
{
  "error": "<string>"
}

Body

application/json
after
object
OpenAPI type: UpdateHistoryRequestAfter.The transactions returned will either have a higher migration id or the same migration id and a record_time greater than the migration id and record time specified.

Show child attributes

after_migration_id
number
required
OpenAPI type: integer (int64).The migration id from which to start returning transactions. This is inclusive.
after_record_time
string
required
The record time to start returning transactions from. This only affects transactions with the same migration id as after_migration_id. Higher migration ids are always considered to be later.
page_size
number
required
OpenAPI type: integer (int32).The maximum number of transactions returned for this request.
daml_value_encoding
object
OpenAPI type: DamlValueEncoding.How daml values should be encoded in the response. “compact_json” is a compact, human-readable JSON encoding. It is the same encoding as the one used in the HTTP JSON API or the JavaScript codegen. “protobuf_json” is a verbose JSON encoding that is more difficult to parse, but contains type information, i.e., the values can be parsed losslessly without having access to the Daml source code. Optional and defaults to “compact_json”.Allowed values: compact_json, protobuf_json.

Responses

200

ok
application/json
transactions
UpdateHistoryItemV2[]
required

Show child attributes

UpdateHistoryTransactionV2
UpdateHistoryTransactionV2

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.
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 and sorted lexicographically by ID for display consistency. 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, which are sorted in the order as they occurred in the transaction.
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

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

UpdateHistoryAssignment
UpdateHistoryAssignment

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

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

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

400

bad request
application/json
error
string
required

500

internal server error
application/json
error
string
required

History

Updated0.6.0

The POST /v2/updates operation changed in this snapshot.

Updated0.5.17

The POST /v2/updates operation changed in this snapshot.