Skip to content
CCPEDIAby Unity Nodes
Documentation/Canton Network Docs/Ledger APIOpenAPIView on Canton Network Docs

POST /v2/commands/submit-and-wait

POST
/
v2
/
commands
/
submit-and-wait
Try it
cURL
Python
JavaScript
PHP
Go
Java
Ruby
curl --request POST \
  --url 'http://localhost:7575/v2/commands/submit-and-wait' \
  --header 'Authorization: Bearer $TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "commands": [
    {
      "CreateAndExerciseCommand": {
        "templateId": "<string>",
        "createArguments": "<string>",
        "choice": "<string>",
        "choiceArgument": "<string>"
      }
    }
  ],
  "commandId": "<string>",
  "actAs": [
    "<string>"
  ],
  "userId": "<string>",
  "readAs": [
    "<string>"
  ],
  "workflowId": "<string>",
  "deduplicationPeriod": {
    "DeduplicationDuration": {
      "value": {
        "seconds": 123,
        "nanos": 123,
        "unknownFields": {
          "fields": "<object>"
        }
      }
    }
  },
  "minLedgerTimeAbs": "<string>",
  "minLedgerTimeRel": {
    "seconds": 123,
    "nanos": 123,
    "unknownFields": {
      "fields": {}
    }
  },
  "submissionId": "<string>",
  "disclosedContracts": [
    {
      "templateId": "<string>",
      "contractId": "<string>",
      "createdEventBlob": "<string>",
      "synchronizerId": "<string>"
    }
  ],
  "synchronizerId": "<string>",
  "packageIdSelectionPreference": [
    "<string>"
  ],
  "prefetchContractKeys": [
    {
      "templateId": "<string>",
      "contractKey": "<string>",
      "limit": 123
    }
  ],
  "tapsMaxPasses": 123
}'
import json
import requests

url = "http://localhost:7575/v2/commands/submit-and-wait"
headers = {'Authorization': 'Bearer <token>', 'Content-Type': 'application/json'}
payload = json.loads(r'''{
  "commands": [
    {
      "CreateAndExerciseCommand": {
        "templateId": "<string>",
        "createArguments": "<string>",
        "choice": "<string>",
        "choiceArgument": "<string>"
      }
    }
  ],
  "commandId": "<string>",
  "actAs": [
    "<string>"
  ],
  "userId": "<string>",
  "readAs": [
    "<string>"
  ],
  "workflowId": "<string>",
  "deduplicationPeriod": {
    "DeduplicationDuration": {
      "value": {
        "seconds": 123,
        "nanos": 123,
        "unknownFields": {
          "fields": "<object>"
        }
      }
    }
  },
  "minLedgerTimeAbs": "<string>",
  "minLedgerTimeRel": {
    "seconds": 123,
    "nanos": 123,
    "unknownFields": {
      "fields": {}
    }
  },
  "submissionId": "<string>",
  "disclosedContracts": [
    {
      "templateId": "<string>",
      "contractId": "<string>",
      "createdEventBlob": "<string>",
      "synchronizerId": "<string>"
    }
  ],
  "synchronizerId": "<string>",
  "packageIdSelectionPreference": [
    "<string>"
  ],
  "prefetchContractKeys": [
    {
      "templateId": "<string>",
      "contractKey": "<string>",
      "limit": 123
    }
  ],
  "tapsMaxPasses": 123
}''')
response = requests.request(
    "POST", url, headers=headers, json=payload
)

print(response.text)
const response = await fetch('http://localhost:7575/v2/commands/submit-and-wait', {
  method: 'POST',
  headers: {
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
},
  body: JSON.stringify({
  "commands": [
    {
      "CreateAndExerciseCommand": {
        "templateId": "<string>",
        "createArguments": "<string>",
        "choice": "<string>",
        "choiceArgument": "<string>"
      }
    }
  ],
  "commandId": "<string>",
  "actAs": [
    "<string>"
  ],
  "userId": "<string>",
  "readAs": [
    "<string>"
  ],
  "workflowId": "<string>",
  "deduplicationPeriod": {
    "DeduplicationDuration": {
      "value": {
        "seconds": 123,
        "nanos": 123,
        "unknownFields": {
          "fields": "<object>"
        }
      }
    }
  },
  "minLedgerTimeAbs": "<string>",
  "minLedgerTimeRel": {
    "seconds": 123,
    "nanos": 123,
    "unknownFields": {
      "fields": {}
    }
  },
  "submissionId": "<string>",
  "disclosedContracts": [
    {
      "templateId": "<string>",
      "contractId": "<string>",
      "createdEventBlob": "<string>",
      "synchronizerId": "<string>"
    }
  ],
  "synchronizerId": "<string>",
  "packageIdSelectionPreference": [
    "<string>"
  ],
  "prefetchContractKeys": [
    {
      "templateId": "<string>",
      "contractKey": "<string>",
      "limit": 123
    }
  ],
  "tapsMaxPasses": 123
}),
});

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

curl_setopt_array($curl, [
    CURLOPT_URL => 'http://localhost:7575/v2/commands/submit-and-wait',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => <<<'JSON'
{
  "commands": [
    {
      "CreateAndExerciseCommand": {
        "templateId": "<string>",
        "createArguments": "<string>",
        "choice": "<string>",
        "choiceArgument": "<string>"
      }
    }
  ],
  "commandId": "<string>",
  "actAs": [
    "<string>"
  ],
  "userId": "<string>",
  "readAs": [
    "<string>"
  ],
  "workflowId": "<string>",
  "deduplicationPeriod": {
    "DeduplicationDuration": {
      "value": {
        "seconds": 123,
        "nanos": 123,
        "unknownFields": {
          "fields": "<object>"
        }
      }
    }
  },
  "minLedgerTimeAbs": "<string>",
  "minLedgerTimeRel": {
    "seconds": 123,
    "nanos": 123,
    "unknownFields": {
      "fields": {}
    }
  },
  "submissionId": "<string>",
  "disclosedContracts": [
    {
      "templateId": "<string>",
      "contractId": "<string>",
      "createdEventBlob": "<string>",
      "synchronizerId": "<string>"
    }
  ],
  "synchronizerId": "<string>",
  "packageIdSelectionPreference": [
    "<string>"
  ],
  "prefetchContractKeys": [
    {
      "templateId": "<string>",
      "contractKey": "<string>",
      "limit": 123
    }
  ],
  "tapsMaxPasses": 123
}
JSON,
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer <token>",
        "Content-Type: application/json"
    ],
]);

$response = curl_exec($curl);
echo $response;
package main

import (
  "bytes"
  "fmt"
  "io"
  "net/http"
)

func main() {
  req, _ := http.NewRequest("POST", "http://localhost:7575/v2/commands/submit-and-wait", bytes.NewBufferString(`{
  "commands": [
    {
      "CreateAndExerciseCommand": {
        "templateId": "<string>",
        "createArguments": "<string>",
        "choice": "<string>",
        "choiceArgument": "<string>"
      }
    }
  ],
  "commandId": "<string>",
  "actAs": [
    "<string>"
  ],
  "userId": "<string>",
  "readAs": [
    "<string>"
  ],
  "workflowId": "<string>",
  "deduplicationPeriod": {
    "DeduplicationDuration": {
      "value": {
        "seconds": 123,
        "nanos": 123,
        "unknownFields": {
          "fields": "<object>"
        }
      }
    }
  },
  "minLedgerTimeAbs": "<string>",
  "minLedgerTimeRel": {
    "seconds": 123,
    "nanos": 123,
    "unknownFields": {
      "fields": {}
    }
  },
  "submissionId": "<string>",
  "disclosedContracts": [
    {
      "templateId": "<string>",
      "contractId": "<string>",
      "createdEventBlob": "<string>",
      "synchronizerId": "<string>"
    }
  ],
  "synchronizerId": "<string>",
  "packageIdSelectionPreference": [
    "<string>"
  ],
  "prefetchContractKeys": [
    {
      "templateId": "<string>",
      "contractKey": "<string>",
      "limit": 123
    }
  ],
  "tapsMaxPasses": 123
}`))
  req.Header.Set("Authorization", "Bearer <token>")
  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("http://localhost:7575/v2/commands/submit-and-wait"))
    .header("Authorization", "Bearer <token>")
    .header("Content-Type", "application/json")
    .method("POST", HttpRequest.BodyPublishers.ofString("""
{
  "commands": [
    {
      "CreateAndExerciseCommand": {
        "templateId": "<string>",
        "createArguments": "<string>",
        "choice": "<string>",
        "choiceArgument": "<string>"
      }
    }
  ],
  "commandId": "<string>",
  "actAs": [
    "<string>"
  ],
  "userId": "<string>",
  "readAs": [
    "<string>"
  ],
  "workflowId": "<string>",
  "deduplicationPeriod": {
    "DeduplicationDuration": {
      "value": {
        "seconds": 123,
        "nanos": 123,
        "unknownFields": {
          "fields": "<object>"
        }
      }
    }
  },
  "minLedgerTimeAbs": "<string>",
  "minLedgerTimeRel": {
    "seconds": 123,
    "nanos": 123,
    "unknownFields": {
      "fields": {}
    }
  },
  "submissionId": "<string>",
  "disclosedContracts": [
    {
      "templateId": "<string>",
      "contractId": "<string>",
      "createdEventBlob": "<string>",
      "synchronizerId": "<string>"
    }
  ],
  "synchronizerId": "<string>",
  "packageIdSelectionPreference": [
    "<string>"
  ],
  "prefetchContractKeys": [
    {
      "templateId": "<string>",
      "contractKey": "<string>",
      "limit": 123
    }
  ],
  "tapsMaxPasses": 123
}
"""))
    .build();
var response = HttpClient.newHttpClient().send(
    request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
require 'net/http'
require 'uri'

uri = URI('http://localhost:7575/v2/commands/submit-and-wait')
request = Net::HTTP::Post.new(uri)
request['Authorization'] = 'Bearer <token>'
request['Content-Type'] = 'application/json'
request.body = <<~JSON
{
  "commands": [
    {
      "CreateAndExerciseCommand": {
        "templateId": "<string>",
        "createArguments": "<string>",
        "choice": "<string>",
        "choiceArgument": "<string>"
      }
    }
  ],
  "commandId": "<string>",
  "actAs": [
    "<string>"
  ],
  "userId": "<string>",
  "readAs": [
    "<string>"
  ],
  "workflowId": "<string>",
  "deduplicationPeriod": {
    "DeduplicationDuration": {
      "value": {
        "seconds": 123,
        "nanos": 123,
        "unknownFields": {
          "fields": "<object>"
        }
      }
    }
  },
  "minLedgerTimeAbs": "<string>",
  "minLedgerTimeRel": {
    "seconds": 123,
    "nanos": 123,
    "unknownFields": {
      "fields": {}
    }
  },
  "submissionId": "<string>",
  "disclosedContracts": [
    {
      "templateId": "<string>",
      "contractId": "<string>",
      "createdEventBlob": "<string>",
      "synchronizerId": "<string>"
    }
  ],
  "synchronizerId": "<string>",
  "packageIdSelectionPreference": [
    "<string>"
  ],
  "prefetchContractKeys": [
    {
      "templateId": "<string>",
      "contractKey": "<string>",
      "limit": 123
    }
  ],
  "tapsMaxPasses": 123
}
JSON
response = Net::HTTP.start(uri.hostname, uri.port) do |http|
  http.request(request)
end
puts response.body
200
400
default
{
  "updateId": "<string>",
  "completionOffset": 123
}
<string>
{
  "code": "<string>",
  "cause": "<string>",
  "correlationId": "<string>",
  "traceId": "<string>",
  "context": {},
  "resources": [
    [
      "<string>"
    ]
  ],
  "errorCategory": 123,
  "grpcCodeValue": 123,
  "retryInfo": "<string>",
  "definiteAnswer": false
}

Submits a single composite command and waits for its result. Propagates the gRPC error of failed submissions including Daml interpretation errors.

cURL
Python
JavaScript
PHP
Go
Java
Ruby
curl --request POST \
  --url 'http://localhost:7575/v2/commands/submit-and-wait' \
  --header 'Authorization: Bearer $TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "commands": [
    {
      "CreateAndExerciseCommand": {
        "templateId": "<string>",
        "createArguments": "<string>",
        "choice": "<string>",
        "choiceArgument": "<string>"
      }
    }
  ],
  "commandId": "<string>",
  "actAs": [
    "<string>"
  ],
  "userId": "<string>",
  "readAs": [
    "<string>"
  ],
  "workflowId": "<string>",
  "deduplicationPeriod": {
    "DeduplicationDuration": {
      "value": {
        "seconds": 123,
        "nanos": 123,
        "unknownFields": {
          "fields": "<object>"
        }
      }
    }
  },
  "minLedgerTimeAbs": "<string>",
  "minLedgerTimeRel": {
    "seconds": 123,
    "nanos": 123,
    "unknownFields": {
      "fields": {}
    }
  },
  "submissionId": "<string>",
  "disclosedContracts": [
    {
      "templateId": "<string>",
      "contractId": "<string>",
      "createdEventBlob": "<string>",
      "synchronizerId": "<string>"
    }
  ],
  "synchronizerId": "<string>",
  "packageIdSelectionPreference": [
    "<string>"
  ],
  "prefetchContractKeys": [
    {
      "templateId": "<string>",
      "contractKey": "<string>",
      "limit": 123
    }
  ],
  "tapsMaxPasses": 123
}'
import json
import requests

url = "http://localhost:7575/v2/commands/submit-and-wait"
headers = {'Authorization': 'Bearer <token>', 'Content-Type': 'application/json'}
payload = json.loads(r'''{
  "commands": [
    {
      "CreateAndExerciseCommand": {
        "templateId": "<string>",
        "createArguments": "<string>",
        "choice": "<string>",
        "choiceArgument": "<string>"
      }
    }
  ],
  "commandId": "<string>",
  "actAs": [
    "<string>"
  ],
  "userId": "<string>",
  "readAs": [
    "<string>"
  ],
  "workflowId": "<string>",
  "deduplicationPeriod": {
    "DeduplicationDuration": {
      "value": {
        "seconds": 123,
        "nanos": 123,
        "unknownFields": {
          "fields": "<object>"
        }
      }
    }
  },
  "minLedgerTimeAbs": "<string>",
  "minLedgerTimeRel": {
    "seconds": 123,
    "nanos": 123,
    "unknownFields": {
      "fields": {}
    }
  },
  "submissionId": "<string>",
  "disclosedContracts": [
    {
      "templateId": "<string>",
      "contractId": "<string>",
      "createdEventBlob": "<string>",
      "synchronizerId": "<string>"
    }
  ],
  "synchronizerId": "<string>",
  "packageIdSelectionPreference": [
    "<string>"
  ],
  "prefetchContractKeys": [
    {
      "templateId": "<string>",
      "contractKey": "<string>",
      "limit": 123
    }
  ],
  "tapsMaxPasses": 123
}''')
response = requests.request(
    "POST", url, headers=headers, json=payload
)

print(response.text)
const response = await fetch('http://localhost:7575/v2/commands/submit-and-wait', {
  method: 'POST',
  headers: {
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
},
  body: JSON.stringify({
  "commands": [
    {
      "CreateAndExerciseCommand": {
        "templateId": "<string>",
        "createArguments": "<string>",
        "choice": "<string>",
        "choiceArgument": "<string>"
      }
    }
  ],
  "commandId": "<string>",
  "actAs": [
    "<string>"
  ],
  "userId": "<string>",
  "readAs": [
    "<string>"
  ],
  "workflowId": "<string>",
  "deduplicationPeriod": {
    "DeduplicationDuration": {
      "value": {
        "seconds": 123,
        "nanos": 123,
        "unknownFields": {
          "fields": "<object>"
        }
      }
    }
  },
  "minLedgerTimeAbs": "<string>",
  "minLedgerTimeRel": {
    "seconds": 123,
    "nanos": 123,
    "unknownFields": {
      "fields": {}
    }
  },
  "submissionId": "<string>",
  "disclosedContracts": [
    {
      "templateId": "<string>",
      "contractId": "<string>",
      "createdEventBlob": "<string>",
      "synchronizerId": "<string>"
    }
  ],
  "synchronizerId": "<string>",
  "packageIdSelectionPreference": [
    "<string>"
  ],
  "prefetchContractKeys": [
    {
      "templateId": "<string>",
      "contractKey": "<string>",
      "limit": 123
    }
  ],
  "tapsMaxPasses": 123
}),
});

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

curl_setopt_array($curl, [
    CURLOPT_URL => 'http://localhost:7575/v2/commands/submit-and-wait',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => <<<'JSON'
{
  "commands": [
    {
      "CreateAndExerciseCommand": {
        "templateId": "<string>",
        "createArguments": "<string>",
        "choice": "<string>",
        "choiceArgument": "<string>"
      }
    }
  ],
  "commandId": "<string>",
  "actAs": [
    "<string>"
  ],
  "userId": "<string>",
  "readAs": [
    "<string>"
  ],
  "workflowId": "<string>",
  "deduplicationPeriod": {
    "DeduplicationDuration": {
      "value": {
        "seconds": 123,
        "nanos": 123,
        "unknownFields": {
          "fields": "<object>"
        }
      }
    }
  },
  "minLedgerTimeAbs": "<string>",
  "minLedgerTimeRel": {
    "seconds": 123,
    "nanos": 123,
    "unknownFields": {
      "fields": {}
    }
  },
  "submissionId": "<string>",
  "disclosedContracts": [
    {
      "templateId": "<string>",
      "contractId": "<string>",
      "createdEventBlob": "<string>",
      "synchronizerId": "<string>"
    }
  ],
  "synchronizerId": "<string>",
  "packageIdSelectionPreference": [
    "<string>"
  ],
  "prefetchContractKeys": [
    {
      "templateId": "<string>",
      "contractKey": "<string>",
      "limit": 123
    }
  ],
  "tapsMaxPasses": 123
}
JSON,
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer <token>",
        "Content-Type: application/json"
    ],
]);

$response = curl_exec($curl);
echo $response;
package main

import (
  "bytes"
  "fmt"
  "io"
  "net/http"
)

func main() {
  req, _ := http.NewRequest("POST", "http://localhost:7575/v2/commands/submit-and-wait", bytes.NewBufferString(`{
  "commands": [
    {
      "CreateAndExerciseCommand": {
        "templateId": "<string>",
        "createArguments": "<string>",
        "choice": "<string>",
        "choiceArgument": "<string>"
      }
    }
  ],
  "commandId": "<string>",
  "actAs": [
    "<string>"
  ],
  "userId": "<string>",
  "readAs": [
    "<string>"
  ],
  "workflowId": "<string>",
  "deduplicationPeriod": {
    "DeduplicationDuration": {
      "value": {
        "seconds": 123,
        "nanos": 123,
        "unknownFields": {
          "fields": "<object>"
        }
      }
    }
  },
  "minLedgerTimeAbs": "<string>",
  "minLedgerTimeRel": {
    "seconds": 123,
    "nanos": 123,
    "unknownFields": {
      "fields": {}
    }
  },
  "submissionId": "<string>",
  "disclosedContracts": [
    {
      "templateId": "<string>",
      "contractId": "<string>",
      "createdEventBlob": "<string>",
      "synchronizerId": "<string>"
    }
  ],
  "synchronizerId": "<string>",
  "packageIdSelectionPreference": [
    "<string>"
  ],
  "prefetchContractKeys": [
    {
      "templateId": "<string>",
      "contractKey": "<string>",
      "limit": 123
    }
  ],
  "tapsMaxPasses": 123
}`))
  req.Header.Set("Authorization", "Bearer <token>")
  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("http://localhost:7575/v2/commands/submit-and-wait"))
    .header("Authorization", "Bearer <token>")
    .header("Content-Type", "application/json")
    .method("POST", HttpRequest.BodyPublishers.ofString("""
{
  "commands": [
    {
      "CreateAndExerciseCommand": {
        "templateId": "<string>",
        "createArguments": "<string>",
        "choice": "<string>",
        "choiceArgument": "<string>"
      }
    }
  ],
  "commandId": "<string>",
  "actAs": [
    "<string>"
  ],
  "userId": "<string>",
  "readAs": [
    "<string>"
  ],
  "workflowId": "<string>",
  "deduplicationPeriod": {
    "DeduplicationDuration": {
      "value": {
        "seconds": 123,
        "nanos": 123,
        "unknownFields": {
          "fields": "<object>"
        }
      }
    }
  },
  "minLedgerTimeAbs": "<string>",
  "minLedgerTimeRel": {
    "seconds": 123,
    "nanos": 123,
    "unknownFields": {
      "fields": {}
    }
  },
  "submissionId": "<string>",
  "disclosedContracts": [
    {
      "templateId": "<string>",
      "contractId": "<string>",
      "createdEventBlob": "<string>",
      "synchronizerId": "<string>"
    }
  ],
  "synchronizerId": "<string>",
  "packageIdSelectionPreference": [
    "<string>"
  ],
  "prefetchContractKeys": [
    {
      "templateId": "<string>",
      "contractKey": "<string>",
      "limit": 123
    }
  ],
  "tapsMaxPasses": 123
}
"""))
    .build();
var response = HttpClient.newHttpClient().send(
    request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
require 'net/http'
require 'uri'

uri = URI('http://localhost:7575/v2/commands/submit-and-wait')
request = Net::HTTP::Post.new(uri)
request['Authorization'] = 'Bearer <token>'
request['Content-Type'] = 'application/json'
request.body = <<~JSON
{
  "commands": [
    {
      "CreateAndExerciseCommand": {
        "templateId": "<string>",
        "createArguments": "<string>",
        "choice": "<string>",
        "choiceArgument": "<string>"
      }
    }
  ],
  "commandId": "<string>",
  "actAs": [
    "<string>"
  ],
  "userId": "<string>",
  "readAs": [
    "<string>"
  ],
  "workflowId": "<string>",
  "deduplicationPeriod": {
    "DeduplicationDuration": {
      "value": {
        "seconds": 123,
        "nanos": 123,
        "unknownFields": {
          "fields": "<object>"
        }
      }
    }
  },
  "minLedgerTimeAbs": "<string>",
  "minLedgerTimeRel": {
    "seconds": 123,
    "nanos": 123,
    "unknownFields": {
      "fields": {}
    }
  },
  "submissionId": "<string>",
  "disclosedContracts": [
    {
      "templateId": "<string>",
      "contractId": "<string>",
      "createdEventBlob": "<string>",
      "synchronizerId": "<string>"
    }
  ],
  "synchronizerId": "<string>",
  "packageIdSelectionPreference": [
    "<string>"
  ],
  "prefetchContractKeys": [
    {
      "templateId": "<string>",
      "contractKey": "<string>",
      "limit": 123
    }
  ],
  "tapsMaxPasses": 123
}
JSON
response = Net::HTTP.start(uri.hostname, uri.port) do |http|
  http.request(request)
end
puts response.body
200
400
default
{
  "updateId": "<string>",
  "completionOffset": 123
}
<string>
{
  "code": "<string>",
  "cause": "<string>",
  "correlationId": "<string>",
  "traceId": "<string>",
  "context": {},
  "resources": [
    [
      "<string>"
    ]
  ],
  "errorCategory": 123,
  "grpcCodeValue": 123,
  "retryInfo": "<string>",
  "definiteAnswer": false
}

Authorizations

httpAuth

Authorization
string
required
HTTP bearer authentication. Send the token as Authorization: Bearer &lt;token&gt;. Ledger API standard JWT token

apiKeyAuth

Sec-WebSocket-Protocol
string
required
API key authentication in the header. Ledger API standard JWT token (websocket)

Body

application/json
commands
object[]
required
OpenAPI type: Command[].Individual elements of this atomic command. Must be non-empty. Required: must be non-empty

Show child attributes

Variant 1
object

Show child attributes

CreateAndExerciseCommand
object
required
OpenAPI type: CreateAndExerciseCommand.Create a contract and exercise a choice on it in the same transaction.

Show child attributes

templateId
string
required
The template of the contract the client wants to create. Both package-name and package-id reference identifier formats for the template-id are supported. Note: The package-id reference identifier format is deprecated. We plan to end support for this format in version 3.4. Required
createArguments
object
required
The arguments required for creating a contract from this template. Required
choice
string
required
The name of the choice the client wants to exercise. Must be a valid NameString (as described in value.proto). Required
choiceArgument
object
required
The argument for this choice. Required
Variant 2
object

Show child attributes

CreateCommand
object
required
OpenAPI type: CreateCommand.Create a new contract instance based on a template.

Show child attributes

templateId
string
required
The template of contract the client wants to create. Both package-name and package-id reference identifier formats for the template-id are supported. Note: The package-id reference identifier format is deprecated. We plan to end support for this format in version 3.4. Required
createArguments
object
required
The arguments required for creating a contract from this template. Required
Variant 3
object

Show child attributes

ExerciseByKeyCommand
object
required
OpenAPI type: ExerciseByKeyCommand.Exercise a choice on an existing contract specified by its key.

Show child attributes

templateId
string
required
The template of contract the client wants to exercise. Both package-name and package-id reference identifier formats for the template-id are supported. Note: The package-id reference identifier format is deprecated. We plan to end support for this format in version 3.4. Required
contractKey
object
required
The key of the contract the client wants to exercise upon. Required
choice
string
required
The name of the choice the client wants to exercise. Must be a valid NameString (as described in value.proto) Required
choiceArgument
object
required
The argument for this choice. Required
Variant 4
object

Show child attributes

ExerciseCommand
object
required
OpenAPI type: ExerciseCommand.Exercise a choice on an existing contract.

Show child attributes

templateId
string
required
The template or interface of the contract the client wants to exercise. Both package-name and package-id reference identifier formats for the template-id are supported. Note: The package-id reference identifier format is deprecated. We plan to end support for this format in version 3.4. To exercise a choice on an interface, specify the interface identifier in the template_id field. Required
contractId
string
required
The ID of the contract the client wants to exercise upon. Must be a valid LedgerString (as described in value.proto). Required
choice
string
required
The name of the choice the client wants to exercise. Must be a valid NameString (as described in value.proto) Required
choiceArgument
object
required
The argument for this choice. Required
commandId
string
required
Uniquely identifies the command. The triple (user_id, act_as, command_id) constitutes the change ID for the intended ledger change, where act_as is interpreted as a set of party names. The change ID can be used for matching the intended ledger changes with all their completions. Must be a valid LedgerString (as described in value.proto). Required
actAs
string[]
required
Set of parties on whose behalf the command should be executed. If ledger API authorization is enabled, then the authorization metadata must authorize the sender of the request to act on behalf of each of the given parties. Each element must be a valid PartyIdString (as described in value.proto). Required: must be non-empty
userId
string
Uniquely identifies the participant user that issued the command. Must be a valid UserIdString (as described in value.proto). Required unless authentication is used with a user token. In that case, the token’s user-id will be used for the request’s user_id. Optional
readAs
string[]
Set of parties on whose behalf (in addition to all parties listed in act_as) contracts can be retrieved. This affects Daml operations such as fetch, fetchByKey, lookupByKey, exercise, and exerciseByKey. Note: A participant node of a Daml network can host multiple parties. Each contract present on the participant node is only visible to a subset of these parties. A command can only use contracts that are visible to at least one of the parties in act_as or read_as. This visibility check is independent from the Daml authorization rules for fetch operations. If ledger API authorization is enabled, then the authorization metadata must authorize the sender of the request to read contract data on behalf of each of the given parties. Optional: can be empty
workflowId
string
Identifier of the on-ledger workflow that this command is a part of. Must be a valid LedgerString (as described in value.proto). Optional
deduplicationPeriod
object
OpenAPI type: DeduplicationPeriod.Specifies the deduplication period for the change ID. If omitted, the participant will assume the configured maximum deduplication time. Optional

Show child attributes

Variant 1
object

Show child attributes

DeduplicationDuration
object
required
OpenAPI type: DeduplicationDuration.

Show child attributes

value
object
required
OpenAPI type: Duration.

Show child attributes

seconds
number
required
OpenAPI type: integer (int64).
nanos
number
required
OpenAPI type: integer (int32).
unknownFields
object
OpenAPI type: UnknownFieldSet.This field is automatically added as part of protobuf to json mapping

Show child attributes

fields
object
required
OpenAPI type: Map_Int_Field.
Variant 2
object

Show child attributes

DeduplicationOffset
object
required
OpenAPI type: DeduplicationOffset.

Show child attributes

value
number
required
OpenAPI type: integer (int64).
Variant 3
object

Show child attributes

Empty
object
required
OpenAPI type: Empty.
minLedgerTimeAbs
string
Lower bound for the ledger time assigned to the resulting transaction. Note: The ledger time of a transaction is assigned as part of command interpretation. Use this property if you expect that command interpretation will take a considerate amount of time, such that by the time the resulting transaction is sequenced, its assigned ledger time is not valid anymore. Must not be set at the same time as min_ledger_time_rel. Optional
minLedgerTimeRel
object
OpenAPI type: Duration.Same as min_ledger_time_abs, but specified as a duration, starting from the time the command is received by the server. Must not be set at the same time as min_ledger_time_abs. Optional

Show child attributes

seconds
number
required
OpenAPI type: integer (int64).
nanos
number
required
OpenAPI type: integer (int32).
unknownFields
object
OpenAPI type: UnknownFieldSet.This field is automatically added as part of protobuf to json mapping

Show child attributes

fields
object
required
OpenAPI type: Map_Int_Field.
submissionId
string
A unique identifier to distinguish completions for different submissions with the same change ID. Typically a random UUID. Applications are expected to use a different UUID for each retry of a submission with the same change ID. Must be a valid LedgerString (as described in value.proto). If omitted, the participant or the committer may set a value of their choice. Optional
disclosedContracts
object[]
OpenAPI type: DisclosedContract[].Additional contracts used to resolve contract & contract key lookups. Optional: can be empty

Show child attributes

templateId
string
The template id of the contract. The identifier uses the package-id reference format. If provided, used to validate the template id of the contract serialized in the created_event_blob. Optional
contractId
string
The contract id If provided, used to validate the contract id of the contract serialized in the created_event_blob. Optional
createdEventBlob
string
required
Opaque byte string containing the complete payload required by the Daml engine to reconstruct a contract not known to the receiving participant. Required: must be non-empty
synchronizerId
string
The ID of the synchronizer where the contract is currently assigned Optional
synchronizerId
string
Must be a valid synchronizer id Optional
packageIdSelectionPreference
string[]
The package-id selection preference of the client for resolving package names and interface instances in command submission and interpretation Optional: can be empty
prefetchContractKeys
object[]
OpenAPI type: PrefetchContractKey[].Fetches the contract keys into the caches to speed up the command processing. Each entry specifies a key and a limit on how many contracts to prefetch for that key. The limit does not count disclosed contracts, and should reflect the number of additional contracts expected to be resolved during interpretation of the commands. If a key appears multiple times, the last entry’s limit wins. Optional: can be empty

Show child attributes

templateId
string
required
The template of contract the client wants to prefetch. Both package-name and package-id reference identifier formats for the template-id are supported. Note: The package-id reference identifier format is deprecated. We plan to end support for this format in version 3.4. Required
contractKey
object
required
The key of the contract the client wants to prefetch. Required
limit
number
OpenAPI type: integer (int32).The number of contracts to prefetch for this key, if available. This is in addition to disclosed contracts. - for backward compatibility reason, absence is interpreted as 1 - 0 is forbidden - capped at 2^31 - 1. The system may impose further limits. Optional
tapsMaxPasses
number
OpenAPI type: integer (int32).The maximum number of passes for the Topology-Aware Package Selection (TAPS). Higher values can increase the chance of successful package selection for routing of interpreted transactions. If unset, this defaults to the value defined in the participant configuration. The provided value must not exceed the limit specified in the participant configuration. Optional

Responses

200

application/json
updateId
string
required
The id of the transaction that resulted from the submitted command. Must be a valid LedgerString (as described in value.proto). Required
completionOffset
integer (int64)
required
The details of the offset field are described in community/ledger-api/README.md. Required

400

Invalid value, Invalid value for: body
text/plain
value
string
required

default

application/json
code
string
required
cause
string
required
correlationId
string
traceId
string
context
Map_String
required
resources
Tuple2_String_String[]
errorCategory
integer (int32)
required
grpcCodeValue
integer (int32)
retryInfo
string
definiteAnswer
boolean

History

Updated3.5

The POST /v2/commands/submit-and-wait operation changed in this snapshot.