Executions

An Execution is the per-Trader slice of an Operation. Every participant in an enroll, top-up, partial-sell, rebalance, or liquidate call gets exactly one Execution, and each Execution is processed independently: one participant's failure never affects the others in the same Operation.

Inside each Execution is an instructions[] array. Each Instruction is a single per-asset leg (one buy or one sell of one asset).

The Execution resource

FieldTypeDescription
idstring (UUID)Execution identifier.
strategy_idstring (UUID)Parent Strategy.
operation_idstring (UUID)Parent Operation.
trader_idstring (UUID)The Trader this Execution belongs to.
participant_codestringPlatform's end-user identifier.
account_labelstringzerohash sub-ledger label for the position.
statusstringawaiting_execution, settled, skipped, or rejected.
status_reasonstringFree-form short reason on non-clean terminal states.
instructions[]arrayPer-asset legs (see below).
created_at / updated_atstring (ISO 8601)Timestamps. updated_at is the canonical sequencing timestamp.

Execution status machine

StatusDescription
awaiting_executionCreated; waiting for the parent Operation to reach settling and instructions to fire.
settledTerminal. All instructions executed cleanly.
skippedTerminal. No instructions had work to do (already-aligned, or no holdings on liquidation).
rejectedTerminal. The Execution failed (credit-check failure, all instructions below minimum, and similar). status_reason carries a short explanation, for example insufficient BTC balance for sell leg, below_instrument_minimum, no_holdings, dust, or already_aligned.

Instruction fields

FieldDescription
underlying_currencyAsset traded.
quoted_currencyFiat side; always the parent Strategy's quoted_currency.
sidebuy or sell.
amountThe driver. With amount_type = notional, fiat to spend. With amount_type = quantity, crypto units to sell.
amount_typenotional or quantity.
statuspending, waiting_proceeds, executed, skipped, or failed.
status_reasonSet on non-clean states.
price, quantity, total_notional, trade_ids, executed_atPopulated only after status = executed.

Instruction status machine

StatusDescription
pendingCreated; not yet executed.
waiting_proceedsSell-side proceeds not yet available to fund this buy leg.
executedTerminal. Post-trade fields populated.
skippedTerminal. Below threshold or no-op.
failedTerminal. Per-leg failure.

Endpoints

MethodPathPurpose
GET/strategies/executions/{execution_id}Retrieve one Execution, including the full instructions[] snapshot.
GET/strategies/executionsList Executions (paginated). Filters: strategy_id, operation_id, participant_code, status, page, page_size.

Get an Execution

GET /strategies/executions/{execution_id}

{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef0123456789",
  "strategy_id": "b1c2d3e4-f5a6-4789-bcde-f01234567890",
  "operation_id": "d1e2f3a4-b5c6-4789-abcd-ef0123456789",
  "trader_id": "f1a2b3c4-d5e6-4789-abcd-ef0123456789",
  "participant_code": "CUST01",
  "account_label": "b1c2d3e4-f5a6-4789-bcde-f01234567890",
  "status": "settled",
  "status_reason": "",
  "instructions": [
    {
      "underlying_currency": "BTC",
      "quoted_currency": "USD",
      "side": "sell",
      "amount": "797.00",
      "amount_type": "notional",
      "status": "executed",
      "status_reason": "",
      "price": "62000.00",
      "quantity": "0.0129",
      "total_notional": "797.00",
      "trade_ids": ["7a3d2e1f-4b6c-4789-abcd-ef0123456789"],
      "executed_at": "2026-04-17T12:00:15Z"
    }
  ],
  "created_at": "2026-04-17T12:00:00Z",
  "updated_at": "2026-04-17T12:00:22Z"
}

List responses use the shared pagination envelope. Each Execution includes its full instructions[] inline, so narrow with filters where possible.

Webhooks and polling

An Execution emits exactly one trade_strategy.execution.status_changed event, on its terminal transition (awaiting_execution → settled | skipped | rejected). Intermediate states are not delivered.

Instruction transitions are never delivered as webhooks. For real-time per-leg progress, poll GET /strategies/executions/{execution_id}; it is the only source of per-Instruction visibility. The terminal Execution webhook carries the final instructions[] snapshot.