Trade Strategy Executions

trade_strategy.execution.status_changed

An execution is the per-participant portion of an operation. Each execution carries one or more instructions — the actual buy/sell orders against the underlying assets. Each execution emits two webhooks:

  1. Upon creation (awaiting_execution) so you learn the execution.id.
  2. Upon terminal transition (settled or rejected).

Soft-rejected executions skip the awaiting_execution event and emit only rejected.

ParameterDescriptionType
idUnique identifier for this execution.string (UUID)
strategy_idIdentifier of the strategy this execution belongs to.string (UUID)
operation_idIdentifier of the parent operation.string (UUID)
trader_idIdentifier of the trader (participant enrolled into the strategy) the execution is for. Empty when the execution is rejected pre-trader.string (UUID)
participant_codeThe zerohash identifier for the participant being executed against.string
account_labelThe account label used for the execution. Matches the strategy ID for trader accounts. Empty when the execution is rejected pre-trader.string
statusCurrent execution status. See Execution statuses.string
status_reasonMachine-readable reason. Empty when not applicable. See Execution status reasons.string
instructionsArray of per-instrument instructions. Each instruction carries its own status and, once executed, the trade fill details.array
created_atExecution creation timestamp (UTC, RFC3339).string
updated_atTimestamp of the transition that triggered this webhook (UTC, RFC3339).string

Execution statuses

StatusDescription
awaiting_executionExecution accepted; instructions are queued and pending fill.
settledAll instructions executed and the resulting balances posted to the trader account.
skippedExecution completed without performing any trades. (Planned — fires once the rebalance / dust-skip flow lands; current executions do not produce this status.)
rejectedExecution was rejected before any trades took place. Check status_reason for details.

Execution status reasons

ReasonDescription
participant_not_approvedParticipant is not in an approved state for trade strategy.
participant_not_foundParticipant code does not exist.
trader_already_enrolledEnrollment attempted for a participant already enrolled in this strategy.
trader_not_enrolledTop-up or partial-sell attempted for a participant that is not enrolled in this strategy.
trader_not_foundTrader record could not be located.
insufficient_fundsTrader account does not have enough balance to satisfy the execution. Covers both buy-side (insufficient fiat) and sell-side partial-sell (insufficient crypto holdings).
below_instrument_minimumPer-asset notional fell below the configured minimum trade volume for one of the requested instruments; the worker rejects the entire execution under the all-or-nothing rule.

Instruction object

Each entry in the instructions array carries the trade-level detail. Post-fill fields appear only when the instruction reaches executed.

FieldTypeDescription
underlying_currencystringAsset being traded (e.g. BTC).
quoted_currencystringQuote currency (e.g. USD).
sidestringbuy or sell.
amountstringInstruction amount in the unit indicated by amount_type.
amount_typestringnotional or quantity.
statusstringpending until filled, then executed (or other terminal state).
status_reasonstringMachine-readable reason. Empty when not applicable.
pricestringFill price (quoted currency per 1 unit underlying). Present only when status is executed.
quantitystringFilled quantity of the underlying. Present only when status is executed.
total_notionalstringFilled notional in quoted currency. Present only when status is executed.
trade_idsarrayzerohash trade IDs that satisfied this instruction. Present only when status is executed.
executed_atstringFill timestamp (UTC, RFC3339). Present only when status is executed.


Payload Examples

Execution status awaiting_execution

Instructions are still pending; post-fill fields are omitted.

{
    "id": "97b215ed-6985-32c5-b856-77efc9614467",
    "strategy_id": "9ba5e569-a966-42a9-a7ad-666b0a5300f3",
    "operation_id": "663a258c-5e7c-456f-9759-73e02db8b5d9",
    "trader_id": "bd92c25a-eaf8-3e95-ab7a-59f3e2275234",
    "participant_code": "ABC123",
    "account_label": "9ba5e569-a966-42a9-a7ad-666b0a5300f3",
    "status": "awaiting_execution",
    "status_reason": "",
    "instructions": [
        {
            "underlying_currency": "BTC",
            "quoted_currency": "USD",
            "side": "buy",
            "amount": "5",
            "amount_type": "notional",
            "status": "pending",
            "status_reason": ""
        },
        {
            "underlying_currency": "ETH",
            "quoted_currency": "USD",
            "side": "buy",
            "amount": "5",
            "amount_type": "notional",
            "status": "pending",
            "status_reason": ""
        }
    ],
    "created_at": "2026-05-29T18:56:43Z",
    "updated_at": "2026-05-29T18:56:43Z"
}

Execution status settled

Instructions are executed; price, quantity, total_notional, trade_ids, and executed_at are present.

{
    "id": "97b215ed-6985-32c5-b856-77efc9614467",
    "strategy_id": "9ba5e569-a966-42a9-a7ad-666b0a5300f3",
    "operation_id": "663a258c-5e7c-456f-9759-73e02db8b5d9",
    "trader_id": "bd92c25a-eaf8-3e95-ab7a-59f3e2275234",
    "participant_code": "ABC123",
    "account_label": "9ba5e569-a966-42a9-a7ad-666b0a5300f3",
    "status": "settled",
    "status_reason": "",
    "instructions": [
        {
            "underlying_currency": "BTC",
            "quoted_currency": "USD",
            "side": "buy",
            "amount": "5",
            "amount_type": "notional",
            "status": "executed",
            "status_reason": "",
            "price": "73471.612589025",
            "quantity": "0.00006805",
            "total_notional": "5",
            "trade_ids": ["19f7ae72-48ff-3d37-99e6-24840b83e9c6"],
            "executed_at": "2026-05-29T18:56:46Z"
        },
        {
            "underlying_currency": "ETH",
            "quoted_currency": "USD",
            "side": "buy",
            "amount": "5",
            "amount_type": "notional",
            "status": "executed",
            "status_reason": "",
            "price": "2018.06059005",
            "quantity": "0.0024776263035175",
            "total_notional": "5",
            "trade_ids": ["3f6ef014-fd8f-3897-958e-b6b7eaba14f5"],
            "executed_at": "2026-05-29T18:56:46Z"
        }
    ],
    "created_at": "2026-05-29T18:56:43Z",
    "updated_at": "2026-05-29T18:56:46Z"
}

Execution status rejected

instructions is an empty array because no trades took place. The reason is in status_reason.

{
    "id": "ae96845f-562a-32f7-9b67-073ed10a20c3",
    "strategy_id": "78e8282c-2363-40c2-879a-52e1ee090e45",
    "operation_id": "7fb46299-9e74-4c14-9f04-172a005e9aca",
    "trader_id": "",
    "participant_code": "ABC123",
    "account_label": "",
    "status": "rejected",
    "status_reason": "trader_not_enrolled",
    "instructions": [],
    "created_at": "2026-05-29T18:40:29Z",
    "updated_at": "2026-05-29T18:40:29Z"
}