> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.immix.xyz/api-reference/trading/executions/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.immix.xyz/_mcp/server. # Executions **`Request — sent`** ```json title="Request — sent" { "op": "subscribe", "reqId": "", "params": { "topics": [ "execution" ] } } ``` **`Response — received`** ```json title="Response — received" { "op": "subscribe", "reqId": "", "success": true } ``` **`execution · snapshot part — received`** ```json title="execution · snapshot part — received" { "event": "execution", "msgType": "execution", "topic": "execution", "seq": "", "seqTs": "", "isSnapshot": true, "snapshotId": "", "part": 0, "last": true, "data": [ { "executionId": "", "orderId": "", "accountId": 0, "account": "", "instrumentId": "", "instrument": "", "credentialId": 0, "side": "UNKNOWN", "kind": "UNKNOWN", "liquidity": "MAKER", "qty": "", "px": "", "fee": "", "feeAssetId": 0, "feeAsset": "", "fillTsNs": "", "venueTsNs": "", "venueTradeId": "", "venueOrderId": "", "notionalUsd": "", "feeUsd": "", "fxSource": "IDENTITY" } ] } ``` **`execution · delta — received`** ```json title="execution · delta — received" { "event": "execution", "msgType": "execution", "topic": "execution", "seq": "", "seqTs": "", "isSnapshot": false, "data": [ { "executionId": "", "orderId": "", "accountId": 0, "account": "", "instrumentId": "", "instrument": "", "credentialId": 0, "side": "UNKNOWN", "kind": "UNKNOWN", "liquidity": "MAKER", "qty": "", "px": "", "fee": "", "feeAssetId": 0, "feeAsset": "", "fillTsNs": "", "venueTsNs": "", "venueTradeId": "", "venueOrderId": "", "notionalUsd": "", "feeUsd": "", "fxSource": "IDENTITY" } ] } ``` Each frame is its shape, read off the contract: `` stands for a value, and a union shows its first form. **URL** — No public environment serves this socket yet. **Topic** `execution` ## Request parameters | Parameter | Type | Required | Description | | ---------- | ---------------- | -------- | ----------------------------------------------------------------------------------------------- | | `op` | string | Yes | `subscribe` | | `reqId` | string | Yes | Echoed byte-exact on the answer. Printable ASCII, escape-free; anything else answers MALFORMED. | | `params` | object | Yes | | | > `topics` | array of strings | Yes | `execution` | ## Response parameters | Parameter | Type | Required | Description | | --------- | ------- | -------- | ----------------------------------------------------------------------------------------------- | | `op` | string | Yes | One of `subscribe`, `unsubscribe`. | | `reqId` | string | Yes | Echoed byte-exact on the answer. Printable ASCII, escape-free; anything else answers MALFORMED. | | `success` | boolean | Yes | `true` | ## Push data parameters `orderId` is null for a leg discovered at the venue before the platform bound it to an order; the row is restated with the id when attribution lands, and the upsert rule makes that a replacement rather than a duplicate. **What the image holds.** Every execution leg of the organization this member retains, keyed by `executionId` — no window applies here, unlike `order`. A leg is retained as long as the order it belongs to is, so the set follows orders rather than time. **How a row leaves.** With its order, when the platform releases that order under its own retention, and — as on `order` — **that release rides no wire**. Re-subscribe to rebuild. Nothing else removes a leg: a busted or corrected fill arrives as its own row with its own `kind`, never as a deletion of the one it corrects. | Parameter | Type | Required | Description | | ---------------- | ----------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `event` | string | Yes | `execution` | | `msgType` | string | Yes | `execution` | | `topic` | string | Yes | `execution` | | `seq` | string | Yes | The stream position, as a decimal string — an int64 a JSON number would truncate. | | `seqTs` | string | Yes | The stream timestamp, epoch-ns as a decimal string. | | `isSnapshot` | boolean | Yes | One of `true`, `false`. | | `snapshotId` | string | No | **Present on a snapshot part only**, and the same on every part of one image; the next image of any topic carries a different one. **Opaque — compare it for equality and nothing else.** It is not a sequence, a version or a timestamp, and its shape may change; a client that ordered by it would be relying on how a member happens to mint it. Use it to keep two images apart. A repeat `subscribe` re-pushes the image — that is the resync, and there is no separate op — so a client can start image N+1 while N is still arriving, and without a name on each part it cannot tell which `last: true` closes which, nor stop a straggling part of N landing in the map N+1 just cleared. **Discard any part whose `snapshotId` is not the one you are currently applying.** | | `part` | integer | No | Present on a snapshot part only; 1-based. | | `last` | boolean | No | Present on a snapshot part only. The image is complete when true — including for an empty channel, which is still one part. | | `data` | array of objects | Yes | One fill, keyed by `executionId`. | | > `executionId` | string | Yes | | | > `orderId` | string, nullable | Yes | Null for a leg discovered at the venue before the platform bound it to an order. The row is restated with the id when attribution lands, and the upsert rule makes that a replacement rather than a duplicate. | | > `accountId` | integer | Yes | | | > `account` | string, nullable | Yes | | | > `instrumentId` | string | Yes | An instrument, by the platform's own id — an int64 as a decimal string, because a JSON number cannot hold one. **One id space across this wire and the HTTP lane**, and the same one both order doors take: the id you read here is the id you send, on `submitOrder` and on `POST /orders` alike. It is **the platform's own reference-data key and nothing else's**. It is not a venue symbol, and it is not an id from any other system — in particular it does **not** equal an immix-api v2 `Instrument.id`, and there is no arithmetic that maps between them. A client holding v2 ids resolves through the symbol, once, at cutover: `instrument` beside this field carries the platform symbol (`OKX@BTC/USDT`), which is what both systems can be joined on. The id is the stable address and the symbol is the convenience: a symbol is reference data's to change and this id is not. | | > `instrument` | string, nullable | Yes | | | > `credentialId` | integer | Yes | | | > `side` | string | Yes | One of `UNKNOWN`, `BUY`, `SELL`. | | > `kind` | string | Yes | One of `UNKNOWN`, `FILL`, `BUST`, `CORRECTION`. | | > `liquidity` | string, nullable | Yes | Null when the venue did not say. One of `MAKER`, `TAKER`. | | > `qty` | string | Yes | | | > `px` | string | Yes | | | > `fee` | string, nullable | Yes | Signed — a rebate is a negative fee. A fee is a fact once it names its asset, a stated zero included; only an unstated fee is null. | | > `feeAssetId` | integer, nullable | Yes | | | > `feeAsset` | string, nullable | Yes | | | > `fillTsNs` | string, nullable | Yes | | | > `venueTsNs` | string, nullable | Yes | | | > `venueTradeId` | string, nullable | Yes | | | > `venueOrderId` | string, nullable | Yes | | | > `notionalUsd` | string, nullable | Yes | qty x px converted at the quote asset's USD rate. Null where the platform holds no current rate — null is NEVER the un-converted amount. | | > `feeUsd` | null | Yes | Always null in 1.0.0. The conversion is defined but the renderer for a signed 128-bit amount is not published yet, and a rounded fee would be a wrong number rather than a missing one. Read `fee` with `feeAsset`. When it starts carrying a value it will be a decimal string, which is an additive change to this type. | | > `fxSource` | string, nullable | Yes | The route the QUOTE asset's USD rate took — the notional's provenance. Null where the platform holds no current rate, which is also when `notionalUsd` is null: null is NEVER the un-converted amount. One of `IDENTITY`, `DIRECT`, `CROSS`, `PEGGED`. | > A fill