> ## 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, the maker/taker flag in LastLiquidityInd and a fee entry in the NoMiscFees group.

**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>

<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). Engine limit checks (quantity cap, price bounds and bands) map to OrdRejReason `3`, so they may be reported this way as well; this is to be confirmed in UAT.
  * `A` : Pending New - not sent on US Perps, because EffectiveTime is rejected on order entry.
  * `C` : Expired - the order reached its expiry.
  * `D` : Restated - the engine changed the order itself, e.g. a trigger firing or a reprice. ExecRestatementReason (378) says why.
  * `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.
  * `5` : Replaced - the amend succeeded.
  * `8` : Rejected - the matching engine refused the order after acknowledging it. See OrdRejReason (103) and Text (58) for the reason.
  * `A` : Pending New - not live yet.
  * `C` : Expired - expired and closed.
  * `E` : Pending Replace - the amend is accepted but the new parameters are not live yet, e.g. a trade was in flight when the amend arrived.
</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>

<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="582 - CustOrderCapacity" type="integer">
  Capacity in which the customer traded, as reported to futures exchanges.

  **Possible values:**

  * `1` : Exchange member trading for their own account.
  * `2` : Clearing firm trading for its own proprietary account.
  * `3` : Member trading on behalf of another exchange member.
  * `4` : Any other customer capacity not listed above.
</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>

<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. A reduce-only order is clamped to the remaining position at submission; clamped to zero is a reject.
</ResponseField>

<ResponseField name="40 - OrdType" type="char" required>
  Execution model of the order. On a triggered order this reflects the resulting model (market or limit) once the trigger has fired.

  **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="423 - PriceType" type="integer">
  Code indicating the format or units in which a price is expressed.

  **Possible values:**

  * `1` : Price expressed as a percentage of par or nominal.
  * `2` : Price quoted per unit or per share.
  * `3` : Absolute fixed price amount.
  * `4` : Price quoted as a discount, a percentage below par.
  * `5` : Price quoted as a premium, a percentage above par.
  * `6` : Price quoted as a spread over a benchmark.
  * `7` : Price expressed as a TED spread price.
  * `8` : Price expressed as a TED spread yield.
  * `9` : Price expressed as a yield rather than a price.
  * `10` : Fixed price used for cabinet trades of near-worthless options.
  * `11` : Variable price used for cabinet trades of near-worthless options.
</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="388 - DiscretionInst" type="char">
  Reference price the FCM trigger watches. Defaults to the last trade price.

  **Possible values:**

  * `1` : Track the index price as the trigger reference.
  * `5` : Track the last trade price as the trigger reference. Default.
</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="168 - EffectiveTime" type="UTCTimestamp">
  Scheduled start time. Not used on US Perps: EffectiveTime is rejected on order entry.

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

<ResponseField name="18 - ExecInst" type="MultipleStringValue">
  One or more execution instructions, space-separated. Reduce-only is clamped by the FCM against the live position at submission, not by the engine, which holds no position or margin context.

  **Possible values:**

  * `E` : Reduce-only - may shrink an existing margin position but never open or extend an opposite one.
  * `s` : Single fee - fee reported per trade on the execution report. Mandatory on Derivatives, and the only fee option there.
</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="336 - TradingSessionID" type="string">
  Trading session the status applies to.
</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="494 - Designation" type="string">
  Additional free-text designation or reference attached to the allocation or order.
</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>

<ResponseField name="136 - NoMiscFees" type="NumInGroup">
  Number of fee entries that follow.

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

  <Expandable title="repeating group">
    <ResponseField name="137 - MiscFeeAmt" type="Amt">
      Absolute fee value on a fill. Fees are cumulative across the previous trades on the order.

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

    <ResponseField name="138 - MiscFeeCurr" type="Currency">
      Asset the fee is charged in.

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

    <ResponseField name="139 - MiscFeeType" type="char">
      Category of fee.

      **Possible values:**

      * `4` : Exchange fee. The only value Kraken sends.

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

    <ResponseField name="891 - MiscFeeBasis" type="integer">
      How the fee is charged.

      **Possible values:**

      * `2` : Percentage - the fee is a percentage rate.

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

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

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

<ResponseField name="78 - NoAllocs" type="NumInGroup">
  Number of subaccount allocations that follow. Always 1 for broker accounts.

  <Expandable title="repeating group">
    <ResponseField name="79 - AllocAccount" type="string">
      Account identifier of the subaccount the order is directed to. Broker accounts only.

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

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