Skip to content
CCPEDIAby Unity Nodes
Documentation/Canton Network Docs/Splice APIsToken Standard APIsAllocation Instruction V2 APIView on Canton Network Docs ↗

POST /registry/allocation-instruction/v2/allocation-factory

POST
/
registry
/
allocation-instruction
/
v2
/
allocation-factory
Try it
cURL
Python
JavaScript
PHP
Go
Java
Ruby
curl --request POST \
  --url 'https://example.com/registry/allocation-instruction/v2/allocation-factory' \
  --header 'Content-Type: application/json' \
  --data '{
  "choiceArguments": {},
  "excludeDebugFields": false
}'
import json
import requests

url = "https://example.com/registry/allocation-instruction/v2/allocation-factory"
headers = {'Content-Type': 'application/json'}
payload = json.loads(r'''{
  "choiceArguments": {},
  "excludeDebugFields": false
}''')
response = requests.request(
    "POST", url, headers=headers, json=payload
)

print(response.text)
const response = await fetch('https://example.com/registry/allocation-instruction/v2/allocation-factory', {
  method: 'POST',
  headers: {
  "Content-Type": "application/json"
},
  body: JSON.stringify({
  "choiceArguments": {},
  "excludeDebugFields": false
}),
});

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

curl_setopt_array($curl, [
    CURLOPT_URL => 'https://example.com/registry/allocation-instruction/v2/allocation-factory',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => <<<'JSON'
{
  "choiceArguments": {},
  "excludeDebugFields": false
}
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://example.com/registry/allocation-instruction/v2/allocation-factory", bytes.NewBufferString(`{
  "choiceArguments": {},
  "excludeDebugFields": false
}`))
  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://example.com/registry/allocation-instruction/v2/allocation-factory"))
    .header("Content-Type", "application/json")
    .method("POST", HttpRequest.BodyPublishers.ofString("""
{
  "choiceArguments": {},
  "excludeDebugFields": false
}
"""))
    .build();
var response = HttpClient.newHttpClient().send(
    request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
require 'net/http'
require 'uri'

uri = URI('https://example.com/registry/allocation-instruction/v2/allocation-factory')
request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request.body = <<~JSON
{
  "choiceArguments": {},
  "excludeDebugFields": false
}
JSON
response = Net::HTTP.start(uri.hostname, uri.port) do |http|
  http.request(request)
end
puts response.body
200
400
404
409
{
  "factoryId": "<string>",
  "choiceContext": {
    "choiceContextData": {},
    "disclosedContracts": [
      {
        "templateId": "<string>",
        "contractId": "<string>",
        "createdEventBlob": "<string>",
        "synchronizerId": "<string>",
        "debugPackageName": "<string>",
        "debugPayload": {},
        "debugCreatedAt": "2026-01-01T00:00:00Z"
      }
    ]
  }
}
{
  "error": "<string>"
}
{
  "error": "<string>"
}
{
  "error": "<string>"
}

Get the factory and choice context for creating allocations using the AllocationFactory_Allocate choice. Registries MAY limit the size of the allocations that they support. To ensure wide compatibility with apps, registries MUST support creating allocations that involve at most 25 transfer legs.

cURL
Python
JavaScript
PHP
Go
Java
Ruby
curl --request POST \
  --url 'https://example.com/registry/allocation-instruction/v2/allocation-factory' \
  --header 'Content-Type: application/json' \
  --data '{
  "choiceArguments": {},
  "excludeDebugFields": false
}'
import json
import requests

url = "https://example.com/registry/allocation-instruction/v2/allocation-factory"
headers = {'Content-Type': 'application/json'}
payload = json.loads(r'''{
  "choiceArguments": {},
  "excludeDebugFields": false
}''')
response = requests.request(
    "POST", url, headers=headers, json=payload
)

print(response.text)
const response = await fetch('https://example.com/registry/allocation-instruction/v2/allocation-factory', {
  method: 'POST',
  headers: {
  "Content-Type": "application/json"
},
  body: JSON.stringify({
  "choiceArguments": {},
  "excludeDebugFields": false
}),
});

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

curl_setopt_array($curl, [
    CURLOPT_URL => 'https://example.com/registry/allocation-instruction/v2/allocation-factory',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => <<<'JSON'
{
  "choiceArguments": {},
  "excludeDebugFields": false
}
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://example.com/registry/allocation-instruction/v2/allocation-factory", bytes.NewBufferString(`{
  "choiceArguments": {},
  "excludeDebugFields": false
}`))
  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://example.com/registry/allocation-instruction/v2/allocation-factory"))
    .header("Content-Type", "application/json")
    .method("POST", HttpRequest.BodyPublishers.ofString("""
{
  "choiceArguments": {},
  "excludeDebugFields": false
}
"""))
    .build();
var response = HttpClient.newHttpClient().send(
    request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
require 'net/http'
require 'uri'

uri = URI('https://example.com/registry/allocation-instruction/v2/allocation-factory')
request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request.body = <<~JSON
{
  "choiceArguments": {},
  "excludeDebugFields": false
}
JSON
response = Net::HTTP.start(uri.hostname, uri.port) do |http|
  http.request(request)
end
puts response.body
200
400
404
409
{
  "factoryId": "<string>",
  "choiceContext": {
    "choiceContextData": {},
    "disclosedContracts": [
      {
        "templateId": "<string>",
        "contractId": "<string>",
        "createdEventBlob": "<string>",
        "synchronizerId": "<string>",
        "debugPackageName": "<string>",
        "debugPayload": {},
        "debugCreatedAt": "2026-01-01T00:00:00Z"
      }
    ]
  }
}
{
  "error": "<string>"
}
{
  "error": "<string>"
}
{
  "error": "<string>"
}

Body

application/json
choiceArguments
object
required
The arguments that are intended to be passed to the choice provided by the factory. To avoid repeating the Daml type definitions, they are specified as JSON objects. However the concrete format is given by how the choice arguments are encoded using the Daml JSON API (with the extraArgs.context and extraArgs.meta fields set to the empty object). The choice arguments are provided so that the registry can also provide choice-argument specific contracts, e.g., the configuration for a specific instrument-id.
excludeDebugFields
boolean
default:"false"
If set to true, the response will not include fields prefixed with ‘debug’. Useful to save bandwidth.

Responses

200

ok
application/json
factoryId
string
required
The contract ID of the contract implementing the factory interface.
choiceContext
ChoiceContext
required
The context required to exercise a choice on a contract via an interface. Used to retrieve additional reference data that is passed in via disclosed contracts, which are in turn referred to via their contract ID in the choiceContextData. Asset implementations SHOULD avoid that this value depends on contract-ids passed in the choice arguments, so that clients can prefetch choice contexts when chaining multiple token standard actions together in a single Daml transaction.

Show child attributes

choiceContextData
object
required
The additional data to use when exercising the choice.
disclosedContracts
DisclosedContract[]
required
The contracts that are required to be disclosed to the participant node for exercising the choice.

Show child attributes

templateId
string
required
The fully qualified template identifier of the disclosed contract.
contractId
string
required
The contract ID of the disclosed contract.
createdEventBlob
string
required
The serialized created event of the disclosed contract, forwarded unchanged as retrieved from the JSON Ledger API.
synchronizerId
string
required
The synchronizer to which the contract is currently assigned. If the contract is in the process of being reassigned, then a “409” response is returned.
debugPackageName
string
The name of the Daml package that was used to create the contract. Use this data only if you trust the provider, as it might not match the data in the createdEventBlob.
debugPayload
object
The contract arguments that were used to create the contract. Use this data only if you trust the provider, as it might not match the data in the createdEventBlob.
debugCreatedAt
string (date-time)
The ledger effective time at which the contract was created. Use this data only if you trust the provider, as it might not match the data in the createdEventBlob.

400

bad request
application/json
error
string
required

404

not found
application/json
error
string
required

409

conflict
application/json
error
string
required

History

Added0.6.11