> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kraken.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Execution Report

> Order acknowledgements, fills, amends, cancels and status answers

<div className="api-banner">
  <span className="api-protocol fix">FIX</span>
  <span className="api-detail">session: trading</span>
  <span className="api-tag">35=8</span>
</div>

Reports every state change on an order once the engine has accepted it. ExecType says what happened — new, replaced, cancelled, expired, traded, restated, or an answer to a status request — and OrdStatus says what state the order is now in. Fills carry LastPx, LastQty, the running CumQty and AvgPx, the trade identifier, and the maker/taker flag in LastLiquidityInd.

**Direction:** Kraken → client

***

<ResponseField name="header" type="" required>35=`8`</ResponseField>

<ResponseField name="37 - OrderID" type="string">
  Exchange-assigned order identifier generated by Kraken; the value to quote back on cancels, amends and status requests.

  **Format:** Assigned by Kraken; quote it back on cancels, amends and status requests.
</ResponseField>

<ResponseField name="11 - ClOrdID" type="string" required>
  Client-assigned order identifier, as sent by the client. On US Perps it is a positive integer of at most 19 digits.

  **Format:** Positive integer, up to 19 digits, e.g. a microsecond timestamp.
</ResponseField>

<ResponseField name="41 - OrigClOrdID" type="string">
  ClOrdID of the previous action on the order. Sent on cancel and amend reports.

  <span className="field-attr">Required:</span> Conditional
</ResponseField>

<ResponseField name="17 - ExecID" type="string" required>
  Unique identifier of this execution report. Treat it as opaque: do not parse it or derive it from ClOrdID. On US Perps the New (`150=0`) acknowledgement uses a ClOrdID-based form, reports driven by the engine carry an engine-generated identifier, and an Order Status answer (`150=I`) repeats the ExecID of the cached report.
</ResponseField>

<Note>
  **ExecID: venue differences**

  | | US Perps | Spot | Futures |
  | :- | :- | :- | :- |
  | Format | Opaque; three forms, see above | Base32 of a ClOrdID-derived value plus a timestamp | Same as Spot |
</Note>

<ResponseField name="150 - ExecType" type="char" required>
  Nature of the event this execution report describes.

  **Possible values:**

  * `0` : New - the order is live in the engine.
  * `4` : Canceled - the order was cancelled.
  * `5` : Replace - the amend was applied.
  * `8` : Rejected - the matching engine refused an order it had already acknowledged, for example a post-only order that would cross, a fill-or-kill order that cannot be filled in full or an order stopped by market price protection. The report carries OrdRejReason (103) and Text (58). A request refused before it is acknowledged (an unsupported feature, an invalid field, a risk limit) arrives as a BusinessMessageReject (35=j) instead. Engine limit checks (quantity cap, price bounds and bands) map to OrdRejReason `3`, so they may arrive as `150=8` rather than `35=j`; this is to be confirmed in UAT.
  * `C` : Expired - the order reached its expiry.
  * `D` : Restated - the engine changed the order itself, for example by re-displaying an iceberg slice.
  * `F` : Trade - the order got a fill. LastPx/LastQty carry that fill.
  * `I` : Order Status - this report answers an OrderStatusRequest rather than reporting an event.
</ResponseField>

<ResponseField name="39 - OrdStatus" type="char" required>
  Current state of the order.

  **Possible values:**

  * `0` : New - live, nothing filled.
  * `1` : Partially filled - live with fills against it.
  * `2` : Filled - fully filled and closed.
  * `4` : Canceled - cancelled and closed.
  * `8` : Rejected - the matching engine refused the order after acknowledging it. See OrdRejReason (103) and Text (58) for the reason.
  * `C` : Expired - expired and closed.
</ResponseField>

<ResponseField name="103 - OrdRejReason" type="integer">
  Code identifying the reason why an order was rejected by the matching engine. Present only on Execution Reports with ExecType (150) = 8 and OrdStatus (39) = 8. The gateway maps only the values below; match-time rejects use `3`, `11` and `99`. Which engine rejections reach `150=8` is decided by the engine.

  **Possible values:**

  * `1` : Unknown symbol.
  * `2` : Exchange closed.
  * `3` : Order exceeds a limit (quantity cap, price bounds and bands).
  * `5` : Unknown order.
  * `6` : Duplicate order.
  * `11` : Unsupported order characteristic.
  * `13` : Incorrect quantity.
  * `99` : Other.

  The other FIX 4.4 values are not sent.

  <span className="field-attr">Required:</span> Conditional
</ResponseField>

<Note>
  **Engine rejects: venue differences**

  | | US Perps | Spot | Futures |
  | :- | :- | :- | :- |
  | Matching-engine reject | Execution Report `150=8` / `39=8` with OrdRejReason (103) | Not sent; arrives as `35=j` | Not sent; arrives as `35=j` |
</Note>

<ResponseField name="1 - Account" type="string">
  Numeric end-client id of the end client the order was placed for, as sent in Account (1) on the order.

  **Format:** Non-zero numeric end-client id.
</ResponseField>

<ResponseField name="55 - Symbol" type="string">
  Perpetual futures contract, in the venue symbol form. Ten contracts are listed at launch.

  **Format:** Venue symbol.
</ResponseField>

<ResponseField name="48 - InstrumentID" type="string">
  Identifier of the instrument within the Kraken instrument scheme. Present when it is cached for the order.

  **Format:** Venue instrument identifier.
</ResponseField>

<Note>
  **InstrumentID: venue differences**

  | | US Perps | Spot | Futures |
  | :- | :- | :- | :- |
  | InstrumentID (48) on reports | Sent when cached | Never sent; InstrumentID is ignored outside US Perps | Same as Spot |
</Note>

<ResponseField name="54 - Side" type="char" required>
  Side of the order.

  **Possible values:**

  * `1` : Buy.
  * `2` : Sell.
</ResponseField>

<ResponseField name="38 - OrderQty" type="Qty">
  Order quantity in contracts.
</ResponseField>

<ResponseField name="40 - OrdType" type="char" required>
  Execution model of the order.

  **Possible values:**

  * `1` : Market - fill the whole quantity immediately at the best available prices.
  * `2` : Limit - rest in the book, trading only at the limit price or better.
</ResponseField>

<ResponseField name="44 - Price" type="Price">
  Limit price of the order, denominated in the quote currency. Required for limit orders.

  **Format:** Limit price, denominated in the quote currency.

  <span className="field-attr">Required:</span> Conditional
</ResponseField>

<ResponseField name="59 - TimeInForce" type="char">
  How long the order stays in effect. GTC, IOC, FOK and GTD are the supported durations; a change of TimeInForce on an amend is rejected.

  **Possible values:**

  * `1` : GTC - good till cancelled. Rests indefinitely.
  * `3` : IOC - fill what you can immediately, cancel the rest.
  * `4` : FOK - fill the entire quantity immediately or cancel the whole order.
  * `6` : GTD - good till date. The expiry is in ExpireTime (126).
</ResponseField>

<ResponseField name="32 - LastQty" type="Qty">
  Quantity bought or sold on this fill.

  <span className="field-attr">Required:</span> Conditional
</ResponseField>

<ResponseField name="31 - LastPx" type="Price">
  Price of this fill.

  <span className="field-attr">Required:</span> Conditional
</ResponseField>

<ResponseField name="151 - LeavesQty" type="Qty" required>
  Quantity still working in the book.
</ResponseField>

<ResponseField name="14 - CumQty" type="Qty" required>
  Total quantity filled on the order so far.
</ResponseField>

<ResponseField name="381 - GrossTradeAmt" type="Amt">
  Gross amount traded on the order. The New (`150=0`) acknowledgement carries `0`.
</ResponseField>

<ResponseField name="1138 - DisplayQty" type="Qty">
  May be present on reports. Display quantity cannot be set on US Perps orders: NewOrderSingle rejects iceberg orders.
</ResponseField>

<ResponseField name="6 - AvgPx" type="Price" required>
  Average price across all fills on the order.
</ResponseField>

<ResponseField name="60 - TransactTime" type="UTCTimestamp">
  Time of the business event in UTC, formatted YYYYMMDD-HH:MM:SS.uuu.

  **Format:** UTC timestamp, YYYYMMDD-HH:MM:SS.uuu
</ResponseField>

<ResponseField name="58 - Text" type="string">
  Free-text description: the cancellation reason, reject reason, or order status detail.

  **Format:** Free text set by Kraken; carries the reject or cancellation reason.
</ResponseField>

<ResponseField name="851 - LastLiquidityInd" type="integer">
  Code indicating whether this fill added liquidity to or removed liquidity from the market. Only `1` and `2` are sent.

  **Possible values:**

  * `1` : The fill added liquidity to the order book.
  * `2` : The fill took liquidity from the order book.

  <span className="field-attr">Required:</span> Conditional
</ResponseField>

<Note>
  **Liquidity indicator: venue differences**

  | | US Perps | Spot | Futures |
  | :- | :- | :- | :- |
  | Where it is carried | Tag 851 (`1` or `2`) | Tag 5050, not 851 | Same as Spot |
</Note>

<ResponseField name="1003 - TradeID" type="string">
  Exchange-assigned identifier of the trade.

  <span className="field-attr">Required:</span> Conditional
</ResponseField>

<ResponseField name="trailer" type="" required />
