> ## Documentation Index
> Fetch the complete documentation index at: https://cantonfoundation-reference-history-contracts.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Submits a single composite command and waits for its result

<div class="x2mdx-ref-page x2mdx-ref-page--operation x2mdx-ref-page--manual-api" />

<div class="x2mdx-ref-hero">
  <p class="x2mdx-ref-eyebrow">JSON Ledger API</p>

  <h1 class="x2mdx-ref-title">Submits a single composite command and waits for its result</h1>

  <div class="x2mdx-ref-badges">
    <span class="x2mdx-ref-badge x2mdx-ref-badge--protocol">OpenAPI</span>

    <span class="x2mdx-ref-badge x2mdx-ref-badge--added">Since 3.4</span>

    <span class="x2mdx-ref-badge x2mdx-ref-badge--changed">Changed 3.5</span>
  </div>
</div>

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

## Protocol Details

<dl class="x2mdx-ref-meta-grid">
  <div class="x2mdx-ref-meta-item">
    <dt>Operation ID</dt>
    <dd>postV2CommandsSubmit-and-wait</dd>
  </div>

  <div class="x2mdx-ref-meta-item">
    <dt>Authentication</dt>
    <dd>Bearer token</dd>
  </div>

  <div class="x2mdx-ref-meta-item">
    <dt>Published</dt>
    <dd>3.5</dd>
  </div>
</dl>

## Inputs

### Request body

<div class="x2mdx-ref-badges">
  <span class="x2mdx-ref-badge x2mdx-ref-badge--neutral">application/json</span>
</div>

<ParamField body="commands" type="object[]" required>
  OpenAPI type: `Command[]`.

  Individual elements of this atomic command. Must be non-empty. Required: must be non-empty
</ParamField>

<ParamField body="commandId" type="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
</ParamField>

<ParamField body="actAs" type="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
</ParamField>

<ParamField body="userId" type="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
</ParamField>

<ParamField body="readAs" type="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
</ParamField>

<ParamField body="workflowId" type="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
</ParamField>

<ParamField body="deduplicationPeriod" type="object">
  OpenAPI type: `DeduplicationPeriod`.

  Specifies the deduplication period for the change ID. If omitted, the participant will assume the configured maximum deduplication time. Optional
</ParamField>

<ParamField body="minLedgerTimeAbs" type="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
</ParamField>

<ParamField body="minLedgerTimeRel" type="object">
  OpenAPI type: `Duration`.

  *
</ParamField>

<ParamField body="submissionId" type="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
</ParamField>

<ParamField body="disclosedContracts" type="object[]">
  OpenAPI type: `DisclosedContract[]`.

  Additional contracts used to resolve contract & contract key lookups. Optional: can be empty
</ParamField>

<ParamField body="synchronizerId" type="string">
  Must be a valid synchronizer id Optional
</ParamField>

<ParamField body="packageIdSelectionPreference" type="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
</ParamField>

<ParamField body="prefetchContractKeys" type="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
</ParamField>

<ParamField body="tapsMaxPasses" type="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
</ParamField>

## Outputs

### 200

<div class="x2mdx-ref-badges">
  <span class="x2mdx-ref-badge x2mdx-ref-badge--neutral">application/json</span>
</div>

<ResponseField name="updateId" type="string" required>
  The id of the transaction that resulted from the submitted command. Must be a valid LedgerString (as described in `value.proto`). Required
</ResponseField>

<ResponseField name="completionOffset" type="integer (int64)" required>
  The details of the offset field are described in `community/ledger-api/README.md`. Required
</ResponseField>

### 400

<div class="x2mdx-ref-badges">
  <span class="x2mdx-ref-badge x2mdx-ref-badge--neutral">text/plain</span>
</div>

<ResponseField name="value" type="string" required>
  *
</ResponseField>

### default

<div class="x2mdx-ref-badges">
  <span class="x2mdx-ref-badge x2mdx-ref-badge--neutral">application/json</span>
</div>

<ResponseField name="code" type="string" required>
  *
</ResponseField>

<ResponseField name="cause" type="string" required>
  *
</ResponseField>

<ResponseField name="correlationId" type="string">
  *
</ResponseField>

<ResponseField name="traceId" type="string">
  *
</ResponseField>

<ResponseField name="context" type="Map_String" required>
  *
</ResponseField>

<ResponseField name="resources" type="Tuple2_String_String[]">
  *
</ResponseField>

<ResponseField name="errorCategory" type="integer (int32)" required>
  *
</ResponseField>

<ResponseField name="grpcCodeValue" type="integer (int32)">
  *
</ResponseField>

<ResponseField name="retryInfo" type="string">
  *
</ResponseField>

<ResponseField name="definiteAnswer" type="boolean">
  *
</ResponseField>

## History

<div class="x2mdx-ref-history" aria-label="Reference history">
  <div class="x2mdx-ref-history-event x2mdx-ref-history-event--changed">
    <div class="x2mdx-ref-history-event-head">
      <span class="x2mdx-ref-history-event-label">Changed</span>
      <code class="x2mdx-ref-history-event-version">3.5</code>
    </div>

    <p class="x2mdx-ref-history-event-detail">The POST /v2/commands/submit-and-wait operation changed in this snapshot.</p>
  </div>

  <div class="x2mdx-ref-history-event x2mdx-ref-history-event--introduced">
    <div class="x2mdx-ref-history-event-head">
      <span class="x2mdx-ref-history-event-label">Introduced</span>
      <code class="x2mdx-ref-history-event-version">3.4</code>
    </div>
  </div>
</div>

<RequestExample>
  ```bash Request theme={null}
  curl --request POST \
    --url 'http://localhost:7575/v2/commands/submit-and-wait' \
    --header 'Authorization: Bearer $TOKEN' \
    --header 'Content-Type: application/json' \
    --data '{"commands":[{}],"commandId":"string","actAs":["string"],"userId":"string","readAs":["string"],"workflowId":"string","deduplicationPeriod":{},"minLedgerTimeAbs":"string","minLedgerTimeRel":{"seconds":0,"nanos":0,"unknownFields":{}},"submissionId":"string","disclosedContracts":[{}],"synchronizerId":"string","packageIdSelectionPreference":["string"],"prefetchContractKeys":[{}],"tapsMaxPasses":0}'
  ```
</RequestExample>

<ResponseExample>
  ```json 200 response theme={null}
  {
    "updateId": "string",
    "completionOffset": 0
  }
  ```

  ```json default response theme={null}
  {
    "code": "string",
    "cause": "string",
    "correlationId": "string",
    "traceId": "string",
    "context": {},
    "resources": [
      [
        "string"
      ]
    ],
    "errorCategory": 0,
    "grpcCodeValue": 0,
    "retryInfo": "string",
    "definiteAnswer": false
  }
  ```
</ResponseExample>
