# FIX Advanced Orders API

The Integral FIX Advanced Orders API enables market participants to submit orders into Integral matching engines.

## Implementation details

This specification is based on the FIX 4.3 standard (https://www.fixtrading.org/) and has been adapted to Integral’s requirements. Users should have a basic knowledge of the FIX protocol and FIX messaging.

The Integral FIX Advanced Orders API only supports messages, component blocks, and fields that are described in this document. All fields not in this document are ignored by Integral, including fields that are required or conditionally required by the FIX protocol.

### Order entry sessions

#### Session type

The Integral FIX Advanced Orders API operates on a single order session for placing orders and receiving execution reports. Customers initiate the order session to submit, replace, and cancel orders.

Messages on the order session are transactional and persistent with guaranteed delivery, reflecting their business criticality. The server resends order session messages in response to a resend request from the customer app.

#### Order session availability

Daily and weekly order sessions are available from 17:00:10 EST/EDT Sunday through 17:00:00 EST/EDT Friday.

Daily sessions are the default session type and are off-line daily for general maintenance from 17:00:00 EST/EDT until 17:00:10 EST/EDT Monday through Thursday.

Weekly sessions do not go offline during the week. Contact your IntegralTechnical Account Manager to configure weekly sessions.

Session availability 

| Session type | Availability | Session off-line for maintenance |
|  --- | --- | --- |
| Daily (default) | 17:00:10 EST/EDT Sunday through 17:00:00 EST/EDT Friday | Daily from 17:00:00 EST/EDT until 17:00:10 EST/EDT Monday through Thursday. |
| Weekly | 17:00:10 EST/EDT Sunday through 17:00:00 EST/EDT Friday | Weekly sessions do not go offline during the week. |


#### Session start

FIX sequence numbers for all sessions are reset during general maintenance.

To successfully reconnect at 17:00:10 EST/EDT, you must send a Logon message with a sequence number of “1” (one). Integral’s Logon response also has a sequence number of “1” (one).

#### Session end

Integral sends a Logout message at 17:00:00 EST/EDT every day for daily sessions and Friday for weekly sessions. When you receive this message, you should disconnect by sending a Logout message.

#### Market data sessions

Weekly market-data sessions are available from 17:00:05 EST/EDT Sunday through 17:00:00 EST/EDT Friday.

FIX messages on the market data session are transient and are not persisted. Integral does not resend any market data messages in response to a resend request from a client app.

Sessions are off-line daily for general maintenance from 17:00:00 EST/EDT Sunday until 17:00:05 EST/EDT Sunday. Sessions do not go off-line during the week.

The FIX sequence numbers for all sessions are reset during general maintenance.

To successfully reconnect at 17:00:05 EST/EDT, you must send a Logon message with a sequence number of “1” (one). Integral’s Logon response also has a sequence number of “1” (one).

Integral sends a Logout message at 17:00 EST/EDT. Upon receipt of this message, you should disconnect by sending a Logout message.

#### Intra-session reconnections

For intra-session disconnections, Integral recommends using the next sequence number.

If a customer app requires sequence numbers reset, the app must send a Logon message with a sequence number of “1” (one) and the `ResetSeqNumFlag` (#141) set to “Y”. Integral replies with a Logon message with the sequence number set to “1” (one).

### Supported message set

The following message types are supported by the Integral FIX Advanced Orders API. Any other message types received by Integral are rejected.

#### Supported session-level messages

Message direction is from the customer's perspective.

Supported session-level messages 

| Direction | Message name  | `MsgType` (#35)  | Message purpose |
|  --- | --- | --- | --- |
| In, Out | Logon | A | Customer initiates a FIX session.
Integral responds to a successful Logon request. |
| In, Out | Logout | 5 | Customer or Integral ends a FIX session. |
| In, Out | Heartbeat | 0 | Customer or Integral signals the status of the communication link. This message should be used when no data has been sent for the number of seconds set by `HeartBtInt` (#108). |
| In, Out | Test Request | 1 | Customer or Integral queries the status of the connection when no data message has been received for twice the number of seconds set by `HeartBtInt` (#108).The receiving party should always send a Heartbeat message in response to a Test Request message.
 |
| In, Out | Session-level Reject | 3 | Customer or Integral cannot process a message. |
| In, Out | Resend Request | 2 | Customer or Integral detects a gap in the number sequence `MsgSeqNum` (#34) and requests retransmission of messages. |
| In, Out | Sequence Reset | 4 | Customer or Integral resets `MsgSeqNum` (#34) after receiving a Resend Request. |


#### Supported business messages

Message direction is from the customer's perspective.

Supported business messages 

| Direction | Message name | `MsgType` (#35)  | Message purpose |
|  --- | --- | --- | --- |
| In | New Order - Single | D | Customer submits an order to Integral. |
| Out | Execution Report | 8 | Integral confirms receipt of an order, confirms changes to an existing order, relays order status information, or relays fill information for working orders. |
| In | Order Cancel Request | F | Customer requests cancellation for all of the remaining quantity of an existing order. |
| Out | Order Cancel Reject | 9 | Integral indicates that the Order Cancel Request or Order Cancel/Replace Request cannot be fulfilled. |
| In | Order Cancel/Replace Request | G | Customer changes the parameters of an existing order. |
| In | Order Status Request | H | Customer checks the status of an order. |
| Out | Business Message Reject | j | Integral indicates that the New Order - Single or Order Cancel/Replace Request message has failed business validation. |


#### Message validation

Integral validates all FIX messages to ensure the presence of all mandatory and conditional fields and component blocks.

For messages that fail validation, Integral follows the FIX protocol where possible and responds with the following reject messages by message type:

Corresponding reject message types 

| Customer message (rejected) | Reject response from Integral |
|  --- | --- |
| Logon (#35=A) | Logout (#35=5) |
| New Order - Single (#35=D) | * Execution Report (#35=8)
* Business Message Reject (#35=j)

 |
| Order Cancel Request (#35=F) | Order Cancel Reject (#35=9) |
| Order Cancel/Replace Request (#35=G) | * Order Cancel Reject (#35=9)
* Business Message Reject (#35=j)

 |
| Order Status Request (#35=H) | Execution Report (#35=8) |


### Session management

#### Connect

The Integral FIX Advanced Orders API acts as the acceptor for all FIX sessions. The customer initiates the connection by sending a FIX Logon message. If the connection can be established, Integral responds with a Logon acknowledgment message.

If the Logon fails, Integral responds with a Logout message. The Logout message includes a rejection reason for the failure in the `Text` (#58) field.

#### Heartbeat

Both the customer's app and Integral send the Heartbeat message to indicate that the connection is active.

The Test Request message forces a heartbeat from the receiving system. The receiving system responds to a Test Request message with a Heartbeat message containing the `TestReqID` (#112) sent in the Test Request message.

#### Disconnect

Both the customer's app and Integral can initiate disconnection by sending a Logout message. The other party should acknowledge this message with a Logout acknowledgment message.

Integral does not cancel orders by default on logout or disconnect. Contact your Integral Technical Account Manager if you want to change this behavior and ensure that all open orders are canceled automatically when the FIX session disconnects. See [Order cancellation](#order-cancellation) for details.

### Orders

The Integral FIX Advanced Orders API supports the following order attributes.

#### Side

The `Side` (#54) field specifies the side (buy/sell) of the order from the customer’s perspective and in terms of the dealt currency (`Currency` (#15)) specified on the order:

* `Side` (#54)=1 (Buy): The customer buys the dealt currency.
* `Side` (#54)=2 (Sell): The customer sells the dealt currency.


#### Order execution

The `ExecInst` (#18) field on the New Order – Single message determines how and when the order is executed. As applicable to the order type, you can specify more than one value by separating each value with a space. For example, a stop limit order with crossing allowed (“B”), a bid trigger rate (“9”), and best-price execution (“P”) would have an `ExecInst` (#18) field value of “B 9 P”.

Execution instructions and applicable order types 

| `ExecInst` (#18) field value | Description | Applicable order types |
|  --- | --- | --- |
| Empty | If the `ExecInst` (#18) field is left empty, the order is filled only by hits from other market participants at the best price that fills the order. For your order to be executable, it must be a displayed order. See [Order visibility](#order-visibility) for more information. | * Limit

 |
| B | Cross with incoming rates and with other market participants (displayed order) depending on the visibility of the order. See [Order visibility](#order-visibility) for more information.
Market range orders (`PegOffsetValue` (#211) specifying slippage) can be submitted as displayed orders. “Pure” market orders (`PegOffsetValue` (#211) undefined) cannot be submitted as displayed orders because they do not include a price. | * Limit
* Market Range
* Stop
* Stop Limit

 |
| B not specified | Do not cross with incoming rates. Fill only by hits from other market participants. For your order to be executable, it must be a displayed order. See [Order visibility](#order-visibility) for more information. | * Limit
* Stop
* Stop Limit

 |
| ST | TWAP order. Your order is executed according to the parameters that you specify. See [TWAP orders](#twap-orders). | * Limit
* Market

 |
| P | Best price/market peg: Execute at the best price only (top of book). | * Market
* Limit
* Stop
* Stop Limit

 |
| P not specified | Price at depth: The order is filled with the best price in the size that allows the entire order to be filled. If “P” (best price) is not specified, then execution defaults to price at depth. | * Limit
* Stop
* Stop Limit

 |
| W | VWAP (Volume Weighted Average Price): The order is filled with prices so that the average execution price is equal to or better than the limit price. Some fills can be at a price worse than the order rate, but the average price remains equal to or better.
For market range orders, the average execution price is kept within the market range. | * Limit
* Stop
* Stop Limit

 |
| 9 | Bid trigger: Indicates that the bid rate is the trigger rate compared to the stop price (see [StopPx](#field_StopPx)). | * Stop
* Stop Limit

 |
| 0 | Offer trigger: Indicates that the offer rate is the trigger rate compared to the stop price (see [StopPx](#field_StopPx)). | * Stop
* Stop Limit

 |
| M | Mid trigger: Indicates that the mid rate is the trigger rate compared to the stop price (see [StopPx](#field_StopPx)). | * Stop
* Stop Limit

 |
| R | At rate: If specified, the stop is triggered if the market price equals or is less than the stop price for a SELL STOP and equals or is greater than the stop price for a BUY STOP. If not specified, the stop is only triggered if the market price is lesser/greater than the stop price (see [StopPx](#field_StopPx)). | * Stop
* Stop Limit

 |
| Stop trigger not specified | If a stop order is submitted with no specified stop trigger (the `ExecInst` (#18) field does not include 9, 0, M, or R), then the following is assumed:\* A buy stop order has an offer trigger.
* A sell stop order has a bid trigger.

 | * Stop
* Stop Limit

 |


#### Order visibility

You can determine the amount of the limit order that is visible to other market participants based on the value of the `MinQty` (#110), `MaxShow` (#210), and `OrderQty` (#38) fields in the New Order – Single message:

* Hidden: The order is hidden and is not visible to other customers. The order is matched with incoming rates only. The `MaxShow` (#210) value is 0 (zero) or the `MaxShow` (#210) field is not included in the message.
* Display: The order is completely visible to other customers. The full order amount is disclosed. The `MaxShow` (#210) value equals the `OrderQty` (#38) value.
* Hidden that transitions to display: If the order’s minimum fill (`MinQty` (#110)) is greater than its show amount (`MaxShow` (#210)), then the order is hidden and not displayed to other market participants. The order is only visible after the minimum fill amount is achieved. Conversely, if `MinQty` (#110) is less than `MaxShow` (#210), the displayed order is always broadcast. For this behavior to apply, the order in question must allow partial fills (`MinQty` (#110) is less than `OrderQty` (#38)) and the order must not have an FOK time in force (`TimeInForce` (#59) is not 4 (FOK)).
* Iceberg: The order is visible to other customers, but only a fraction of the actual order amount is displayed. The `MaxShow` (#210) value is less than the `OrderQty` (#38) value. See [Icebergs](#icebergs).


Regardless of order visibility, if you want your order crossed with incoming market prices, you must set the `ExecInst` (#18) field of the New Order – Single message to “B”. For example, if you submit a hidden order (`MaxShow` (#210) is zero or not included in the message) and do not include “B” as a value of the `ExecInst` (#18) field, then your order is not crossed with incoming market prices and cannot be filled.

#### Minimum order fill

The `MinQty` (#110) field specifies the minimum quantity the order should be filled. The first fill for the order must be equal to or greater than the value specified in the `MinQty` (#110) field.

#### Time in force

The order’s lifetime is specified with the `TimeInForce` (#59) field on the New Order - Single (#35=D) message.

Integral supports the following time-in-force values:

* DAY (`TimeInForce` (#59)=0): Day order. The order remains active for the entire trading day until the order is completely filled, canceled by the customer, or until the order expires at the end of the trading day at 17:00 EST/EDT.
* GTC (`TimeInForce` (#59)=1): Good Till Cancel. The order remains active until completely filled or is canceled by the customer.
* GTT/GTD (`TimeInForce` (#59)=6): Good Till Time/Good Till Date. The order remains active until completely filled, canceled by the customer, or expired. Specify the expiry time with the `ExpireTime` (#126) field in the format *YYYYMMDD-hh:mm:ss.sss*.
Specify a relative or absolute expiry time with the date portion *YYYYMMDD*:
  * Relative expiry: set the date portion to `00000000`.
For example, for an order that expires 30 seconds from receipt, you would specify `126=00000000-00:00:30.000`.
  * Absolute expiry: set both the date and time portions.
For example, to set the order to expire at 17:00 on August 14th, 2025, you would specify `126=20250814-17:00:00.000`.
* IOC (`TimeInForce` (#59)=3): Immediate or Cancel. If not immediately filled, the order is canceled. Partials fills are possible.
* FOK (`TimeInForce` (#59)=4): Fill or Kill. If not filled immediately and completely with one fill, the order is canceled. Partials fills are not possible.


#### Supported tenors

For trade types with future settlement dates, you can specify a broken date or a standard tenor. The FIX Advanced Orders API supports the following tenors:

Supported tenors 

| Tenor | Definition |
|  --- | --- |
| Today | Today. |
| TOD | Today. |
| ON | Overnight (today). |
| Tomorrow | Tomorrow. |
| TOM | Tomorrow. |
| TN | Tomorrow (tomorrow next). |
| SP, SPOT | Spot. |
| SN | Spot next (spot+1). |
| *n*D | A number of days from SPOT (for example, 1D, 2D, 10D). |
| *n*W | A number of weeks from SPOT (for example, 1W, 2W, 3W). |
| *n*M | A number of months from SPOT (for example, 1M, 2M, 3M). |
| *n*Y | A number of years from SPOT (for example, 1Y, 2Y, 3Y). |
| *n*IMM | The next International Monetary Market (IMM) settlement date. IMM dates are the third Wednesday of the last month of every quarter (March, June, September, December).
Entering `IMM` results in the next IMM date on or after the spot date.
Entering `2IMM` results in two IMM dates after the spot date. |


#### Order types

The order type is specified in the `OrdType` (#40) of the New Order - Single (#35=D) message.

##### Base order types

The Integral FIX Advanced Orders API supports the following base order types:

Base order types 

| Order type | `OrdType` (#40) value | Description |
|  --- | --- | --- |
| Limit | 2 | An order to buy or sell at a specified price or better. |
| Market | 1 | Orders are executed immediately at the best available price in the system. The `PegOffsetValue` (#211) field of the order must not be specified. See [PegOffsetValue](#field_PegOffsetValue). |
| Pegged | P | Only mid-point pegged orders are allowed. The mid-point pegged order is a passive order and floats at the mid-point of the market. |
| Market Range | 1 | Orders are executed immediately at the best available price in the system as long as the slippage is within the range specified by the `PegOffsetValue` (#211) field of the order. See [PegOffsetValue](#field_PegOffsetValue). |
| Stop | 3 | Orders are active but do not execute until the market price reaches the order’s trigger price ([StopPx](#field_StopPx)). Orders are then executed as market or market range orders depending on whether or not the `PegOffsetValue` (#211) field is specified. See [PegOffsetValue](#field_PegOffsetValue). |
| Stop Limit | 4 | Orders are active but do not execute until the market price reaches the order’s trigger price ([StopPx](#field_StopPx)). Orders are then executed as limit orders at the order limit price or better. |


##### Directed orders

To submit an order to a specific venue, set `ExDestination` (#100) to the target venue.

Subsequent order workflow is routed to and from the venue by Integral (for example, order cancel, order cancel/replace, order fills, status).

##### External algo orders

External algo orders are a type of directed order with a payload of third-party algo specifications.

Directed orders leverage the Integral FIX workflow with external venues. You send orders for algos in third-party venues with the following fields on New Order - Single:

External algo fields 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| 100  | ExDestination | N | — | For external algos and other directed orders, the name of the target venue. | String(20) |
| 957  | NoStrategyParameters | N | — | Number of strategy parameters in this repeating group. | NumInGroup(3) |
| → | 958 | StrategyParameterName | N | — | Name of the parameter. | String(255) |
| → | 959 | StrategyParameterType | N | See descr. | Datatype of the parameter.
1=Int
2=Length
3=NumInGroup
4=SeqNum
5=TagNum
6=Float
7=Qty
8=Price
9=PriceOffset
10=Amt
11=Percentage
12=Char
13=Boolean
14=String
15=MultipleCharValue
16=Currency
17=Exchange
18=Month-Year
19=UTCTimeStamp
20=UTCTimeOnly
21=LocalMktDate
22=UTCDateOnly
23=Data
24=MultipleStringValue | int(2) |
| → | 960 | StrategyParameterValue | N | — | Value of the parameter. | String(1023) |


##### Serialized algo orders (deprecated)

This implementation of directed algo orders is deprecated. Please use [External algo orders](#external-algo-orders).

Serialized algo orders are a type of directed order with a payload of third-party algo specifications in a single string.

The following fields are included on the following messages:

* New Order - Single
* Execution Report (order create, fill)
* Trade Capture Report


Serialized algo fields 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| 8 | BeginString | Y | FIX.4.4 | Required for external algo orders. | String(7) |
| 40 | OrdType | Y | E=Previously indicated | Required for external algo orders. | char(1) |
| 100 | ExDestination | C | — | Code or name of the order target destination. Required for external algo orders. | String(20) |
| 9022 | ExternalAlgoName | C | — | For external algos and other directed orders, the code or name of the order target destination. | String(20) |
| 9023 | ExternalAlgoParameters | C | — | For external algos and other directed orders, the algo parameters serialized into a single string. | String(1023) |


##### Icebergs

Resting orders can limit the amount displayed to other counterparties with the `MaxShow` (#210) field on the order message. The `MaxShow` (#210) value can be less than or equal to the `OrderQty` (#38) value.

When `MaxShow` (#210) is both greater than zero and less than `OrderQty` (#38), the amount specified in the `MaxShow` (#210) field is shown to customers.

If a customer does not specify the `MaxShow` (#210) field, then the entire order amount is displayed.

For example:

* `MaxShow` (#210)=0: The order is not shown to customers and is hidden.
* `MaxShow` (#210)>0 and less than and `MaxShow` (#210)<`OrderQty` (#38): The amount specified in the `MaxShow` (#210) field is shown to customers.
* `MaxShow` (#210)=OrderQty: The entire order is shown to customers.


##### Block trades

With FIX Advanced Orders API, you can submit a single ESP block order for Integral to allocate, match with liquidity providers, and send via STP post-trade.

The component trades in the block trade must have all the following attributes:

* Same direction, all buy or all sell. (Mixed buy/sell is supported by RFS batch trades only.)
* Same currency pair.
* Spot tenor.


You send allocations as a block trade with ESP FIX in a New Order – Multileg message ([New Order – Multileg (block trades)](#new-order-multileg-block-trades)).

Integral then does the following:

1. Processes allocations and nets amounts.
2. Sends net trades to liquidity providers for execution.
3. Does post-trade allocation.
4. Sends allocated trades via the STP channels of your choice.:


##### TWAP orders

TWAP orders allow you to execute your order over time, minimizing your order’s effect on the market so that you can fulfill your liquidity needs at a price closer to the true market price.

To indicate that an order is a TWAP order, you include the value “ST” in the `ExecInst` (#18) field.

In addition to standard order parameters, such as currency pair, order size, and order type, TWAP orders involve parameters that you use to specify how your order is divided into slices, priced, and executed over time. These additional parameters allow you to control the following aspects of your order:

* Time: the total duration of the order, the interval between order slices (fixed time or randomized), and how long the order slice remains passive (see [Time (order start and duration)](#time-order-start-and-duration) and [Time (order slice characteristics)](#time-order-slice-characteristics))
* Size: the size of individual order slices (fixed amount or randomized, see [Slice size](#slice-size))
* Action: how order slices are executed and how any unfilled amount is handled at the end of the order’s duration (see [Action](#action))


###### Time (order start and duration)

Time attributes (algo start and duration) 

| Algo attribute | FIX field  | Description | Type(length) |
|  --- | --- | --- | --- |
| Begin time (absolute) | `EffectiveTime` (#168) | The absolute time in GMT when the algo begins executing (for example, “20120324-14:00:00” for 14:00 in the afternoon of March 24, 2012). | UTCTimestamp(21) |
| End time (absolute) | `ExecEndTime` (#7556) | The absolute time in GMT when the algo stops executing. | UTCTimestamp(21) |
| Begin time (relative) | `ExecEffPeriod` (#7564) | The relative time when the algo begins executing (for example, “01:00:00” for 1 hour after order submission). | UTCTimeOnly(14) |
| End time (relative) | `ExecEndPeriod` (#7565) | The relative time when the algo stops executing. | UTCTimeOnly(14) |


###### Time (order slice characteristics)

Time attributes (order slice characteristics) 

| Algo attribute | Attribute name | FIX field  | Description | Type(length) |
|  --- | --- | --- | --- | --- |
| Peg time for each slice | PegTime | `AlgoParameters` (#7560)=PT | The time during which each order slice is broadcast to the market but remains passive and is not matched with market prices. Other market participants may hit the slice while it is passive. The slice begins matching after it is hit or after the peg time expires, whichever comes first. A peg time of zero indicates that the slice is pegged for the entire duration. | float(20) |
| Interval between slices | SlcIntrvl | `AlgoParameters` (#7560)=SI | The interval between slices. If the interval is fixed, this value is the interval duration. If the interval is randomized, this value is the upper boundary of random values. | UTCTimeOnly(14) |
| Random intervals | SlcIntrvlRndmizr | `AlgoParameters` (#7560)=SIR | Whether or not the interval between slices is randomized. The interval is a random period between the slice interval (SI, SlcIntrvl) and the minimum slice interval (SMI, SlcMinIntrvl). | Boolean(1) |
| Minimum interval | SlcMinIntrvl | `AlgoParameters` (#7560)=SMI | The minimum interval between slices if the intervals are randomized. Slice intervals are randomized between this value and the value of the slice interval value (SI, SlcIntrvl). | UTCTimeOnly(14) |


###### Slice size

Slice size attributes 

| Algo attribute | Attribute name | FIX field  | Description | Type(length) |
|  --- | --- | --- | --- | --- |
| Minimum regular size | SlcRegularSize | `AlgoParameters` (#7560)=SRS | If slice size is randomized, this value is used in two ways. First, it is the low end of the random size range. Second, random sizes are rounded to a multiple of this value. | Qty(20) |
| Fixed size | SlcSize | `AlgoParameters` (#7560)=SS | The fixed size of each slice. | Qty(20) |
| Random size | SlcSizeRndmzr | `AlgoParameters` (#7560)=SSR | Whether or not the slice size is randomized. The size is a random value between the slice size (SS, SlcSize) and the regular slice size (SRS, SlcRegularSize) or, if the top-of-book percent (TOBP, TOBPercent) is specified, between the calculated top-of-book amount and the slice size (SS, SlcSize). | Boolean(1) |
| Size based on top of book | TOBPercent | `AlgoParameters` (#7560)=TOBP | When the slice size is not randomized, this value is used to calculate the size as a percentage of the top-of-book size. When the slice size is randomized, then the size is a random value between the regular slice size (SRS, SlcRegularSize) and the calculated percentage of the top-of-book size. Integral recommends that you set a regular size to avoid hitting a small size at the top of the book and to avoid irregular fills. | float(20) |


###### Action

Action attributes 

| Algo attribute | Attribute name | FIX field  | Description | Type(length) |
|  --- | --- | --- | --- | --- |
| Slice execution | SlcFillOrKill | `AlgoParameters` (#7560)=SFOK | Slices should be filled completely with a single fill or not at all. Each slice is executed as FOK with no partial fills allowed. This parameter is used only if the slice size (SS, SlcSize) is fixed. | Boolean(1) |
| Action at expiration | ActnOrdrExpr | `AlgoParameters` (#7560)=AE | Action taken at the end of the algo’s duration if there is an unfilled amount remaining. If not specified, the order is canceled at expiration.
1=Fill @ Market.
2=Cancel Order. | char(1) |


Underlying order: Sell 70M EUR/USD market order with GTC time in force 

**Algo parameters:**

`168=…18=ST…7560=SS~0.27 SI~00:01:50 SIR~Y SMI~00:01:00 AE~2…7565=00:20:00…`

* Begin time = Now (`EffectiveTime` (#168) not defined)
* Execution instructions = Algo (`ExecInst` (#18)=ST)
* Slice size = 27% of top of book (SS~0.27)
* Slice interval = 1 minute 50 seconds (SI~00:01:50)
* Slice interval randomized = Yes (SIR~Y)
* Slice minimum interval = 1 minute (SMI~00:01:00)
* Action at expiration = Cancel order with any remaining unfilled amount (AE~2)
* End time = 20 minutes (`ExecEndPeriod` (#7565)=00:20:00)


**Summary:** Sell 70M EUR vs. USD at the market price with an order slice size that is 27% of the top of book size and with a random interval between slices ranging from 1 minute to 1 minute 50 seconds.

### Order management

#### Order states

Integral sends Execution Report messages to notify the submitter on updates to their orders. The various order states can be interpreted using two fields in the Execution Report:

* `ExecType` (#150): identifies the purpose of the Execution Report.
* `OrdStatus` (#39): conveys the current state of the order.


A typical order in Integral transitions through several different states during its life cycle.

Order states 

| Order state | `ExecType` (#150) | `OrdStatus` (#39) | Description |
|  --- | --- | --- | --- |
| New | 0 = New | 0 = New | The order has been successfully processed, entered in the order book, and acknowledged by the system. |
| Partially Filled | F = Trade | 1 = Partially Filled | The order has been filled for part of the amount on the order. The remainder of the order is still present in the order book. |
| Filled | F = Trade | 2 = Filled | The full amount on the order has been filled. The order is no longer in the order book. |
| Canceled | 4 = Canceled | 4 = Canceled | The system has successfully processed the cancel request. The order is no longer in the order book. |
| Expired | C = Expired | C = Expired | The order has reached a terminal state and is no longer in the order book. |
| Replaced | 5 = Replace | 5 = Replaced | The replace request has been successfully processed. The existing order has been canceled and a new order was created and is active in the matching engine. |
| Order Rejected | 8 = Rejected | 8 = Rejected | The order was rejected. |
| Undefined order | I = Order Status | U = Undefined | The order for which status has been requested is not present in the order book and cannot be found. Please contact Integral Customer Support. |


#### Order cancellation

Order cancellation can occur in the scenarios outlined below for an order that was previously accepted by Integral:

1. Solicited order cancel.
The cancel request is initiated by the customer app and the order can be successfully canceled (the order has not been filled).
2. Unsolicited order cancel.
  * Unfilled FOK orders.
  * Session disconnect: orders are not canceled by default when the FIX session disconnects. Contact your Integral Technical Account Manager to change this behavior and ensure that all open orders are canceled automatically when the FIX session disconnects.


#### Order cancel/replace and amendment

If market conditions or your business needs change, you may want to modify an existing order. Typically, this involves the Order Cancel/Replace workflow (cancelling the original order and submitting a replacement order).

When multiple orders have the same rate, orders that are submitted first to the order queue are filled first. with the replacement order falling to the bottom of the queue. The Integral also provides the Order Amendment workflow that allows you to amend an unfilled order’s size and keep its place in the order queue.

Your organization must be configured to enable the Order Amendment workflow. Contact your Integral Technical Account Manager about amending orders.

With the Order Cancel/Replace workflow, you must cancel the original order and submit a replacement order with a new client order ID (`ClOrdID` (#11)) using the Order Cancel/Replace Request message and workflow. The system assigns a new order ID (`OrderID` (#37)) to the replacement order and it joins the back of the queue. If the original order is partially filled, then the request is rejected with an Order Cancel Reject Message with the `CxlRejReason` (#102) field set to 0 (zero) “Too Late To Cancel”.

With the Order Amendment workflow enabled, you use the same Order Cancel/Replace Request message and provide a new client order ID (`ClOrdID` (#11)). If the original order is unfilled and if you only change the order size, the replacement order keeps the same order ID (`OrderID` (#37)) and keeps its place in the queue. However, if the original order is partially filled or if you change the order rate, then the replacement order gets a new order ID (`OrderID` (#37)) and joins the end of the queue.

Order cancel/replace compared to order amendment 

| Comparison | Order cancel/replace workflow | Order amendment workflow |
|  --- | --- | --- |
| Availability | Default behavior of the system | Must be configured. Contact your Integral Solutions Manager. |
| Request message sent | Order Cancel/Replace Request (see [Order Cancel/Replace Request](#order-cancelreplace-request)) | Same as cancel/replace. |
| Client order ID (`ClOrdID` (#11)) on request | New | Same as cancel/replace. |
| Request change to size only (see [Amending orders by size](#amending-orders-by-size)) | Replacement order gets new order ID (loses place in queue) | Replacement order gets old order ID (keeps place in queue) |
| Request change to rate (see [Amending orders by rate](#amending-orders-by-rate)) | Replacement order gets new order ID (loses place in queue) | Same as cancel/replace. |
| Eligible order types | All (stops must not be triggered) | Not available for directed orders of any type ([Directed orders](#directed-orders)). |
| Eligible order states | * New
* Stopped: If the order is partially filled, the request to cancel/replace is rejected with `CxlRejReason` (#102)=0 (zero) “Too Late To Cancel”.

 | * New
* Partial fill: The replacement order gets a new order ID and joins the end of the queue.
* Stopped: If the order is unfilled and you change only the order size, the replacement order gets the old order ID and retains its place in the queue. If the order is partially filled or if you change the rate, the replacement order gets a new order ID and joins the end of the queue.

 |
| Original order is partially filled | Request to cancel/replace rejected with `CxlRejReason` (#102)=0 (zero) “Too Late To Cancel” | Replacement order gets new order ID (loses place in queue) |


##### Amending orders by size

Amending an order by size preserves its place in the order queue. The date/time and order ID (`ClOrdID` (#11)) of the replacement order is the same as the original order. When you amend an order by amount, all parameters on the Order Cancel/Replace message, except the amount, must be the same as the original order.

##### Amending orders by rate

An order amended by rate loses its place in the queue. The date/time of the replacement order is updated to the date/time of the amend request and the replacement order gets a new order ID (`ClOrdID` (#11)). The amend message must match the original order in all parameters except the rate.

### Common message components

This section describes the features common to each message format in the Integral FIX Advanced Orders API.

#### Terminology

Each Integral FIX Advanced Orders API message is comprised of message fields defined in this document. Each field has its own set of attributes including:

* Tag: field number.
* Field name: human-readable name for reference.
* Req’d: indicates if the field must be sent on the FIX message:
  * Y = required by the FIX protocol.
  * Y(API) = required by the FIX Advanced Orders API implementation.
  * N = optional for both the FIX Advanced Orders API and the FIX protocol.
  * C = conditional. Refer to the field’s description to determine applicability.
* Valid values: specific values accepted for this field.
* Description: brief description of the field.
* Type(length): FIX data type of the field and the maximum length of the field value.
* →: arrow indicates a field in a repeating group.


#### Standard header

Each message type sent over the Integral FIX Advanced Orders API has a standard header component as described below. The header is abbreviated as <Standard header> in this document.

Standard header format 

| Tag | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| 8 | BeginString | Y | FIX4.3 or FIX4.4 | Identifies beginning of new message and protocol version. Must be the first field in the message. The message format must conform to the FIX 4.3 protocol, but the value “FIX4.4” is acceptable. | String(7) |
| 9 | BodyLength | Y | — | Message length (in bytes) forward to the `CheckSum` (#10) field. Must be the second field in the message. | int(6) |
| 35 | MsgType | Y | — | Defines the type of the message. Must be the third field in the message. | String(2) |
| 49 | SenderCompID | Y | — | This value is used to identify the firm sending the message. Should be set with the `SenderCompID` (#49) supplied by Integral for this FIX connection. | String(20) |
| 56 | TargetCompID | Y | — | This value is used to identify the firm receiving the message. Should be set with the `TargetCompID` (#56) supplied by Integral for this FIX connection. | String(20) |
| 34 | MsgSeqNum | Y | — | Integer message sequence number. | SeqNum(9) |
| 43 | PossDupFlag | N | Y=Possible Duplicate
N=Original Transmission | Indicates possible retransmission of message with this sequence number. Must be set to “Y” for messages sent in response to a Resend Request. | Boolean(1) |
| 52 | SendingTime | Y | — | Time the message was transmitted. Always expressed in UTC. | UTCTimestamp(21) |


#### Standard trailer

Each message type sent over the Integral FIX Advanced Orders API also has a standard trailer component as described below. The header is abbreviated as <Standard trailer> in this document.

Standard trailer format 

| Tag | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| 10 | Checksum | Y | — | Three-byte checksum. Always the last tag in the message. Functions as an end-of-message delimiter. | String(3) |


## Administrative messages

### Logon

The customer sends a Logon message to establish a FIX session with Integral. If the Logon fails, Integral responds with a Logout message. The `Text` (#58) field of the Logout message contains the reason for the rejection of the Logon message.

Valid responses 

* Logon (#35=A)
* Logout (#35=5)


Message format 

Logon format 

| Tag | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=A | — |
| 98 | EncryptMethod | Y | 0=None | Always unencrypted | int(1) |
| 108 | HeartBtInt | Y | — | Heartbeat interval in seconds. The customer’s app determines the heartbeat interval. | int(3) |
| 141 | ResetSeqNumFlag | N | Y=Yes, reset sequence numbers
N=No | Indicates that both sides of the FIX session should reset sequence numbers. | Boolean(1) |
| 553 | Username | Y(API) | — | Should be set with the username supplied by Integral for this FIX connection. | String(20) |
| 554 | Password | Y(API) | — | Should be set with the password supplied by Integral for this FIX connection. | String(20) |
| <Standard trailer>  | Y | — | — | — |


### Logout

The customer sends a Logout message to end a session. Integral sends a single Logout message in response when all Logout related actions have been completed by Integral.

Valid responses 

* Logout (#35=5)


Message format 

Logout format 

| Tag | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=5 | — |
| 58 | Text | N | — | The reason for the Logon rejection. Only included for Logout messages in response to an invalid Logon message. | String(150) |
| <Standard trailer>  | Y | — | — | — |


### Heartbeat

Integral and the customer send a Heartbeat message in response to a Test Request message to ensure connectivity. The Heartbeat message includes the `TestReqID` (#112) value from the received Test Request.

Valid responses 

* None


Message format 

Heartbeat format 

| Tag | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=0 | — |
| 112 | TestReqID | C | — | Required if heartbeat message is generated in response to a Test Request message. In this case, this tag must contain the TestReqID that was sent in the Test Request message. | String(20) |
| <Standard trailer>  | Y | — | — | — |


### Test Request

Integral and the customer send a Test Request message to force a heartbeat from the receiving app. The receiving app responds with a Heartbeat message that includes the `TestReqID` (#112) value from the received Test Request.

Valid responses 

* Heartbeat (#35=0)


Message format 

Test Request format 

| Tag | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=1 | — |
| 112 | TestReqID | C | — | This identifier should be returned in the Heartbeat response. | String(20) |
| <Standard trailer>  | Y | — | — | — |


### Session-level Reject

A Session-level Reject message is sent by Integral when a message is received but cannot be processed.

Valid responses 

* None


Message format 

Session-level Reject format 

| Tag | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=3 | — |
| 45 | RefSeqNum | Y | — | `MsgSeqNum` (#34) of the message being rejected. | SeqNum(9) |
| 371 | RefTagID | N | — | Tag ID of the field being referenced. | int(4) |
| 372 | RefMsgType | Y(API) | — | The `MsgType` (#35) of the FIX message being rejected. | String(2) |
| 373 | SessionRejectReason | Y(API) | 0=Invalid tag number.
1=Required tag missing.
2=Tag not defined for message type.
3=Undefined tag.
4=Tag specified without a value.
5=Value is incorrect (out of range) for this tag.
6=Incorrect data format for value.
7=Decryption problem.
8=Signature problem.
9=CompID problem.
10=SendingTime accuracy problem.
11=Invalid MsgType.
12=XML validation error.
13=Tag appears more than once.
14=Tag specified out of required order.
15=Repeating group fields out of order.
16=Incorrect NumInGroup count for repeating group.
17=Non “data” value includes field delimiter (SOH character).
99=Other. | Rejection code. | int(4) |
| <Standard trailer>  | Y | — | — | — |


### Resend Request

The receiving app sends a Resend Request message to initiate the retransmission of messages, typically when it detects a gap in the message sequence number. The sender can request a single message or a range of messages.

The Resend Request message applies only to persistent sessions.

Valid responses 

* Various


Message format 

Resend Request format 

| Tag | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=2 | — |
| 7 | BeginSeqNo | Y | — | Message sequence number of the first message in range to be re-sent. | int(9) |
| 16 | EndSeqNo | Y | — | Message sequence number of the last message to be re-sent. | int(9) |
| <Standard trailer>  | Y | — | — | — |


### Sequence Reset

The sequence reset messages forces the synchronization of sequence numbers on the sending and receiving sides in the event of lost messages.

Integral FIX Advanced Orders API messages are transient and are not persisted. The Integral FIX Advanced Orders API does not retransmit market data messages.

Valid responses 

* None


Message format 

Sequence Reset format 

| Tag | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=4 | — |
| 123 | GapFillFlag | Y | Y | Indicates that the Sequence Reset message is replacing the admin or application messages, which are not re-sent. | Boolean(1) |
| 36 | NewSeqNo | Y | — | New sequence number. This number must be greater than either the `BeginSeqNo` (#16) or the `EndSeqNo` (#7) on the Resend Request message that prompted the sequence number reset. | int(9) |
| <Standard trailer>  | Y | — | — | — |


## Application messages

### New Order – Single

Customers use the New Order - Single message to submit orders in Integral.

Valid responses 

* Execution Report (#35=8)
* Business Message Reject (#35=j)


Message format 

If your trading is subject to regulatory requirements, such as MiFID or EMIR, see [Regulatory data (MiFID, EMIR, CFTC)](#regulatory-data-mifid-emir-cftc) for regulation-specific fields.

New Order – Single format 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=D | — |
| 11  | ClOrdID | Y | — | Unique identifier for the order assigned by the customer. | String(11) |
| 100  | ExDestination | N | — | For directed orders, the name of the target venue.
For external algos and other directed orders, the name of the target venue. | String(20) |
| 21  | HandlInst | Y | 1=Automated execution order | Instructions for handling the order. | char(1) |
| 55  | Symbol | Y | — | Currency pair for the order. | String(35) |
| 54  | Side | Y | 1=Buy
2=Sell | 1 (Buy): The customer buys `Currency` (#15).
2 (Sell): The customer sells `Currency` (#15). | char(1) |
| 60  | TransactTime | Y | — | Time this order was initiated by the trading system. | UTCTimestamp(21) |
| 38  | OrderQty  | Y | — | Order quantity. Must be a positive number. | Qty(20) |
| 40  | OrdType | Y | 2=Limit
1=Market or Market Range
3=Stop
4=Stop Limit
D=Previously quoted\ | Type of order.
If the order type is D, then the `DeliverToCompID` (#128) field must have a value.
If the order type is 1 or 3, then the value of the `PegOffsetValue` (#211) field determines whether the order is a market order or a market range order. See [PegOffsetValue](#field_PegOffsetValue). | char(1) |
| 44  | Price | C | — | This field is not required for market orders (`OrdType` (#40)=1).
FX spot: The execution price or limit price. The precision of this float value must be agreed upon by both the sending and the receiving parties.
FX swap: The near-leg execution price or limit price. The precision of this float value must be agreed upon by both the sending and the receiving parties.
Stop limit orders: The limit price. | Price(20) |
| 15  | Currency | Y | — | Identifies currency used for prices. | Currency(3) |
| 18  | ExecInst  | Y | B=Match with all available liquidity
B not specified=No cross
P=Best price
P not specified=Price at depth
9=Bid trigger
0=Offer trigger
M=Mid trigger
R=At rate
W=VWAP | How your order is executed. As applicable to the order type, you can specify more than one value by separating each value with a space. | char(2) |
| 59  | TimeInForce | Y | 0=DAY
1=GTC (Good Till Cancel)
3=IOC (Immediate Or Cancel)
4=FOK (Fill Or Kill)
6=GTD/GTT (Good Till Date/Time) | Specifies how long the order remains in effect. | char(1) |
| 126  | ExpireTime | C | _ | Required when `TimeInForce` (#59) = 6(GTT/GTD).
The relative or absolute expiry time in the format *YYYYMMDD-hh:mm:ss.sss*.
Specify a relative or absolute expiry time with the date portion *YYYYMMDD:** Relative expiry: set the date portion to 00000000.
For example, for an order that expires 30 seconds from receipt, you would specify 126=00000000-00:00:30.000.
* Absolute expiry: set both the date and time portions.
For example, to set the order to expire at 17:00 on August 14th, 2025, you would specify 126=20250814-17:00:00.000.

 | UTCTimestamp (21) |
| 63  | SettlType | N | F=forward | Indicates an order from streaming outright prices. You must also specify `SettlDate` (#64) with the price's tenor. | String(1) |
| 64  | SettlDate | N | — | Settlement date in the format *YYYYMMDD*.
When `SettlType` (#63) is included for streaming outright prices, this is the forward date or tenor for outrights and fixing date for NDFs.
If a date, it is the settlement date in *YYYYMMDD* format.
If a tenor, the value is defined by Integral ([Supported tenors](#supported-tenors)). | * Broken date: LocalMktDate(10)
* Tenor: String(30)

 |
| 192  | OrderQty2 | N | — | FX spot, outright: Not applicable.
FX swap: The far leg currency amount of the dealt currency (as specified by the `Currency` (#15) field) to be either bought or sold (as determined by the `Side` (#54) field). | Qty(20) |
| 193  | SettlDate2 | N | * Tenor: See [Supported tenors](#supported-tenors).
* Broken date

 | FX spot, outright: Not applicable.
FX swap: The far leg value date.
The field contains either a standard tenor symbol or a broken date in *YYYYMMDD* format. | * Broken date: LocalMktDate(10)
* Tenor: String(30)

 |
| 210  | MaxShow  | N | — | Maximum quantity of the order shown to other customers.
If not specified, then the entire order amount is shown to other customers.
The value of this tag must be between 0 (zero) and the value in `OrderQty` (#38). | Qty(20) |
| 110  | MinQty | N | — | Minimum fill quantity. | Qty(20) |
| 211  | PegOffsetValue  | C | — | Market range orders to specify the allowable slippage. The value is expressed in pips. For example, the value 1.0 equals 1 pip, which EUR/USD is 0.0001.
Stop orders if the resulting order when triggered is a market range order.
This field is left empty or not included for market orders. | float(10) |
| 541  | MaturityDate | C | — | The fixing date for NDF trades. Either this field or a value date (`SettlDate` (#64)) must be specified. If this field is omitted or empty, then the fixing date is calculated by the system. If both this field and a value date are specified, then the value of this field must be before `SettlDate` (#64).
NDFs: The fixing date.
NDF swaps: The near-leg fixing date. | LocalMktDate(8) |
| 8541  | FarMaturityDate | C | — | For NDF swaps only: The far-leg fixing date. | LocalMktDate(8) |
| 631  | MidPx | N | — | The near-leg all-in mid price. If a provider sends only mid swap points instead of near and far mid prices separately, this field is empty or 0 (zero). | Price(20) |
| 7631  | MidPxFl | N | — | The far-leg all-in mid price. If a provider sends only mid swap points instead of near and far mid prices separately, this field contains the swap points. | Price(20) |
| 640  | Price2 | N | — | FX spot, outright: Not applicable.
FX swap: The far-leg execution price or limit price. The precision of this float value must be agreed upon by both the sending and the receiving parties. The precision of this value must be agreed upon by both the sending and receiving parties. | Price(20) |
| 167  | SecurityType | N | FOR=Foreign Exchange Contract | Indicates type of security. | String(3) |
| 460  | Product | N | 4=CURRENCY | The asset class. | int(1) |
| 99  | StopPx  | N | — | The stop price that triggers a stop or stop limit order. You can use the `ExecInst` (#18) field to specify whether the stop triggers when the market price equals or is less/greater than the stop price, or only when less/greater than the stop price. See [ExecInst](#field_ExecInst) and [Order execution](#order-execution) for details. | Price(20) |
| 957  | NoStrategyParameters | N | — | Number of strategy parameters in this repeating group for external algos. | NumInGroup(3) |
| → | 958 | StrategyParameterName | N | — | Name of the parameter. | String(255) |
| → | 959 | StrategyParameterType | N | — | Datatype of the parameter.
1=Int
2=Length
3=NumInGroup
4=SeqNum
5=TagNum
6=Float
7=Qty
8=Price
9=PriceOffset
10=Amt
11=Percentage
12=Char
13=Boolean
14=String
15=MultipleCharValue
16=Currency
17=Exchange
18=Month-Year
19=UTCTimeStamp
20=UTCTimeOnly
21=LocalMktDate
22=UTCDateOnly
23=Data
24=MultipleStringValue | int(2) |
| → | 960 | StrategyParameterValue | N | — | Value of the parameter. | String(1023) |
| 168  | EffectiveTime | N | — | The order submission time in GMT in the format *YYYYMMDD-hh:mm:ss* or *YYYYMMDD-hh:mm:ss.sss*.
For algo orders, the value of this field indicates, he absolute time in GMT at which the algo should start execution. If this field is not specified and `ExecEffPeriod` (#7564) is not specified, the algo starts execution immediately. If this field is specified and the time value is in the past, the algo starts execution immediately. | UTCTimestamp(21) |
| 7556  | ExecEndTime | N | — | Absolute time in GMT at which the algo should stop executing. If this tag is not specified and `ExecEndPeriod` (#7565) is not specified, the order expires based on the value of the `TimeInForce` (#59) field. | UTCTimestamp(21) |
| 7560  | AlgoParameters | N | — | The algo parameters are represented as key/value pairs with the tilde character (~) separating the parameter key from the parameter value and each key/value pair delimited by a space. For example, the value “SI~01:00:00 SMI~00:30:00 SIR~Y AE~1” indicates “Slice interval = 1 hour, Minimum slice interval = 30 minutes, Slice interval randomized between 30 minutes (SMI) and 1 hour (SI), At expiration fill the remainder at market”.
This field is required when `ExecInst` (#18)=ST. | MultipleValueString(5) |
| → | AE | ActnOrdrExpr | N | 1=Fill @ Market
2=Cancel Order | Action to be taken at the expiration of the order. If this tag is not specified, the order is canceled at expiration. | char(1) |
| → | SFOK | SlcFillOrKill | N | Y=FOK
N=IOC (default) | Determines how slices are executed.
Y=Slices must be filled completely by a single fill from a provider or canceled. This parameter is used only if the slice size (SS, SlcSize) is fixed.
N=Partial fills allowed. | Boolean(1) |
| → | SI | SlcIntrvl | C | — | Required for TWAP orders. Relative time between two slices specified in the format *hh:mm:ss.sss*. This field is required when `ExecInst` (#18)=ST. | UTCTimeOnly(14) |
| → | SIR | SlcIntrvlRndmzr | N | Y=Slice interval randomized
N=Slice interval not randomized | Randomization enabled (Y)/disabled (N). If enabled, the order managed system randomly selects a slice interval between SlcIntrvl (SI) and slice interval and SlcMinIntrvl (SMI). | Boolean(1) |
| → | SMI | SlcMinIntrvl | C | — | Required for TWAP orders. Minimum slice interval specified in the format *hh:mm:ss.sss*. Applicable if the SlcIntrvlRndmzr (SIR) parameter is true. This field is required when `ExecInst` (#18)=ST. | UTCTimeOnly(14) |
| → | SRS | SlcRegularSize | N | — | If this parameter is specified, the slice size is rounded to a multiple of this value. If not specified, the behavior defaults to the system configuration. Contact your Integral Technical Account Manager to configure the default slice size. | Qty(20) |
| → | SS | SlcSize | N | — | Size of each slice. If the slice size is not specified, the size is chosen based on the TOBPercent (TOBP) parameter. | Qty(20) |
| → | SSR | SlcSizeRndmzr | N | Y=Slice size randomized
N=Slice size not randomized\ | Randomization enabled (Y)/disabled (N) flag. If enabled, the order management system randomizes the slice size between SlcRegularSize (SRS) and SlcSize (SS) or, if TOBPercent (TOBP) is specified, between the calculated top-of-book amount and SlcSize (SS). | Boolean(1) |
| → | TOBP | TOBPercent | N | — | Determines how the slice size varies, calculated as a percentage of the top-of-book (TOB) size. For example, a value of 0.5 indicates 50% of TOB size. A value of 1.2 indicates 120% of TOB size. If SlcSizeRndmzr (SSR) is true, then the slice size varies between SlcRegularSize (SRS) and the size calculated with the value of this parameter. If this parameter is not specified, the slice size is fixed. | float(20) |
| 7561  | AlgoName | N | — | This field is used with algo orders (`ExecInst` (#18)=ST). A free-format string provided to record the algo employed by the order. The value of this field is not validated and has no effect on algo functionality. | String(30) |
| 7564  | ExecEffPeriod | N | — | Relative time at which the algo should start execution specified in the format *hh:mm:ss.sss*. If this tag is not specified and `EffectiveTime` (#168) is not specified, the algo starts executing immediately. | UTCTimeOnly(14) |
| 7565  | ExecEndPeriod | N | — | Relative time at which the algo should stop execution specified in the format *hh:mm:ss.sss*. If this tag is not specified and `ExecEndTime` (#7556) is not specified, the order expires based on the value of the `TimeInForce` (#59) field. | UTCTimeOnly(14) |
| <Standard trailer>  | Y | — | — | — |


### New Order – Multileg (block trades)

Customers send a New Order – Multileg message to submit a block trade order in Integral.

Valid responses 

* Execution Report (#35=8)
* Business Message Reject (#35=j)


Message format 

New Order – Multileg format (block trades) 

| Tag  | Field name | Req'd | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=AB | — |
| 50  | SenderSubID | C | — | Your organization's legal entity's ID which is used to deal with the liquidity provider. Not included if you are dealing as a facilitator on behalf of the Customer (using OnBehalfOfCompID #(115)). | String(20) |
| 115  | OnBehalfOfCompID | C | — | Your customer organization's ID if you are dealing as a facilitator on behalf of the customer. Otherwise not included in the message. Instead of a separate provider list sent with the order, configurations can be maintained with Integral. | String(20) |
| 128  | DeliverToCompID | C | — | The liquidity provider organization's ID or a comma separated list of liquidity provider IDs to match the order against. | String(20) |
| 11  | ClOrdID | Y | — | A session-scoped unique identifier assigned by the client. A new `ClOrdID` (#11) must be sent with each New Order - Multileg message. | String(20) |
| 18  | ExecInstr | Y | B=Match with all available liquidity
B not specified=No cross
P=Best price
P not specified=Price at depth
9=Bid trigger
R=At rate
W=VWAP | How your order is executed. | char(10) |
| 21  | HandlInst | Y | 1 | 1=Automated execution order
Required by the FIX protocol. | char(1) |
| 38  | OrderQty | Y | — | This field specifies the net of all the allocation amounts. To be used for validation against the net of the amounts. | Qty(20) |
| 40  | OrdType | Y | 1=Market
2=Limit | Order type. | char(1) |
| 44  | Price | C | — | Limit price of the block order. Required for limit orders (`OrdType` (#40)=2). | Price(20) |
| 59  | TimeInForce | C | 0=DAY
1=GTC (Good Till Cancel)
3=IOC (Immediate Or Cancel)
4=FOK (Fill Or Kill)
6=GTD (Good Till Date/Time)\ | Specifies how long the order remains in effect. | char(1) |
| 126  | ExpireTime | C | — | Required when `TimeInForce` (#59) = 6(GTT/GTD).
The relative or absolute expiry time in the format *YYYYMMDD-hh:mm:ss.sss*.
Specify a relative or absolute expiry time with the date portion *YYYYMMDD:** Relative expiry: set the date portion to 00000000.
For example, for an order that expires 30 seconds from receipt, you would specify 126=00000000-00:00:30.000.
* Absolute expiry: set both the date and time portions.
For example, to set the order to expire at 17:00 on August 14th, 2025, you would specify 126=20250814-17:00:00.000.

 | UTCTimestamp (21) |
| 60  | TransactTime | Y | — | Time at which the message is sent by the client. This field is automatically stamped by the FIX engine in the format:
*YYYYMMDD-hh:mm:ss.sss* | UTCTimestamp (21) |
| 54  | Side | Y | 1=Buy
2=Sell | This field specifies the net direction of the dealt currency based on all allocation amounts. | int(1) |
| 55  | Symbol | Y | — | Symbol for the base and term currencies of the currency pair in the following format:
*baseCCY/termCCY*
(for example, "EUR/USD") | String(35) |
| 15  | Currency | Y | — | Dealt currency. This may be the base or term currency of a currency pair. | Currency(3) |
| 167  | SecurityType | Y | FOR | FOR=Foreign Exchange Contract. | String(3) |
| 64  | SettDate | Y | SPOT | Value date or tenor on which trades settle.
Value dates are specified in the format *YYYYMMDD*.
Tenors must be as defined by Integral (see [Supported tenors](#supported-tenors)).
For block trades, provide the value as SPOT. | * Broken date: LocalMktDate(10)
* Tenor: String(30)

 |
| 460  | Product | Y | 4 | Asset class. The value is always 4=CURRENCY. | int(1) |
| 555  | NoLegs | Y | — | Number of legs in the repeating group for multi-leg order. | NumInGroup(2) |
| → | 600 | LegSymbol | Y | — | Leg currency pair. | String(35) |
| → | 624 | LegSide | Y | 1=Buy
2=Sell | Side of the leg specified in dealt currency. | char(1) |
| → | 556 | LegCurrency | Y | — | Dealt currency of the leg. All legs of the multi-leg order must have the same dealt currency. | Currency(3) |
| → | 687 | LegQty | Y | — | Amount of dealt currency of the leg. | Qty(20) |
| → | 539 | NoNestedPartyIDs | Y | 1 | Value of the `NoNestedPartyIDs` (#539) field indicates the number of groups and thus the number of sub accounts. | NumInGroup(1) |
| →→ | 524 | NestedPartyID | Y | — | Customer account ID configured as the legal entity in Integral's system. | String(20) |
| →→ | 538 | NestedPartyRole | Y | 24=Customer Account | Customer account (taker allocation account). | int(2) |
| → | 654 | LegRefID | Y | — | Unique ID of the trade represented by the leg. This element must be the last element of the `NoLegs` (#555) group. | String(20) |
| <Standard trailer>  | Y | — | — | — |


### Order Cancel Request

Customers send the Order Cancel Request message to request cancellation for all of the remaining quantity of an existing order.

Integral accepts the request only if the order can be successfully canceled.

Valid responses 

* Execution Report (#35=8)
* Order Cancel Reject (#35=9)


Message format 

Order Cancel Request format 

| Tag | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=F | — |
| 41  | OrigClOrdID | Y | — | `ClOrdID` (#11) value of the order being canceled | String(11) |
| 11  | ClOrdID | Y | — | Unique identifier for the cancel request assigned by the customer. | String(11) |
| 55  | Symbol | Y(API) | — | Currency pair for the order. | String(35) |
| 54  | Side | Y | 1=Buy
2=Sell | 1 (Buy): The customer buys `Currency` (#15).
2 (Sell): The customer sells `Currency` (#15). | char(1) |
| 60  | TransactTime | Y | — | Time the cancel request was initiated by the customer app. | UTCTimestamp(21) |
| 460  | Product | N | 4=CURRENCY | The asset class. | int(1) |
| <Standard trailer>  | Y | — | — | — |


### Order Cancel/Replace Request

Customers can use the Order Cancel/Replace Request message to modify or replace an existing order with an entirely new order. Integral handles this process in a single transaction from the order workflow perspective: The replacement order is not created unless and until the original order is successfully canceled.

When Integral receives an order cancel/replace request, Integral cancels the original order, replaces it with the modified order, and sends the confirmation of the new, modified order (with the new Integral-assigned order ID) to the customer. This new order ID must be used in the `OrderID` (#37) for subsequent modification operations.

Customers can use the Order Cancel/Replace Request message to modify the following order parameters:

* Quantity (`OrderQty` (#38))
* Price (`Price` (#44))
* Side (`Side` (#54))
* Maximum amount to be shown (`MaxShow` (#210))


The Order Cancel/Replace Request message should not be used to cancel an existing order without replacement. To cancel an existing order, the Order Cancel Request message should be used.

Valid responses 

* Execution Report (#35=8)
* Order Cancel Reject (#35=9)
* Business Message Reject (#35=j)


Message format 

Order Cancel/Replace Request format 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=G | — |
| 37  | OrderID | Y(API) | — | Unique identifier for the order assigned by Integral. | String(20) |
| 41  | OrigClOrdID | Y | — | `ClOrdID` (#11) of the order being canceled or replaced. This order should not be a filled or rejected order. | String(11) |
| 11  | ClOrdID | Y | — | Unique identifier for the cancel/replace request assigned by customer. | String(11) |
| 100  | ExDestination | N | — | For directed orders, the name of the target venue. | String(20) |
| 21  | HandInst | Y | 1 = Automated execution order | Instructions for handling the order. | char(1) |
| 55  | Symbol | Y(API) | — | Currency pair for the order. Must match the original order. | String(35) |
| 54  | Side | Y | 1=Buy
2=Sell | 1 (Buy): The customer buys `Currency` (#15).
2 (Sell): The customer sells `Currency` (#15). | char(1) |
| 60  | TransactTime | Y | — | Time the cancel/replace request was initiated by the customer app. | UTCTimestamp(21) |
| 38  | OrderQty | Y | — | Amount for the new (replaced) order. Must be a positive number. | Qty(20) |
| 40  | OrdType | Y | 2=Limit
P=Pegged@mid
1=Market or Market Range
3=Stop
4=Stop Limit
D=Previously quoted | Type of order. Must match the original order.
If the order type is D, then the `DeliverToCompID` (#128) field must have a value.
If the order type is 1 or 3, then the value of the `PegOffsetValue` (#211) field determines whether the order is a market order or a market range order. See [PegOffsetValue](#field_PegOffsetValue). | char(1) |
| 44  | Price | C | — | This field is not required for market orders (`OrdType` (#40)=1).
FX spot: The execution price or limit price. The precision of this float value must be agreed upon by both the sending and the receiving parties.
FX swap: The near-leg execution price or limit price. The precision of this float value must be agreed upon by both the sending and the receiving parties.
Stop limit orders: The limit price. | Price(20) |
| 15  | Currency | Y(API) | — | Identifies currency used for amount. Must match the original order. | Currency(3) |
| 18  | ExecInst | Y | B=Match with all available liquidity
B not specified=No cross
P=Best price
P not specified=Price at depth
9=Bid trigger
0=Offer trigger
M=Mid trigger
R=At rate
W=VWAP | How your order is executed. As applicable to the order type, you can specify more than one value by separating each value with a space. | char(1) |
| 59  | TimeInForce | Y | 0=DAY
1=GTC (Good Till Cancel)
3=IOC (Immediate Or Cancel)
4=FOK (Fill Or Kill)
6=GTD/GTT (Good Till Date/Time) | Specifies how long the order remains in effect. Must match the original order. | char(1) |
| 63  | SettlType | N | F=forward | Indicates an order from streaming outright prices. You must also specify `SettlDate` (#64) with the price's tenor. | String(1) |
| 64  | SettlDate | N | — | Settlement date in the format *YYYYMMDD*.
When `SettlType` (#63) is included for streaming outright prices, this is the forward date or tenor for outrights and fixing date for NDFs.
If a date, it is the settlement date in *YYYYMMDD* format.
If a tenor, the value will be a tenor as defined by Integral ([Supported tenors](#supported-tenors)). | * Broken date: LocalMktDate(10)
* Tenor: String(30)

 |
| 192  | OrderQty2 | N | — | FX spot, outright: Not applicable.
FX swap: The far leg currency amount of the dealt currency (as specified by the `Currency` (#15) field) to be either bought or sold (as determined by the `Side` (#54) field). | Qty(20) |
| 193  | SettlDate2 | N | * Tenor: See [Supported tenors](#supported-tenors).
* Broken date

 | FX spot, outright: Not applicable.
FX swap: The far leg value date.
The field contains either standard tenor symbol or a broken date in *YYYYMMDD* format. | * Broken date: LocalMktDate(10)
* Tenor: String(30)

 |
| 210  | MaxShow | N | — | Maximum quantity of the order shown to other customers.
If not specified, then the entire order amount is shown to other customers.
The value of this tag must be between 0 (zero) and the value in `OrderQty` (#38). | Qty(20) |
| 110  | MinQty | N | — | Minimum fill quantity. | Qty(20) |
| 167  | SecurityType | N | FOR=Foreign Exchange Contract | Indicates type of security. | String(3) |
| 460  | Product | N | 4=CURRENCY | The asset class. | int(1) |
| 211  | PegOffsetValue  | C | — | Allowable slippage in pips for market range orders. For example, the value 1.0 equals 1 pip, which EUR/USD is 0.0001.
This field is left empty or not included for market orders. | float(10) |
| 541  | MaturityDate | C | — | The fixing date for NDF trades. Either this field or a value date (`SettlDate` (#64)) must be specified. If this field is omitted or empty, then the fixing date is calculated by the system. If both this field and a value date are specified, then the value of this field must be before `SettlDate` (#64).
NDFs: The fixing date.
NDF swaps: The near-leg fixing date. | LocalMktDate(8) |
| 8541  | FarMaturityDate | C | — | For NDF swaps only: The far-leg fixing date. | LocalMktDate(8) |
| 631  | MidPx | N | — | The near-leg all-in mid price. If a provider sends only mid swap points instead of near and far mid prices separately, this field is empty or 0 (zero). | Price(20) |
| 7631  | MidPxFl | N | — | The far-leg all-in mid price. If a provider sends only mid swap points instead of near and far mid prices separately, this field contains the swap points. | Price(20) |
| 640  | Price2 | N | — | FX spot, outright: Not applicable.
FX swap: The far-leg execution price or limit price. The precision of this float value must be agreed upon by both the sending and the receiving parties. The precision of this value must be agreed upon by both the sending and receiving parties. | Price(20) |
| 168  | EffectiveTime | N | — | The order submission time in GMT in the format *YYYYMMDD-hh:mm:ss* or *YYYYMMDD-hh:mm:ss.sss*.
For algo orders, the value of this field indicates the absolute time in GMT at which the algo should start execution. If this field is not specified and `ExecEffPeriod` (#7564) is not specified, the algo starts execution immediately. If this field is specified and the time value is in the past, the algo starts execution immediately. | UTCTimestamp(21) |
| 7556  | ExecEndTime | N | — | Absolute time in GMT at which the algo should stop executing. If this tag is not specified and `ExecEndPeriod` (#7565) is not specified, the order expires based on the value of the `TimeInForce` (#59) field. | UTCTimestamp(21) |
| 7560  | AlgoParameters | N | — | The algo parameters represented as key/value pairs with the tilde character (~) separating the parameter key from the parameter value and each key/value pair delimited by a space. For example, the value “SI~01:00:00 SMI~00:30:00 SIR~Y AE~1” indicates “Slice interval = 1 hour, Minimum slice interval = 30 minutes, Slice interval randomized between 30 minutes (SMI) and 1 hour (SI), At expiration fill the remainder at market”.
This field is required when `ExecInst` (#18)=ST. | MultipleValueString(5) |
| → | AE | ActnOrdrExpr | N | 1=Fill @ Market
2=Cancel Order | Action to be taken at the expiration of the order. If this tag is not specified, the order is canceled at expiration. | char(1) |
| → | SFOK | SlcFillOrKill | N | Y=FOK
N=IOC (default) | Determines how slices are executed.
Y=Slices must be filled completely by a single fill from a provider or canceled. This parameter is used only if the slice size (SS, SlcSize) is fixed.
N=Partial fills allowed. | Boolean(1) |
| → | SI | SlcIntrvl | C | — | Required for TWAP orders. Relative time between two slices specified in the format *hh:mm:ss.sss*. This field is required when `ExecInst` (#18)=ST. | UTCTimeOnly(14) |
| → | SIR | SlcIntrvlRndmzr | N | Y=Slice interval randomized
N=Slice interval not randomized | Randomization enabled (Y)/disabled (N). If enabled, the order managed system randomly selects a slice interval between SlcIntrvl (SI) and slice interval and SlcMinIntrvl (SMI). | Boolean(1) |
| → | SMI | SlcMinIntrvl | C | — | Required for TWAP orders. Minimum slice interval specified in the format *hh:mm:ss.sss*. Applicable if the SlcIntrvlRndmzr (SIR) parameter is true. This field is required when `ExecInst` (#18)=ST. | UTCTimeOnly(14) |
| → | SRS | SlcRegularSize | N | — | If this parameter is specified, the slice size is rounded to a multiple of this value. If not specified, the behavior defaults to the system configuration. Contact your Integral Technical Account Manager to configure the default slice size. | Qty(20) |
| → | SS | SlcSize | N | — | Size of each slice. If the slice size is not specified, the size is chosen based on the TOBPercent (TOBP) parameter. | Qty(20) |
| → | SSR | SlcSizeRndmzr | N | Y=Slice size randomized
N=Slice size not randomized | Randomization enabled (Y)/disabled (N) flag. If enabled, the order management system randomizes the slice size between SlcRegularSize (SRS) and SlcSize (SS) or, if TOBPercent (TOBP) is specified, between the calculated top-of-book amount and SlcSize (SS). | Boolean(1) |
| → | TOBP | TOBPercent | N | — | Determines how the slice size varies, calculated as a percentage of the top-of-book (TOB) size. For example, a value of 0.5 indicates 50% of TOB size. A value of 1.2 indicates 120% of TOB size. If SlcSizeRndmzr (SSR) is true, then the slice size varies between SlcRegularSize (SRS) and the size calculated with the value of this parameter. If this parameter is not specified, the slice size is fixed. | float(20) |
| 7561  | AlgoName | N | — | This field is used with algo orders (`ExecInst` (#18)=ST). A free-format string provided to record the algo employed by the order. The value of this field is not validated and has no effect on algo functionality. | String(30) |
| 7564  | ExecEffPeriod | N | — | Relative time at which the algo should start execution specified in the format *hh:mm:ss.sss*. If this tag is not specified and `EffectiveTime` (#168) is not specified, the algo starts executing immediately. | UTCTimeOnly(14) |
| 7565  | ExecEndPeriod | N | — | Relative time at which the algo should stop execution specified in the format *hh:mm:ss.sss*. If this tag is not specified and `ExecEndTime` (#7556) is not specified, the order expires based on the value of the `TimeInForce` (#59) field. | UTCTimeOnly(14) |
| <Standard trailer>  | Y | — | — | — |


### Order Status Request

The customer sends the Order Status Request message to request the status of a working order (for example, unfilled or partially filled).

Valid responses 

* Execution Report (#35=8)


Message format 

Order Status Request format 

| Tag | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=H | — |
| 11 | ClOrdID | Y | — | The `ClOrdID` (#11) of the order whose status is being requested. | String(11) |
| 37 | OrderID | Y(API) | — | Unique identifier for the order assigned by Integral. | String(20) |
| 55 | Symbol | Y(API) | — | Currency pair for the order. | String(35) |
| 54 | Side | Y | 1=Buy
2=Sell | 1 (Buy): The customer buys `Currency` (#15).
2 (Sell): The customer sells `Currency` (#15). | char(1) |
| <Standard trailer>  | Y | — | — | — |


### Execution Report

Integral sends an Execution Report message to:

* Confirm the receipt of an order
* Confirm changes to an order
* Send order status information
* Send fill information on working orders
* Reject orders


Each Execution Report contains two fields that communicate both the current state of the order (`OrdStatus` (#39)) and the purpose of the message (`ExecType` (#150).)

If your trading is subject to regulatory requirements, such as MiFID or EMIR, see [Regulatory data (MiFID, EMIR, CFTC)](#regulatory-data-mifid-emir-cftc) for regulation-specific fields.

Valid responses 

* None


Message formats 

* [Order create or cancel/replace](#order-create-or-cancelreplace)
* [Fill](#fill)
* [Fill (block trades)](#fill-block-trades)
* [Order reject](#order-reject)
* [Order cancel or expire](#order-cancel-or-expire)
* [Order status](#order-status)


#### Order create or cancel/replace

Execution Report format: create or cancel/replace 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=8 | — |
| 37  | OrderID | Y | — | Unique identifier for the order assigned by Integral. For a response to a Cancel/Replace request, this is the new order ID. | String(20) |
| 11  | ClOrdID | Y | — | Unique identifier for the order assigned by the customer. | String(11) |
| 150  | ExecType | Y | 0=New | Describes the purpose of the execution report. | char(1) |
| 39  | OrdStatus | Y | 0=New | Identifies the order status as accepted. | char(1) |
| 55  | Symbol | Y | — | Currency pair for the order | String(35) |
| 54  | Side | Y | 1=Buy
2=Sell | 1 (Buy): The customer buys `Currency` (#15).
2 (Sell): The customer sells `Currency` (#15).
For FX swap orders, this is the side of the far leg. | char(1) |
| 38  | OrderQty | Y | — | FX spot: Amount to be traded on the order
FX swap: Near-leg amount to be traded | Qty(20) |
| 40  | OrdType | Y | 2=Limit
1=Market or Market Range
3=Stop
4=Stop Limit
D=Previously quoted | Type of order | char(1) |
| 44  | Price | Y | — | Specifies the limit price for limit orders `OrdType` (#40)=2 and Pegged orders `OrdType` (#40)=P.
This field is not required for market orders (`OrdType` (#40)=1).
FX spot: The execution price or limit price.
FX swap: The near-leg execution price or limit priced the receiving parties.
Stop limit orders: The limit price. | Price(20) |
| 15  | Currency | Y(API) | — | Identifies currency used for amount | Currency(3) |
| 167  | SecurityType | N | FOR=Foreign Exchange Contract | Indicates type of security | String(4) |
| 59  | TimeInForce | Y | 0=DAY
1=GTC (Good Till Cancel)
3=IOC (Immediate Or Cancel)
4=FOK (Fill Or Kill)
6=GTD (Good Till Date/Time) | Specifies how long the order remains in effect | char(1) |
| 31  | LastPx | C | 0 (zero) | Price for the fill. Populated if `ExecType` (#150)=F (Trade), 0 (zero) otherwise.
FX spot, outright: Price at which the current or last fill was made.
FX swap: Near-leg price at which the current or last fill was made. | Price(20) |
| 32  | LastQty | C | 0 (zero) | Quantity for the fill. Populated if `ExecType` (#150)=F (Trade), 0 (zero) otherwise.
FX spot, outright: Amount of the current or last fill.
FX swap: Near-leg amount of the current or last fill. | Qty(20) |
| 151  | LeavesQty | Y | — | Unfilled amount for the order or quantity available for further execution. | Qty(20) |
| 60  | TransactTime | Y | — | Time the transaction represented by this execution report occurred. | UTCTimestamp(21) |
| 110  | MinQty | N | — | Minimum fill quantity for an order | Qty(20) |
| 210  | MaxShow | N | — | Maximum quantity of the order shown to other customers.
If not specified, then the entire order amount is shown to other customers.
The value of this tag must be between 1 and the value in `OrderQty` (#38). | Qty(20) |
| 211  | PegOffsetValue | C | — | Allowable slippage in pips for market range orders. For example, the value 1.0 equals 1 pip, which EUR/USD is 0.0001.
This field is left empty or not included for market orders. | float(10) |
| 192  | OrderQty2 | C | — | FX spot, outright: Not applicable.
FX swap: Far-leg “Total Intended Order Quantity” (including the amount already filled for this chain of orders) expressed in the dealt currency. | Qty(20) |
| 193  | SettlDate2 | C | * Tenor: See [Supported tenors](#supported-tenors).
* Broken date

 | FX spot, outright: Not applicable
FX swap: The far leg value date
The field contains either standard tenor symbol or a broken date in the format *YYYYMMDD*. | * Broken date: LocalMktDate(10)
* Tenor: String(30)

 |
| 195  | LastForwardPoints | N | — | FX spot: Not applicable.
FX outright: Forward points
FX swap: Near-leg forward points | PriceOffset(20) |
| 631  | MidPx | N | — | The near-leg all-in mid price. If a provider sends only mid swap points instead of near and far mid prices separately, this field is empty or 0 (zero). | Price(20) |
| 7631  | MidPxFl | N | — | The far-leg all-in mid price. If a provider sends only mid swap points instead of near and far mid prices separately, this field contains the swap points. | Price(20) |
| 640  | Price2 | N | — | This should be the same value as the one received from the associated New Order - Single message.
FX spot, outright: Not applicable.
FX swap: Far-leg execution price. | Qty(20) |
| 641  | LastForwardPoints2 | N | — | FX spot: Not applicable.
FX outright: Not applicable.
FX swap: Far-leg forward points | PriceOffset(20) |
| 7541  | LastPx2 | N | — | FX spot, outright: Not applicable.
FX swap: Far-leg price at which the current or last fill was made. | Price(20) |
| 7542  | LastSpotRate2 | N | — | FX spot, outright: Not applicable.
FX swap: Far-leg spot rate. Only sent under very specific conditions for RFS order rejections. | Price(20) |
| 7543  | LeavesQty2 | N | — | FX spot, outright: Not applicable.
FX swap: Far-leg open amount | Qty(20) |
| 7544  | CumQty2 | N | — | FX spot, outright: Not applicable.
FX swap: Far-leg total filled amount. If the `ExecType` (#150) field is “2”, the value of this field is the same as the `OrderQty` (#38) field. If the `ExecType` (#150) field is “8”, the value of this field is “0” (zero). | Qty(20) |
| 7545  | SettlCurrAmt2 | N | — | FX spot, outright: Settled amount in terms of settlement currency specified by the `SettlCurrency` (#120) field.
FX swap: Far-leg settled amount in terms of settlement currency specified by the `SettlCurrency` (#120) field. | Amt(20) |
| 460  | Product | N | 4=CURRENCY | Identifies the type of the instrument. | int(1) |
| 168  | EffectiveTime | N | — | The order submission time in GMT in the format *YYYYMMDD-hh:mm:ss or YYYYMMDD-hh:mm:ss.sss*.
For algo orders, the value of this field indicates, he absolute time in GMT at which the algo should start execution. If this field is not specified and `ExecEffPeriod` (#7564) is not specified, the algo starts execution immediately. If this field is specified and the time value is in the past, the algo starts execution immediately. | UTCTimestamp(21) |
| 7556  | ExecEndTime | N | — | Absolute time in GMT at which the algo should stop executing. If this tag is not specified and `ExecEndPeriod` (#7565) is not specified, the order expires based on the value of the `TimeInForce` (#59) field. | UTCTimestamp(21) |
| 7560  | AlgoParameters | N | — | The algo parameters represented as key/value pairs with the tilde character (~) separating the parameter key from the parameter value and each key/value pair delimited by a space. For example, the value “SI~01:00:00 SMI~00:30:00 SIR~Y AE~1” indicates “Slice interval = 1 hour, Minimum slice interval = 30 minutes, Slice interval randomized between 30 minutes (SMI) and 1 hour (SI), At expiration fill the remainder at market”.
This field is required when `ExecInst` (#18)=ST. | MultipleValueString(5) |
| → | AE | ActnOrdrExpr | N | 1=Fill @ Market
2=Cancel Order | Action to be taken at the expiration of the order. If this tag is not specified, the order is canceled at expiration. | char(1) |
| → | SFOK | SlcFillOrKill | N | Y=FOK
N=IOC (default) | Determines how slices are executed.
Y=Slices must be filled completely by a single fill from a provider or canceled. This parameter is used only if the slice size (SS, SlcSize) is fixed.
N=Partial fills allowed. | Boolean(1) |
| → | SI | SlcIntrvl | C | — | Required for TWAP orders. Relative time between two slices specified in the format *hh:mm:ss.sss*. This field is required when `ExecInst` (#18)=ST. | UTCTimeOnly(14) |
| → | SIR | SlcIntrvlRndmzr | N | Y=Slice interval randomized
N=Slice interval not randomized | Randomization enabled (Y)/disabled (N). If enabled, the order managed system randomly selects a slice interval between SlcIntrvl (SI) and slice interval and SlcMinIntrvl (SMI). | Boolean(1) |
| → | SMI | SlcMinIntrvl | C | — | Required for TWAP orders. Minimum slice interval specified in the format *hh:mm:ss.sss*. Applicable if the SlcIntrvlRndmzr (SIR) parameter is true. This field is required when `ExecInst` (#18)=ST. | UTCTimeOnly(14) |
| → | SRS | SlcRegularSize | N | — | If this parameter is specified, the slice size is rounded to a multiple of this value. If not specified, the behavior defaults to the system configuration. Contact your Integral Technical Account Manager to configure the default slice size. | Qty(20) |
| → | SS | SlcSize | N | — | Size of each slice. If the slice size is not specified, the size is chosen based on the TOBPercent (TOBP) parameter. | Qty(20) |
| → | SSR | SlcSizeRndmzr | N | Y=Slice size randomized
N=Slice size not randomized | Randomization enabled (Y)/disabled (N) flag. If enabled, the order management system randomizes the slice size between SlcRegularSize (SRS) and SlcSize (SS) or, if TOBPercent (TOBP) is specified, between the calculated top-of-book amount and SlcSize (SS). | Boolean(1) |
| → | TOBP | TOBPercent | N | — | Determines how the slice size varies, calculated as a percentage of the top-of-book (TOB) size. For example, a value of 0.5 indicates 50% of TOB size. A value of 1.2 indicates 120% of TOB size. If SlcSizeRndmzr (SSR) is true, then the slice size varies between SlcRegularSize (SRS) and the size calculated with the value of this parameter. If this parameter is not specified, the slice size is fixed. | float(20) |
| 7561  | AlgoName | N | — | This field is used with algo orders (`ExecInst` (#18)=ST). A free-format string provided to record the algo employed by the order. The value of this field is not validated and has no effect on algo functionality. | String(30) |
| 7564  | ExecEffPeriod | N | — | Relative time at which the algo should start execution specified in the format *hh:mm:ss.sss*. If this tag is not specified and `EffectiveTime` (#168) is not specified, the algo starts executing immediately. | UTCTimeOnly(14) |
| 7565  | ExecEndPeriod | N | — | Relative time at which the algo should stop execution specified in the format *hh:mm:ss.sss*. If this tag is not specified and `ExecEndTime` (#7556) is not specified, the order expires based on the value of the `TimeInForce` (#59) field. | UTCTimeOnly(14) |
| <Standard trailer>  | Y | — | — | — |


#### Fill

Execution Report format: fill 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=8 | — |
| 116  | OnBehalfOfSubID | C | — | Unique identifier of the liquidity provider associated with the fill. Not populated by default. You must contact your Integral Technical Account Manager to enable this field. When enabled, it is populated if `ExecType` (#150)=F (Trade). | String(20) |
| 37  | OrderID | Y | — | Unique identifier for the order assigned by Integral. | String(20) |
| 11  | ClOrdID | Y | — | Unique identifier for the order assigned by the customer. | String(11) |
| 17  | ExecID | Y | — | Unique identifier of execution message as assigned by Integral. Populated if `ExecType` (#150)=F (Trade). | String(20) |
| 375  | ContraBroker | C | — | Identifies the executing broker.
Required if `ExecType` (#150)=F (Trade). | String(20) |
| 150  | ExecType | Y | F=Trade | Describes the purpose of the execution report. | char(1) |
| 39  | OrdStatus | Y | 1=Partially Filled
2=Filled | Identifies if the order is partially filled or completely filled. | char(1) |
| 64  | SettlDate | C | — | Trade settlement date
Required if `ExecType` (#150)=F (Trade). | LocalMktDate(8) |
| 55  | Symbol | Y | — | Currency pair for the order | String(35) |
| 54  | Side | Y | 1=Buy
2=Sell | 1 (Buy): The customer buys `Currency` (#15).
2 (Sell): The customer sells `Currency` (#15).
For FX swap orders, this is the side of the far leg. | char(1) |
| 38  | OrderQty | Y | — | FX spot: Amount to be traded on the order
FX swap: Near-leg amount to be traded | Qty(20) |
| 40  | OrdType | Y | 2=Limit
1=Market or Market Range
3=Stop
4=Stop Limit
D=Previously quoted | Type of order | char(1) |
| 44  | Price | N | — | Specifies the limit price for limit orders `OrdType` (#40)=2 and Pegged orders `OrdType` (#40)=P.
This field is not required for market orders (`OrdType` (#40)=1).
FX spot: The execution price or limit price.
FX swap: The near-leg execution price or limit priced the receiving parties.
Stop limit orders: The limit price.
Do not use this field to determine the price of a fill. Use `LastPx` (#31) instead. This should be the same value as the one received from the associated New Order - Single message. | Price(20) |
| 15  | Currency | Y(API) | — | Identifies currency used for amount | Currency(3) |
| 167  | SecurityType | N | FOR=Foreign Exchange Contract | Indicates type of security | String(4) |
| 59  | TimeInForce | Y | 0=DAY
1=GTC (Good Till Cancel)
3=IOC (Immediate Or Cancel)
4=FOK (Fill Or Kill)
6=GTD (Good Till Date/Time) | Specifies how long the order remains in effect | char(1) |
| 194  | LastSpotRate | N | — | FX spot: Not applicable.
FX outright: Spot rate
FX swap: Near-leg spot rate | Price(20) |
| 31  | LastPx | C | — | Price of this (last) fill. Required if `ExecType` (#150)=F (Trade).
FX spot, outright: Price at which the current or last fill was made.
FX swap: Near-leg price at which the current or last fill was made. | Price(20) |
| 32  | LastQty | C | — | Quantity bought/sold on this (last) fill. Required if `ExecType` (#150)=F (Trade).
FX spot, outright: Amount of the current or last fill.
FX swap: Near-leg amount of the current or last fill. | Qty(20) |
| 151  | LeavesQty | Y | — | Unfilled amount for the order or quantity available for further execution. | Qty(20) |
| 14  | CumQty | Y | — | Currently executed quantity for the order. | Qty(20) |
| 6  | AvgPx | Y | — | Calculated average price for all fills on this order. | Price(20) |
| 75  | TradeDate | C | — | Indicates the business date for the trade referenced in this message. Required if `ExecType` (#150)=F (Trade). | LocalMktDate(8) |
| 119  | SettlCurrAmt | C | — | Amount of the fill expressed in the settlement currency. Required if `ExecType` (#150)=F (Trade).
FX spot, outright: Settled amount in terms of settlement currency specified by the `SettlCurrency` (#120) field.
FX swap: Near-leg settled amount in terms of settlement currency specified by the `SettlCurrency` (#120) field. | Amt(20) |
| 120  | SettlCurrency | N | — | Settlement currency. Required if `ExecType` (#150)=F (Trade). | Currency(3) |
| 60  | TransactTime | Y | — | Time the transaction represented by this execution report occurred. | UTCTimestamp(21) |
| 110  | MinQty | N | — | Minimum fill quantity for an order | Qty(20) |
| 210  | MaxShow | N | — | Maximum quantity of the order shown to other customers.
If not specified, then the entire order amount is shown to other customers.
The value of this tag must be between 1 and the value in `OrderQty` (#38). | Qty(20) |
| 211  | PegOffsetValue | C | — | Allowable slippage in pips for market range orders. For example, the value 1.0 equals 1 pip, which EUR/USD is 0.0001.
This field is left empty or not included for market orders. | float(10) |
| 192  | OrderQty2 | C | — | FX spot, outright: Not applicable.
FX swap: Far-leg “Total Intended Order Quantity” (including the amount already filled for this chain of orders) expressed in the dealt currency. | Qty(20) |
| 193  | SettlDate2 | C | * Tenor: See [Supported tenors](#supported-tenors).
* Broken date

 | FX spot, outright: Not applicable
FX swap: The far leg value date
The field contains either standard tenor symbol or a broken date in the format *YYYYMMDD*. | * Broken date: LocalMktDate(10)
* Tenor: String(30)

 |
| 195  | LastForwardPoints | N | — | FX spot: Not applicable.
FX outright: Forward points
FX swap: Near-leg forward points | PriceOffset(20) |
| 631  | MidPx | N | — | The near-leg all-in mid price. If a provider sends only mid swap points instead of near and far mid prices separately, this field is empty or 0 (zero). | Price(20) |
| 7631  | MidPxFl | N | — | The far-leg all-in mid price. If a provider sends only mid swap points instead of near and far mid prices separately, this field contains the swap points. | Price(20) |
| 640  | Price2 | N | — | This should be the same value as the one received from the associated New Order - Single message.
FX spot, outright: Not applicable.
FX swap: Far-leg execution price. | Qty(20) |
| 641  | LastForwardPoints2 | N | — | FX spot: Not applicable.
FX outright: Not applicable.
FX swap: Far-leg forward points | PriceOffset(20) |
| 7541  | LastPx2 | N | — | FX spot, outright: Not applicable.
FX swap: Far-leg price at which the current or last fill was made. | Price(20) |
| 7542  | LastSpotRate2 | N | — | FX spot, outright: Not applicable.
FX swap: Far-leg spot rate. Only sent under very specific conditions for RFS order rejections. | Price(20) |
| 7543  | LeavesQty2 | N | — | FX spot, outright: Not applicable.
FX swap: Far-leg open amount | Qty(20) |
| 7544  | CumQty2 | N | — | FX spot, outright: Not applicable.
FX swap: Far-leg total filled amount. If the `ExecType` (#150) field is “2”, the value of this field is the same as the `OrderQty` (#38) field. If the `ExecType` (#150) field is “8”, the value of this field is “0” (zero). | Qty(20) |
| 7545  | SettlCurrAmt2 | N | — | FX spot, outright: Settled amount in terms of settlement currency specified by the `SettlCurrency` (#120) field.
FX swap: Far-leg settled amount in terms of settlement currency specified by the `SettlCurrency` (#120) field. | Amt(20) |
| 460  | Product | N | 4=CURRENCY | Identifies the type of the instrument. | int(1) |
| 168  | EffectiveTime | N | — | The order submission time in GMT in the format *YYYYMMDD-hh:mm:ss* or *YYYYMMDD-hh:mm:ss.sss*.
For algo orders, the value of this field indicates, he absolute time in GMT at which the algo should start execution. If this field is not specified and `ExecEffPeriod` (#7564) is not specified, the algo starts execution immediately. If this field is specified and the time value is in the past, the algo starts execution immediately. | UTCTimestamp(21) |
| 7556  | ExecEndTime | N | — | Absolute time in GMT at which the algo should stop executing. If this tag is not specified and `ExecEndPeriod` (#7565) is not specified, the order expires based on the value of the `TimeInForce` (#59) field. | UTCTimestamp(21) |
| 7560  | AlgoParameters | N | — | The algo parameters represented as key/value pairs with the tilde character (~) separating the parameter key from the parameter value and each key/value pair delimited by a space. For example, the value “SI~01:00:00 SMI~00:30:00 SIR~Y AE~1” indicates “Slice interval = 1 hour, Minimum slice interval = 30 minutes, Slice interval randomized between 30 minutes (SMI) and 1 hour (SI), At expiration fill the remainder at market”.
This field is required when `ExecInst` (#18)=ST. | MultipleValueString(5) |
| → | AE | ActnOrdrExpr | N | 1=Fill @ Market
2=Cancel Order | Action to be taken at the expiration of the order. If this tag is not specified, the order is canceled at expiration. | char(1) |
| → | SFOK | SlcFillOrKill | N | Y=FOK
N=IOC (default) | Determines how slices are executed.
Y=Slices must be filled completely by a single fill from a provider or canceled. This parameter is used only if the slice size (SS, SlcSize) is fixed.
N=Partial fills allowed. | Boolean(1) |
| → | SI | SlcIntrvl | C | — | Required for TWAP orders. Relative time between two slices specified in the format *hh:mm:ss.sss*. This field is required when `ExecInst` (#18)=ST. | UTCTimeOnly(14) |
| → | SIR | SlcIntrvlRndmzr | N | Y=Slice interval randomized
N=Slice interval not randomized | Randomization enabled (Y)/disabled (N). If enabled, the order managed system randomly selects a slice interval between SlcIntrvl (SI) and slice interval and SlcMinIntrvl (SMI). | Boolean(1) |
| → | SMI | SlcMinIntrvl | C | — | Required for TWAP orders. Minimum slice interval specified in the format *hh:mm:ss.sss*. Applicable if the SlcIntrvlRndmzr (SIR) parameter is true. This field is required when `ExecInst` (#18)=ST. | UTCTimeOnly(14) |
| → | SRS | SlcRegularSize | N | — | If this parameter is specified, the slice size is rounded to a multiple of this value. If not specified, the behavior defaults to the system configuration. Contact your Integral Technical Account Manager to configure the default slice size. | Qty(20) |
| → | SS | SlcSize | N | — | Size of each slice. If the slice size is not specified, the size is chosen based on the TOBPercent (TOBP) parameter. | Qty(20) |
| → | SSR | SlcSizeRndmzr | N | Y=Slice size randomized
N=Slice size not randomized | Randomization enabled (Y)/disabled (N) flag. If enabled, the order management system randomizes the slice size between SlcRegularSize (SRS) and SlcSize (SS) or, if TOBPercent (TOBP) is specified, between the calculated top-of-book amount and SlcSize (SS). | Boolean(1) |
| → | TOBP | TOBPercent | N | — | Determines how the slice size varies, calculated as a percentage of the top-of-book (TOB) size. For example, a value of 0.5 indicates 50% of TOB size. A value of 1.2 indicates 120% of TOB size. If SlcSizeRndmzr (SSR) is true, then the slice size varies between SlcRegularSize (SRS) and the size calculated with the value of this parameter. If this parameter is not specified, the slice size is fixed. | float(20) |
| 7561  | AlgoName | N | — | This field is used with algo orders (`ExecInst` (#18)=ST). A free-format string provided to record the algo employed by the order. The value of this field is not validated and has no effect on algo functionality. | String(30) |
| 7564  | ExecEffPeriod | N | — | Relative time at which the algo should start execution specified in the format *hh:mm:ss.sss*. If this tag is not specified and `EffectiveTime` (#168) is not specified, the algo starts executing immediately. | UTCTimeOnly(14) |
| 7565 | ExecEndPeriod | N | — | Relative time at which the algo should stop execution specified in the format *hh:mm:ss.sss*. If this tag is not specified and `ExecEndTime` (#7556) is not specified, the order expires based on the value of the `TimeInForce` (#59) field. | UTCTimeOnly(14) |
| <Standard trailer>  | Y | — | — | — |


#### Fill (block trades)

Execution Report format: fill, status (block trades) 

| Tag  | Field name | Req'd | Valid values | Description | Type(Length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=8 | — |
| 34  | MsgSeqNum | Y | — | Integer message sequence number. | SeqNum |
| 49  | SenderCompID | Y | — | The Integral server's ID. | String(20) |
| 50  | SenderSubID | C | — | The liquidity provider organization's legal entity for provider-originated messages, such as trade verification. Populated if `ExecType` (#150)=F (Trade). | String(20) |
| 52  | SendingTime | Y | — | Time of message transmission. | UTCTimestamp(21) |
| 56  | TargetCompID | Y | — | Your organization's ID. | String(20) |
| 57  | TargetSubID | C | — | The originating legal entity or trading party ID if you are dealing directly with the liquidity provider.
Not included in the message if you are dealing with the liquidity provider as a facilitator on behalf of the customer. | String(20) |
| 115  | OnBehalfOfCompID | C | — | ID of the contra organization. Populated if `ExecType` (#150)=F (Trade). | String(20) |
| 116  | OnBehalfOfSubID | N | — | When the stream LP trading workflow is used, the organization ID of the stream LP is sent in this field. | String(20) |
| 128  | DeliverToCompID | C | — | The customer organization's ID if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise, this field is not included. | String(20) |
| 129  | DeliverToSubID | C | — | The ID of your customer's trading party if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise, this field is not included in the message. | String(20) |
| 11  | ClOrdID | Y | — | Unique identifier for the order assigned by the customer. It is the same value as sent by the client in the New Order - Single message or Order Cancel Request message. | String(11) |
| 6  | AvgPx | Y | — | Calculated average price for all fills on this order. | Price(20) |
| 31  | LastPx | Y | — | Price of this (last)fill. Required if `ExecType` (#150)=F (Trade). Use this value for the price of a single fill. | Price(20) |
| 17  | ExecID | Y | — | Unique identifier of execution message as assigned by Integral. Required if `ExecType` (#150)=F (Trade). | String(20) |
| 18  | ExecInst | Y | B=Match with all available liquidity
B not specified=No cross
P=Best price
P not specified=Price at depth
9=Bid trigger
R=At rate
W=VWAP | How your order is executed. | char(10) |
| 37  | OrderID | Y | — | Unique identifier for the order assigned by Integral. | String(20) |
| 38  | OrderQty | Y | — | Amount to be traded on the order | Qty(20) |
| 39  | OrdStatus | Y | 1=Partially Filled
2=Fully Filled | Identifies if the order is partially filled or completely filled. | char(1) |
| 40  | OrdType | Y | 1=Market
2=Limit | Type of order | char(1) |
| 14  | CumQty | Y | — | Currently executed amount for the order. | Qty(20) |
| 32  | LastQty | Y | — | Amount of this fill | Qty(20) |
| 54  | Side | Y | 1=BUY
2=SELL | This field specifies the net direction of the dealt currency based on all allocation amounts. | int(1) |
| 55  | Symbol | Y | — | Order's currency pair. | String(7) |
| 59  | TimeInForce | C | 0=DAY
1=GTC (Good Till Cancel)
3=IOC (Immediate Or Cancel)
4=FOK (Fill Or Kill)
6=GTD/GTT (Good Till Date/Time) | The order's time in force. Only required when submitting a GTD/GTT order (TimeInForce (#59=6). | char(1) |
| 60  | TransactTime | Y | — | The business execution timestamp (the date and time of the order match). | UTCTimestamp(21) |
| 64  | SettlDate | Y | — | The spot settlement date in the format *YYYYMMDD*. | LocalMktDate(10) |
| 75  | TradeDate | Y | — | The business date in the format *YYYYMMDD* for the trade referenced in this message. Required if `ExecType` (#150)=F (Trade). | LocalMktDate(8) |
| 119  | SettlCurrAmt | Y | — | Amount of the fill expressed in the settlement currency. Required if `ExecType` (#150)=F (Trade) | Amt(20) |
| 120  | SettlCurrency | Y | — | Settlement currency. Required if `ExecType` (#150)=F (Trade). | Currency(3) |
| 150  | ExecType | Y | F=Trade
I=Order Status
2=Fill | Describes the purpose of the execution report. | char(1) |
| 151  | LeavesQty | Y | — | Unfilled amount for the order or quantity available for further execution. | Qty(20) |
| 167  | SecurityType | Y(API) | FOR=Foreign Exchange Contract | Indicates type of security | String(4) |
| 194  | LastSpotRate | N | — | Spot Rate for this fill | Price(20) |
| 460  | Product | Y | 4=CURRENCY | Identifies the type of the instrument. | int(1) |
| Block trade legs  |
| 555  | NoLegs | Y | — | Number of repeating groups for multi-leg trade details that represent a trade leg in the block of trades. | NumInGroup(2) |
| → | 600 | LegSymbol | Y | — | The leg's currency pair | String(35) |
| → | 624 | LegSide | Y | 1=Buy
2=Sell | Side of the leg as per the dealt currency. | char(1) |
| → | 556 | LegCurrency | Y | — | The dealt currency of the leg | String(3) |
| → | 687 | LegQty | Y | — | This leg's fill amount | Qty(20) |
| → | 654 | LegRefID | Y | — | The unique ID of the trade represented by the leg in the block. | String(20) |
| → | 566 | LegPrice | N | — | All-in rate of the executed trade | Price(20) |
| → | 588 | LegSettDate | Y | — | Value date of the leg in the format *YYYYMMDD*. | String(8) |
| → | 1893 | LegExecID | N | — | The ID of the executed trade | String(20) |


#### Order reject

Execution Report format: reject 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=8 | — |
| 37  | OrderID | Y | — | Unique identifier for the order assigned by Integral. | String(20) |
| 11  | ClOrdID | Y | — | Unique identifier for the order assigned by the customer. | String(11) |
| 150  | ExecType | Y | 8=Rejected | Describes the purpose of the execution report. | char(1) |
| 39  | OrdStatus | Y | 8=Rejected | Describes the current state of the order. | char(1) |
| 103  | OrdRejReason | C | — | Reason the order status report request is being rejected.
Required when `ExecType` (#150)=8 (for example, when an order is rejected). | int(4) |
| 58  | Text | C | — | The rejection reason. | String(100) |
| 378  | ExecRestatementReason | N | — | Contains the rejection reason when the rejection is caused by an Internal Rejection. | String(100) |
| 55  | Symbol | Y | — | Currency pair for the order | String(35) |
| 54  | Side | Y | 1=Buy
2=Sell | 1 (Buy): The customer buys `Currency` (#15).
2 (Sell): The customer sells `Currency` (#15).
For FX swap orders, this is the side of the far leg. | char(1) |
| 38  | OrderQty | Y | — | FX spot: Amount to be traded on the order
FX swap: Near-leg amount to be traded | Qty(20) |
| 40  | OrdType | Y | 2=Limit
1=Market or Market Range
3=Stop
4=Stop Limit
D=Previously quoted | Type of order | char(1) |
| 44  | Price | N | — | Specifies the limit price for limit orders `OrdType` (#40)=2 and Pegged orders `OrdType` (#40)=P.
This field is not required for market orders (`OrdType` (#40)=1).
FX spot: The execution price or limit price.
FX swap: The near-leg execution price or limit priced the receiving parties.
Stop limit orders: The limit price. | Price(20) |
| 15  | Currency | Y(API) | — | Identifies currency used for amount | Currency(3) |
| 167  | SecurityType | N | FOR=Foreign Exchange Contract | Indicates type of security | String(4) |
| 59  | TimeInForce | Y | 0=DAY
1=GTC (Good Till Cancel)
3=IOC (Immediate Or Cancel)
4=FOK (Fill Or Kill)
6=GTD (Good Till Date/Time) | Specifies how long the order remains in effect | char(1) |
| 31  | LastPx | C | 0 (zero) | Price for the fill. Populated if `ExecType` (#150)=F (Trade), 0 (zero) otherwise.
FX spot, outright: Price at which the current or last fill was made.
FX swap: Near-leg price at which the current or last fill was made. | Price(20) |
| 32  | LastQty | C | 0 (zero) | Quantity for the fill. Populated if `ExecType` (#150)=F (Trade), 0 (zero) otherwise.
FX spot, outright: Amount of the current or last fill.
FX swap: Near-leg amount of the current or last fill. | Qty(20) |
| 151  | LeavesQty | Y | 0 (zero) | Quantity available for further execution. Always 0 (zero) for rejected orders. | Qty(20) |
| 14  | CumQty | Y | 0 (zero) | Currently executed quantity for the order.
Always 0 (zero) for rejected orders. | Qty(20) |
| 6  | AvgPx | Y | 0 (zero) | Calculated average price for all fills on this order.
Always 0 (zero) for rejected orders. | Price(20) |
| 60  | TransactTime | Y | — | Time the transaction represented by this execution report occurred. | UTCTimestamp(21) |
| 110  | MinQty | N | — | Minimum fill quantity for an order | Qty(20) |
| 210  | MaxShow | N | — | Maximum quantity of the order shown to other customers.
If not specified, then the entire order amount is shown to other customers.
The value of this tag must be between 1 and the value in `OrderQty` (#38). | Qty(20) |
| 211  | PegOffsetValue | C | — | Allowable slippage in pips for market range orders. For example, the value 1.0 equals 1 pip, which EUR/USD is 0.0001.
This field is left empty or not included for market orders. | float(10) |
| 192  | OrderQty2 | C | — | FX spot, outright: Not applicable.
FX swap: Far-leg “Total Intended Order Quantity” (including the amount already filled for this chain of orders) expressed in the dealt currency. | Qty(20) |
| 193  | SettlDate2 | C | * Tenor: See [Supported tenors](#supported-tenors).
* Broken date

 | FX spot, outright: Not applicable
FX swap: The far leg value date
The field contains either standard tenor symbol or a broken date in the format *YYYYMMDD*. | * Broken date: LocalMktDate(10)
* Tenor: String(30)

 |
| 195  | LastForwardPoints | N | — | FX spot: Not applicable.
FX outright: Forward points
FX swap: Near-leg forward points | PriceOffset(20) |
| 631  | MidPx | N | — | The near-leg all-in mid price. If a provider sends only mid swap points instead of near and far mid prices separately, this field is empty or 0 (zero). | Price(20) |
| 7631  | MidPxFl | N | — | The far-leg all-in mid price. If a provider sends only mid swap points instead of near and far mid prices separately, this field contains the swap points. | Price(20) |
| 640  | Price2 | N | — | This should be the same value as the one received from the associated New Order - Single message.
FX spot, outright: Not applicable.
FX swap: Far-leg execution price. | Qty(20) |
| 641  | LastForwardPoints2 | N | — | FX spot: Not applicable.
FX outright: Not applicable.
FX swap: Far-leg forward points | PriceOffset(20) |
| 7541  | LastPx2 | N | — | FX spot, outright: Not applicable.
FX swap: Far-leg price at which the current or last fill was made. | Price(20) |
| 7542  | LastSpotRate2 | N | — | FX spot, outright: Not applicable.
FX swap: Far-leg spot rate. Only sent under very specific conditions for RFS order rejections. | Price(20) |
| 7543  | LeavesQty2 | N | — | FX spot, outright: Not applicable.
FX swap: Far-leg open amount | Qty(20) |
| 7544  | CumQty2 | N | — | FX spot, outright: Not applicable.
FX swap: Far-leg total filled amount. If the `ExecType` (#150) field is “2”, the value of this field is the same as the `OrderQty` (#38) field. If the `ExecType` (#150) field is “8”, the value of this field is “0” (zero). | Qty(20) |
| 7545  | SettlCurrAmt2 | N | — | FX spot, outright: Settled amount in terms of settlement currency specified by the `SettlCurrency` (#120) field.
FX swap: Far-leg settled amount in terms of settlement currency specified by the `SettlCurrency` (#120) field. | Amt(20) |
| 460  | Product | N | 4=CURRENCY | Identifies the type of the instrument. | int(1) |
| 168  | EffectiveTime | N | — | The order submission time in GMT in the format *YYYYMMDD-hh:mm:ss* or *YYYYMMDD-hh:mm:ss.sss*.
For algo orders, the value of this field indicates, he absolute time in GMT at which the algo should start execution. If this field is not specified and `ExecEffPeriod` (#7564) is not specified, the algo starts execution immediately. If this field is specified and the time value is in the past, the algo starts execution immediately. | UTCTimestamp(21) |
| 7556  | ExecEndTime | N | — | Absolute time in GMT at which the algo should stop executing. If this tag is not specified and `ExecEndPeriod` (#7565) is not specified, the order expires based on the value of the `TimeInForce` (#59) field. | UTCTimestamp(21) |
| 7560  | AlgoParameters | N | — | The algo parameters represented as key/value pairs with the tilde character (~) separating the parameter key from the parameter value and each key/value pair delimited by a space. For example, the value “SI~01:00:00 SMI~00:30:00 SIR~Y AE~1” indicates “Slice interval = 1 hour, Minimum slice interval = 30 minutes, Slice interval randomized between 30 minutes (SMI) and 1 hour (SI), At expiration fill the remainder at market”.
This field is required when `ExecInst` (#18)=ST. | MultipleValueString(5) |
| → | AE | ActnOrdrExpr | N | 1=Fill @ Market
2=Cancel Order | Action to be taken at the expiration of the order. If this tag is not specified, the order is canceled at expiration. | char(1) |
| → | SFOK | SlcFillOrKill | N | Y=FOK
N=IOC (default) | Determines how slices are executed.
Y=Slices must be filled completely by a single fill from a provider or canceled. This parameter is used only if the slice size (SS, SlcSize) is fixed.
N=Partial fills allowed. | Boolean(1) |
| → | SI | SlcIntrvl | C | — | Required for TWAP orders. Relative time between two slices specified in the format *hh:mm:ss.sss*. This field is required when `ExecInst` (#18)=ST. | UTCTimeOnly(14) |
| → | SIR | SlcIntrvlRndmzr | N | Y=Slice interval randomized
N=Slice interval not randomized | Randomization enabled (Y)/disabled (N). If enabled, the order managed system randomly selects a slice interval between SlcIntrvl (SI) and slice interval and SlcMinIntrvl (SMI). | Boolean(1) |
| → | SMI | SlcMinIntrvl | C | — | Required for TWAP orders. Minimum slice interval specified in the format *hh:mm:ss.sss*. Applicable if the SlcIntrvlRndmzr (SIR) parameter is true. This field is required when `ExecInst` (#18)=ST. | UTCTimeOnly(14) |
| → | SRS | SlcRegularSize | N | — | If this parameter is specified, the slice size is rounded to a multiple of this value. If not specified, the behavior defaults to the system configuration. Contact your Integral Technical Account Manager to configure the default slice size. | Qty(20) |
| → | SS | SlcSize | N | — | Size of each slice. If the slice size is not specified, the size is chosen based on the TOBPercent (TOBP) parameter. | Qty(20) |
| → | SSR | SlcSizeRndmzr | N | Y=Slice size randomized
N=Slice size not randomized | Randomization enabled (Y)/disabled (N) flag. If enabled, the order management system randomizes the slice size between SlcRegularSize (SRS) and SlcSize (SS) or, if TOBPercent (TOBP) is specified, between the calculated top-of-book amount and SlcSize (SS). | Boolean(1) |
| → | TOBP | TOBPercent | N | — | Determines how the slice size varies, calculated as a percentage of the top-of-book (TOB) size. For example, a value of 0.5 indicates 50% of TOB size. A value of 1.2 indicates 120% of TOB size. If SlcSizeRndmzr (SSR) is true, then the slice size varies between SlcRegularSize (SRS) and the size calculated with the value of this parameter. If this parameter is not specified, the slice size is fixed. | float(20) |
| 7561  | AlgoName | N | — | This field is used with algo orders (`ExecInst` (#18)=ST). A free-format string provided to record the algo employed by the order. The value of this field is not validated and has no effect on algo functionality. | String(30) |
| 7564  | ExecEffPeriod | N | — | Relative time at which the algo should start execution specified in the format *hh:mm:ss.sss*. If this tag is not specified and `EffectiveTime` (#168) is not specified, the algo starts executing immediately. | UTCTimeOnly(14) |
| 7565  | ExecEndPeriod | N | — | Relative time at which the algo should stop execution specified in the format *hh:mm:ss.sss*. If this tag is not specified and `ExecEndTime` (#7556) is not specified, the order expires based on the value of the `TimeInForce` (#59) field. | UTCTimeOnly(14) |
| <Standard trailer>  | Y | — | — | — |


#### Order cancel or expire

Execution Report format: cancel or expire 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=8 | — |
| 37  | OrderID | Y | — | Unique identifier for the order assigned by Integral. | String(20) |
| 11  | ClOrdID | Y | — | Unique identifier for the order assigned by the customer. | String(11) |
| 150  | ExecType | Y | 4=Canceled
6=Pending Cancel
C=Expired | Describes the purpose of the execution report. | char(1) |
| 39  | OrdStatus | Y | 4=Canceled
6=Pending Cancel
C=Expired | Describes the current state of the order. | char(1) |
| 55  | Symbol | Y | — | Currency pair for the order | String(35) |
| 54  | Side | Y | 1=Buy
2=Sell | 1 (Buy): The customer buys `Currency` (#15).
2 (Sell): The customer sells `Currency` (#15).
For FX swap orders, this is the side of the far leg. | char(1) |
| 38  | OrderQty | Y | — | FX spot: Amount to be traded on the order
FX swap: Near-leg amount to be traded | Qty(20) |
| 40  | OrdType | Y | 2=Limit
1=Market or Market Range
3=Stop
4=Stop Limit
D=Previously quoted | Type of order | char(1) |
| 44  | Price | C | — | Specifies the limit price for limit orders `OrdType` (#40)=2 and Pegged orders `OrdType` (#40)=P.
This field is not required for market orders (`OrdType` (#40)=1).
FX spot: The execution price or limit price.
FX swap: The near-leg execution price or limit priced the receiving parties.
Stop limit orders: The limit price.
Required for limit orders (`OrdType` (#40)=2) and optional for Pegged orders (`OrdType` (#40)=P). | Price(20) |
| 15  | Currency | Y(API) | — | Identifies currency used for amount | Currency(3) |
| 167  | SecurityType | N | FOR=Foreign Exchange Contract | Indicates type of security | String(4) |
| 59  | TimeInForce | Y | 0=DAY
1=GTC (Good Till Cancel)
3=IOC (Immediate Or Cancel)
4=FOK (Fill Or Kill)
6=GTD (Good Till Date/Time) | Specifies how long the order remains in effect | char(1) |
| 151  | LeavesQty | Y | 0 (zero) | Quantity available for further execution. Always 0 (zero) for expired orders. | Qty(20) |
| 14  | CumQty | Y | — | Currently executed quantity for the order. | Qty(20) |
| 6  | AvgPx | Y | — | Calculated average price for all fills on this order. | Price(20) |
| 60  | TransactTime | Y | — | Time the transaction represented by this execution report occurred. | UTCTimestamp(21) |
| 110  | MinQty | N | — | Minimum fill quantity for an order | Qty(20) |
| 210  | MaxShow | N | — | Maximum quantity of the order shown to other customers.
If not specified, then the entire order amount is shown to other customers.
The value of this tag must be between 1 and the value in `OrderQty` (#38). | Qty(20) |
| 211  | PegOffsetValue | C | — | Allowable slippage in pips for market range orders. For example, the value 1.0 equals 1 pip, which EUR/USD is 0.0001.
This field is left empty or not included for market orders. | float(10) |
| 192  | OrderQty2 | C | — | FX spot, outright: Not applicable.
FX swap: Far-leg “Total Intended Order Quantity” (including the amount already filled for this chain of orders) expressed in the dealt currency. | Qty(20) |
| 193  | SettlDate2 | C | * Tenor: See [Supported tenors](#supported-tenors).
* Broken date

 | FX spot, outright: Not applicable
FX swap: The far leg value date
The field contains either standard tenor symbol or a broken date in the format *YYYYMMDD*. | * Broken date: LocalMktDate(10)
* Tenor: String(30)

 |
| 195  | LastForwardPoints | N | — | FX spot: Not applicable.
FX outright: Forward points
FX swap: Near-leg forward points | PriceOffset(20) |
| 631  | MidPx | N | — | The near-leg all-in mid price. If a provider sends only mid swap points instead of near and far mid prices separately, this field is empty or 0 (zero). | Price(20) |
| 7631  | MidPxFl | N | — | The far-leg all-in mid price. If a provider sends only mid swap points instead of near and far mid prices separately, this field contains the swap points. | Price(20) |
| 640  | Price2 | N | — | This should be the same value as the one received from the associated New Order - Single message.
FX spot, outright: Not applicable.
FX swap: Far-leg execution price. | Qty(20) |
| 641  | LastForwardPoints2 | N | — | FX spot: Not applicable.
FX outright: Not applicable.
FX swap: Far-leg forward points | PriceOffset(20) |
| 7541  | LastPx2 | N | — | FX spot, outright: Not applicable.
FX swap: Far-leg price at which the current or last fill was made. | Price(20) |
| 7542  | LastSpotRate2 | N | — | FX spot, outright: Not applicable.
FX swap: Far-leg spot rate. Only sent under very specific conditions for RFS order rejections. | Price(20) |
| 7543  | LeavesQty2 | N | — | FX spot, outright: Not applicable.
FX swap: Far-leg open amount | Qty(20) |
| 7544  | CumQty2 | N | — | FX spot, outright: Not applicable.
FX swap: Far-leg total filled amount. If the `ExecType` (#150) field is “2”, the value of this field is the same as the `OrderQty` (#38) field. If the `ExecType` (#150) field is “8”, the value of this field is “0” (zero). | Qty(20) |
| 7545  | SettlCurrAmt2 | N | — | FX spot, outright: Settled amount in terms of settlement currency specified by the `SettlCurrency` (#120) field.
FX swap: Far-leg settled amount in terms of settlement currency specified by the `SettlCurrency` (#120) field. | Amt(20) |
| 460  | Product | N | 4=CURRENCY | Identifies the type of the instrument. | int(1) |
| 168  | EffectiveTime | N | — | The order submission time in GMT in the format *YYYYMMDD-hh:mm:ss* or *YYYYMMDD-hh:mm:ss.sss*.
For algo orders, the value of this field indicates, he absolute time in GMT at which the algo should start execution. If this field is not specified and `ExecEffPeriod` (#7564) is not specified, the algo starts execution immediately. If this field is specified and the time value is in the past, the algo starts execution immediately. | UTCTimestamp(21) |
| 7556  | ExecEndTime | N | — | Absolute time in GMT at which the algo should stop executing. If this tag is not specified and `ExecEndPeriod` (#7565) is not specified, the order expires based on the value of the `TimeInForce` (#59) field. | UTCTimestamp(21) |
| 7560  | AlgoParameters | N | — | The algo parameters represented as key/value pairs with the tilde character (~) separating the parameter key from the parameter value and each key/value pair delimited by a space. For example, the value “SI~01:00:00 SMI~00:30:00 SIR~Y AE~1” indicates “Slice interval = 1 hour, Minimum slice interval = 30 minutes, Slice interval randomized between 30 minutes (SMI) and 1 hour (SI), At expiration fill the remainder at market”.
This field is required when `ExecInst` (#18)=ST. | MultipleValueString(5) |
| → | AE | ActnOrdrExpr | N | 1=Fill @ Market
2=Cancel Order | Action to be taken at the expiration of the order. If this tag is not specified, the order is canceled at expiration. | char(1) |
| → | SFOK | SlcFillOrKill | N | Y=FOK
N=IOC (default) | Determines how slices are executed.
Y=Slices must be filled completely by a single fill from a provider or canceled. This parameter is used only if the slice size (SS, SlcSize) is fixed.
N=Partial fills allowed. | Boolean(1) |
| → | SI | SlcIntrvl | C | — | Required for TWAP orders. Relative time between two slices specified in the format *hh:mm:ss.sss*. This field is required when `ExecInst` (#18)=ST. | UTCTimeOnly(14) |
| → | SIR | SlcIntrvlRndmzr | N | Y=Slice interval randomized
N=Slice interval not randomized | Randomization enabled (Y)/disabled (N). If enabled, the order managed system randomly selects a slice interval between SlcIntrvl (SI) and slice interval and SlcMinIntrvl (SMI). | Boolean(1) |
| → | SMI | SlcMinIntrvl | C | — | Required for TWAP orders. Minimum slice interval specified in the format *hh:mm:ss.sss*. Applicable if the SlcIntrvlRndmzr (SIR) parameter is true. This field is required when `ExecInst` (#18)=ST. | UTCTimeOnly(14) |
| → | SRS | SlcRegularSize | N | — | If this parameter is specified, the slice size is rounded to a multiple of this value. If not specified, the behavior defaults to the system configuration. Contact your Integral Technical Account Manager to configure the default slice size. | Qty(20) |
| → | SS | SlcSize | N | — | Size of each slice. If the slice size is not specified, the size is chosen based on the TOBPercent (TOBP) parameter. | Qty(20) |
| → | SSR | SlcSizeRndmzr | N | Y=Slice size randomized
N=Slice size not randomized | Randomization enabled (Y)/disabled (N) flag. If enabled, the order management system randomizes the slice size between SlcRegularSize (SRS) and SlcSize (SS) or, if TOBPercent (TOBP) is specified, between the calculated top-of-book amount and SlcSize (SS). | Boolean(1) |
| → | TOBP | TOBPercent | N | — | Determines how the slice size varies, calculated as a percentage of the top-of-book (TOB) size. For example, a value of 0.5 indicates 50% of TOB size. A value of 1.2 indicates 120% of TOB size. If SlcSizeRndmzr (SSR) is true, then the slice size varies between SlcRegularSize (SRS) and the size calculated with the value of this parameter. If this parameter is not specified, the slice size is fixed. | float(20) |
| 7561  | AlgoName | N | — | This field is used with algo orders (`ExecInst` (#18)=ST). A free-format string provided to record the algo employed by the order. The value of this field is not validated and has no effect on algo functionality. | String(30) |
| 7564  | ExecEffPeriod | N | — | Relative time at which the algo should start execution specified in the format *hh:mm:ss.sss*. If this tag is not specified and `EffectiveTime` (#168) is not specified, the algo starts executing immediately. | UTCTimeOnly(14) |
| 7565  | ExecEndPeriod | N | — | Relative time at which the algo should stop execution specified in the format *hh:mm:ss.sss*. If this tag is not specified and `ExecEndTime` (#7556) is not specified, the order expires based on the value of the `TimeInForce` (#59) field. | UTCTimeOnly(14) |
| <Standard trailer>  | Y | — | — | — |


#### Order status

Execution Report format: order status 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=8 | — |
| 37  | OrderID | Y | — | Unique identifier for the order assigned by Integral. | String(20) |
| 11  | ClOrdID | Y | — | Unique identifier for the order assigned by the customer. | String(11) |
| 150  | ExecType | Y | I=Order Status | Describes the purpose of the execution report. | char(1) |
| 39  | OrdStatus | Y | 0=New
1=Partially Filled
2=Filled
U=Undefined | Describes the current state of the order. | char(1) |
| 103  | OrdRejReason | C | 5=Unknown Order | Reason the order status report request is being rejected.
Required when `ExecType` (#150)=8 (for example, when an order is rejected). | int(4) |
| 58  | Text | C | — | The rejection reason. Present if the order could not be found. | String(100) |
| 378  | ExecRestatementReason | N | — | Contains the rejection reason when the rejection is caused by an Internal Rejection. | String(100) |
| 55  | Symbol | Y | — | Currency pair for the order | String(35) |
| 54  | Side | Y | 1=Buy
2=Sell | 1 (Buy): The customer buys `Currency` (#15).
2 (Sell): The customer sells `Currency` (#15).
For FX swap orders, this is the side of the far leg. | char(1) |
| 38  | OrderQty | Y | — | FX spot: Amount to be traded on the order
FX swap: Near-leg amount to be traded | Qty(20) |
| 40  | OrdType | Y | 2=Limit
1=Market or Market Range
3=Stop
4=Stop Limit
D=Previously quoted | Type of order | char(1) |
| 44  | Price | N | — | Specifies the limit price for limit orders `OrdType` (#40)=2 and Pegged orders `OrdType` (#40)=P.
This field is not required for market orders (`OrdType` (#40)=1).
FX spot: The execution price or limit price.
FX swap: The near-leg execution price or limit priced the receiving parties.
Stop limit orders: The limit price. | Price(20) |
| 15  | Currency | Y(API) | — | Identifies currency used for amount | Currency(3) |
| 167  | SecurityType | N | FOR=Foreign Exchange Contract | Indicates type of security | String(4) |
| 59  | TimeInForce | Y | 0=DAY
1=GTC (Good Till Cancel)
3=IOC (Immediate Or Cancel)
4=FOK (Fill Or Kill)
6=GTD (Good Till Date/Time) | Specifies how long the order remains in effect | char(1) |
| 151  | LeavesQty | Y | — | Unfilled amount for the order or quantity available for further execution. | Qty(20) |
| 14  | CumQty | Y | — | Currently executed quantity for the order. | Qty(20) |
| 6  | AvgPx | Y | — | Calculated average price for all fills on this order. | Price(20) |
| 60  | TransactTime | Y | — | Time the order status report acknowledgment was generated | UTCTimestamp(21) |
| 110  | MinQty | N | — | Minimum fill quantity for an order | Qty(20) |
| 790  | OrdStatusReqID | N | — | Contains the `ClOrdID` (#11) present in the Order Status Request. | String(11) |
| 210  | MaxShow | N | — | Maximum quantity of the order shown to other customers.
If not specified, then the entire order amount is shown to other customers.
The value of this tag must be between 1 and the value in `OrderQty` (#38). | Qty(20) |
| 211  | PegOffsetValue | C | — | Allowable slippage in pips for market range orders. For example, the value 1.0 equals 1 pip, which EUR/USD is 0.0001.
This field is left empty or not included for market orders. | float(10) |
| 192  | OrderQty2 | C | — | FX spot, outright: Not applicable.
FX swap: Far-leg “Total Intended Order Quantity” (including the amount already filled for this chain of orders) expressed in the dealt currency. | Qty(20) |
| 193  | SettlDate2 | C | * Tenor: See [Supported tenors](#supported-tenors).
* Broken date

 | FX spot, outright: Not applicable
FX swap: The far leg value date
The field contains either standard tenor symbol or a broken date in the format *YYYYMMDD*. | * Broken date: LocalMktDate(10)
* Tenor: String(30)

 |
| 195  | LastForwardPoints | N | — | FX spot: Not applicable.
FX outright: Forward points
FX swap: Near-leg forward points | PriceOffset(20) |
| 631  | MidPx | N | — | The near-leg all-in mid price. If a provider sends only mid swap points instead of near and far mid prices separately, this field is empty or 0 (zero). | Price(20) |
| 7631  | MidPxFl | N | — | The far-leg all-in mid price. If a provider sends only mid swap points instead of near and far mid prices separately, this field contains the swap points. | Price(20) |
| 640  | Price2 | N | — | This should be the same value as the one received from the associated New Order - Single message.
FX spot, outright: Not applicable.
FX swap: Far-leg execution price. | Qty(20) |
| 641  | LastForwardPoints2 | N | — | FX spot: Not applicable.
FX outright: Not applicable.
FX swap: Far-leg forward points | PriceOffset(20) |
| 7541  | LastPx2 | N | — | FX spot, outright: Not applicable.
FX swap: Far-leg price at which the current or last fill was made. | Price(20) |
| 7542  | LastSpotRate2 | N | — | FX spot, outright: Not applicable.
FX swap: Far-leg spot rate. Only sent under very specific conditions for RFS order rejections. | Price(20) |
| 7543  | LeavesQty2 | N | — | FX spot, outright: Not applicable.
FX swap: Far-leg open amount | Qty(20) |
| 7544  | CumQty2 | N | — | FX spot, outright: Not applicable.
FX swap: Far-leg total filled amount. If the `ExecType` (#150) field is “2”, the value of this field is the same as the `OrderQty` (#38) field. If the `ExecType` (#150) field is “8”, the value of this field is “0” (zero). | Qty(20) |
| 7545  | SettlCurrAmt2 | N | — | FX spot, outright: Settled amount in terms of settlement currency specified by the `SettlCurrency` (#120) field.
FX swap: Far-leg settled amount in terms of settlement currency specified by the `SettlCurrency` (#120) field. | Amt(20) |
| 460  | Product | N | 4=CURRENCY | Identifies the type of the instrument. | int(1) |
| 168  | EffectiveTime | N | — | The order submission time in GMT in the format *YYYYMMDD-hh:mm:ss* or *YYYYMMDD-hh:mm:ss.sss*.
For algo orders, the value of this field indicates, he absolute time in GMT at which the algo should start execution. If this field is not specified and `ExecEffPeriod` (#7564) is not specified, the algo starts execution immediately. If this field is specified and the time value is in the past, the algo starts execution immediately. | UTCTimestamp(21) |
| 7556  | ExecEndTime | N | — | Absolute time in GMT at which the algo should stop executing. If this tag is not specified and `ExecEndPeriod` (#7565) is not specified, the order expires based on the value of the `TimeInForce` (#59) field. | UTCTimestamp(21) |
| 7560  | AlgoParameters | N | — | The algo parameters represented as key/value pairs with the tilde character (~) separating the parameter key from the parameter value and each key/value pair delimited by a space. For example, the value “SI~01:00:00 SMI~00:30:00 SIR~Y AE~1” indicates “Slice interval = 1 hour, Minimum slice interval = 30 minutes, Slice interval randomized between 30 minutes (SMI) and 1 hour (SI), At expiration fill the remainder at market”.
This field is required when `ExecInst` (#18)=ST. | MultipleValueString(5) |
| → | AE | ActnOrdrExpr | N | 1=Fill @ Market
2=Cancel Order | Action to be taken at the expiration of the order. If this tag is not specified, the order is canceled at expiration. | char(1) |
| → | SFOK | SlcFillOrKill | N | Y=FOK
N=IOC (default) | Determines how slices are executed.
Y=Slices must be filled completely by a single fill from a provider or canceled. This parameter is used only if the slice size (SS, SlcSize) is fixed.
N=Partial fills allowed. | Boolean(1) |
| → | SI | SlcIntrvl | C | — | Required for TWAP orders. Relative time between two slices specified in the format *hh:mm:ss.sss*. This field is required when `ExecInst` (#18)=ST. | UTCTimeOnly(14) |
| → | SIR | SlcIntrvlRndmzr | N | Y=Slice interval randomized
N=Slice interval not randomized | Randomization enabled (Y)/disabled (N). If enabled, the order managed system randomly selects a slice interval between SlcIntrvl (SI) and slice interval and SlcMinIntrvl (SMI). | Boolean(1) |
| → | SMI | SlcMinIntrvl | C | — | Required for TWAP orders. Minimum slice interval specified in the format *hh:mm:ss.sss*. Applicable if the SlcIntrvlRndmzr (SIR) parameter is true. This field is required when `ExecInst` (#18)=ST. | UTCTimeOnly(14) |
| → | SRS | SlcRegularSize | N | — | If this parameter is specified, the slice size is rounded to a multiple of this value. If not specified, the behavior defaults to the system configuration. Contact your Integral Technical Account Manager to configure the default slice size. | Qty(20) |
| → | SS | SlcSize | N | — | Size of each slice. If the slice size is not specified, the size is chosen based on the TOBPercent (TOBP) parameter. | Qty(20) |
| → | SSR | SlcSizeRndmzr | N | Y=Slice size randomized
N=Slice size not randomized | Randomization enabled (Y)/disabled (N) flag. If enabled, the order management system randomizes the slice size between SlcRegularSize (SRS) and SlcSize (SS) or, if TOBPercent (TOBP) is specified, between the calculated top-of-book amount and SlcSize (SS). | Boolean(1) |
| → | TOBP | TOBPercent | N | — | Determines how the slice size varies, calculated as a percentage of the top-of-book (TOB) size. For example, a value of 0.5 indicates 50% of TOB size. A value of 1.2 indicates 120% of TOB size. If SlcSizeRndmzr (SSR) is true, then the slice size varies between SlcRegularSize (SRS) and the size calculated with the value of this parameter. If this parameter is not specified, the slice size is fixed. | float(20) |
| 7561  | AlgoName | N | — | This field is used with algo orders (`ExecInst` (#18)=ST). A free-format string provided to record the algo employed by the order. The value of this field is not validated and has no effect on algo functionality. | String(30) |
| 7564  | ExecEffPeriod | N | — | Relative time at which the algo should start execution specified in the format *hh:mm:ss.sss*. If this tag is not specified and `EffectiveTime` (#168) is not specified, the algo starts executing immediately. | UTCTimeOnly(14) |
| 7565  | ExecEndPeriod | N | — | Relative time at which the algo should stop execution specified in the format *hh:mm:ss.sss*. If this tag is not specified and `ExecEndTime` (#7556) is not specified, the order expires based on the value of the `TimeInForce` (#59) field. | UTCTimeOnly(14) |
| <Standard trailer>  | Y | — | — | — |


### Order Cancel Reject

Integral sends the Order Cancel Reject message to notify the customer app of a rejected Order Cancel Request or Order Cancel/Replace Request message.

Valid responses 

* None


Message format 

Order Cancel Reject format 

| Tag | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=9 | — |
| 37 | OrderID | Y | — | Unique identifier for the order assigned by Integral. If `CxlRejReason` (#102) = Unknown Order, this value will be set to NONE. | String(20) |
| 11 | ClOrdID | Y | — | Unique, customer-assigned identifier for the cancel request or cancel/replace request that is being rejected. | String(11) |
| 41 | OrigClOrdID | Y | — | `ClOrdID` (#11) of the order that could not be canceled. | String(11) |
| 39 | OrdStatus | Y | U=Undefined | The order for which status has been requested is not present in the order book and cannot be found. Please contact Integral Customer Support. | char(1) |
| 58 | Text | N | — | The reason code for the Order Cancel rejection. | String(150) |
| 434 | CxlRejResponseTo | Y | 1=Order Cancel Request
2=Order Cancel/Replace Request | Identifies the type of request the cancel is in response to. | char(1) |
| 102 | CxlRejReason | Y | — | Code to identify reason for cancel rejection. | int(1) |
| <Standard trailer>  | Y | — | — | — |


### Business Message Reject

Integral sends the Business Message Reject message to notify the customer app of a rejected New Order - Single or Order Cancel/Replace Request message.

Valid responses 

* None


Message format 

Business Message Reject format 

| Tag | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=j | — |
| 372 | RefMsgType | Y | D=New Order - Single
G=Order Cancel/Replace Request | The `MsgType` (#35) of the message being referenced. | String(2) |
| 379 | BusinessRejectRefID | Y | — | The `ClOrdID` (#11) of the rejected message. | String(11) |
| 380 | BusinessRejectReason | Y | — | Reason code. | String(4) |
| 58 | Text | Y | — | Text description of rejection reason. | String(150) |
| <Standard trailer>  | Y | — | — | — |


## Regulatory data (MiFID, EMIR, CFTC)

Fields for regulatory data for the following regulatory regimes are included on relevant FIX messages.

* [MiFID](#mifid)
* [EMIR](#emir)
* [CFTC](#cftc)


### MiFID

The MiFID fields can be included on the following message types:

* [New Order - Single](#new-order---single-mifid)
* [New Order - Multileg (batch trades)](#new-order---multileg-batch-trades-mifid)
* [Execution Report](#execution-report-mifid)


#### New Order - Single (MiFID)

New Order - Single MiFID data 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=D | — |
| 1839  | TradePriceCondition | N | 15=Non-price forming trade. | Price conditions in effect at the time of the order. | int(2) |
| 768  | NoTrdRegTimestamps | C | 1 | Regulatory timestamp in the format *YYYYMMDD-hh:mm:ss.sss*, required for MTF trading activity. | NumInGroup(1) |
| → | 769 | TrdRegTimestamp | C | — | Regulatory timestamp in the format *YYYYMMDD-hh:mm:ss.sss*, required for MTF trading activity. | UTCTimestamp(21) |
| → | 770 | TrdRegTimestampType | C | 10=OrderSubmissionTime | Regulatory timestamp type. | int(2) |
| 2668  | NoTrdRegPublications | N | Up to 3 | Number of regulatory publication rules in repeating group. | NumInGroup(1) |
| → | 2669 | TrdRegPublicationType | C | 0=Pre-trade transparency waiver
1=Post-trade deferral
2=Exempt from publication | Required if `NoTrdRegPublications` (#2668) is included. The type of regulatory publication. | int(1) |
| → | 2670 | TrdRegPublicationReason | C | 4=No public price quoted as instrument is illiquid
7=Deferral due to "Illiquid Instrument"
11=Exempted due to securities financing transaction | Required if `NoTrdRegPublications` (#2668) is included. Additional reason for trade publication type specified in `TrdRegPublicationType` (#2669). Reasons may be specific to regulatory trade publication rules. | int(2) |
| 9391  | ClientAcknowledgeTrade | C | Y: ExecAck expected
N: ExecAck not expected | Required for messages sent to an MTF. Whether or not an Execution Acknowledgement message (35=BN) is expected or not: | Boolean(1) |
| 9392  | STPOnAcknowledge | C | Y: Delay STP until after ExecAck
N: Do not wait for ExecAck to send STP | Required if `ClientAcknowledgeTrade` (#9391)=Y. Whether or not STP messages should be delayed or not. | Boolean(1) |
| 631  | MidPx | N | — | The near-leg all-in mid price. If a provider sends only mid swap points instead of near and far mid prices separately, this field is empty or 0 (zero). | Price(20) |
| 7631  | MidPxFl | N | — | The far-leg all-in mid price. If a provider sends only mid swap points instead of near and far mid prices separately, this field contains the swap points. | Price(20) |
| 9360  | IsSEFTrade | N | — | Y=The trade is a SEF Trade.
N=All non-SEF NDF trades.
Not applicable for other trade types. Ignored for outright/swap/spot trades. | String(1) |
| 9361  | ExecutionVenue | N | — | For SEF trades: LEI of the Integral SEF.
For Non-SEF trades: Integral's LEI. | String(20) |
| 9362  | USPerson | N | * Y
* N

 | Is the counterparty a “U.S. person” as defined by CTFC guidelines? Applicable to SEF trades only. | String(1) |
| 9363  | SwapDataRepository | N | — | LEI of the SDR. | String(20) |
| 9364  | ClearingVenue | N | — | If this trade is a cleared SEF trade, LEI of clearing house. | String(20) |
| 9365  | TakerLEI | N | — | LEI of the taker counterparty. | String(20) |
| 9366  | MakerLEI | N | — | Default LEI of the maker counterparty. If the trade is booked with different LEI, please send new maker LEI in execution report. The alternate maker LEI should be pre-configured on Integral’s system. | String(20) |
| 9367  | IntentToClear | N | * Y
* N

 | Y=Intent to clear.
N=Permitted SEF. Applicable for SEF trades only. | String(1) |
| 9368  | EndUserException | N | — | If the counterparty has invoked clearing exemption. Applicable to SEF trades only. | String(1) |
| 9370  | ReportingParty | N | * Y
* N

 | Y=the liquidity provider (maker) the reporting party. If the provider is a U.S. person as defined by CTFC guidelines (`USPerson` (#9363)=Y), reporting party is mandatory.
N=The provider is not the reporting party. | String(1) |
| 9374  | USINamespace | N | — | The ten-character USI namespace for single-leg trades or the near-leg USI prefix for multi-legged trades. Only included when the receiving organization is configured to receive SEF identifiers and when the trade involves SEF instruments and organizations. | String(10) |
| 9375  | USIFarNamespace | N | — | The ten-character USI namespace for the far-leg. Only included when the receiving organization is configured to receive SEF identifiers and when the trade involves SEF instruments and organizations. | String(10) |
| 9376  | USI | N | — | The USI for single-leg trades or the near-leg USI for multi-legged trades. Only included when the receiving organization is configured to receive SEF identifiers and when the trade involves SEF instruments and organizations. | String(20) |
| 9377  | USIFar | N | — | The far-leg USI. Only included when the receiving organization is configured to receive SEF identifiers and when the trade involves SEF instruments and organizations. | String(20) |
| 9378  | UTIPrefix | N | — | UTI namespace for single-leg trades (outrights) and near leg of swaps. | String(20) |
| 9379  | UTIFarPrefix | N | — | UTI namespace for far leg of swaps. Not applicable to single-leg trades. | String(20) |
| 9380  | UTI | N | — | UTI value for single-leg trades (outrights, near leg of swaps, and each leg of multi-leg trades. | String(52) |
| 9381  | UTIFar | N | — | UTI value for far leg of swaps. Not applicable to single-leg trades. | String(52) |
| 9382  | UPI | N | — | Unique Product Identifier value. | String(52) |


#### New Order - Multileg (batch trades) (MiFID)

New Order - Multileg MiFID data (batch trades) 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=AB | — |
| 555  | NoLegs | Y | — | Repeating group for multi-leg trade details. The order of fields in the repeating group is different from the same repeating group in the Quote Request message. | NumInGroup(2) |
| → | 602 | LegSecurityID | N | — | For batch trades done on an MTF, the security identifier value. | String(12) |
| → | 603 | LegSecurityIDSource | C | 4=ISIN number | Required if `LegSecurityID` (#602) is included. For batch trades done on an MTF, identifies class or source of the `LegSecurityID` (#602) value. | String(1) |
| → | 539 | NoNestedPartyIDs | Y | 2 | The number of sub accounts for pre-trade allocation of the leg. The value of the `NoNestedPartyIDs` (#539) field indicates the number of groups and thus the number of sub accounts.
For MTF batch quote requests, the repeating groups represent the following entities:* Venue (required for non-spot RFS MiFID-II legs)
* Customer Account (taker allocation account)
* Customer Account Legal Entity (organization ID of the sub-account for pre-trade allocation of the leg, required for backwards compatibility)

 | NumInGroup(1) |
| →→ | 524 | NestedPartyID | C | — | The organization ID of the sub account for pre-trade allocations.
Batch trades: Not required for undisclosed batch. Required for disclosed batch.
Required if `NoNestedPartyIDs` (#539) is included. For MTF batch quote requests, the value is based on entity type:* Venue: MIC code (required for non-spot RFS MiFID-II legs)
* Customer Account (taker allocation account): LEI value
* Customer Account Legal Entity: organization ID

 | String(20) |
| →→ | 525 | NestedPartyIDSource | C | G=MIC
N=LEI | Required if `NoNestedPartyIDs` (#539) is included. For MTF batch quote requests, the value is based on entity type:\* Venue: G (MIC, required for non-spot RFS MiFID-II legs)
* Customer Account (taker allocation account): N (LEI)
* Customer Account Legal Entity: Not applicable

 | char(1) |
| →→ | 538 | NestedPartyRole | C | 64=Multilateral Trading Facility
24=Customer Account | Required if `NoNestedPartyIDs` (#539) is included. For MTF batch requests, this value is based on entity type:\* Venue: 64 (Multilateral Trading Facility, required for non-spot RFS MiFID-II legs)
* Customer Account (taker allocation account): 24
* Customer Account Legal Entity: Not applicable

 | int(2) |
| →→ | 804 | NoNestedPartySubIDs | N | 1 | A repeating group to contain the venue’s LEI (when `NestedPartyRole` (#538)=64). | NumInGroup(1) |
| →→→ | 545 | NestedPartySubID | C | — | The venue’s LEI. Required if `NoNestedPartySubIDs` (#804) is added. | String(20) |
| → | 9378 | UTIPrefix | N | — | UTI namespace. | String(20) |
| → | 9380 | UTI | N | — | UTI value. | String(52) |
| → | 9382 | UPI | N | — | Unique Product Identifier value. | String(52) |
| → | 1839 | TradePriceCondition | N | 15=Non-price forming trade. | Price conditions in effect at the time of the order. Only populated when the leg is a non-price forming trade. Otherwise empty. | int(2) |
| → | 768 | NoTrdRegTimestamps | C | 1 | Regulatory timestamp in the format *YYYYMMDD-hh:mm:ss.sss*, required for MTF trading activity. | NumInGroup(1) |
| →→ | 769 | TrdRegTimestamp | C | — | Regulatory timestamp in the format *YYYYMMDD-hh:mm:ss.sss*, required for MTF trading activity. | UTCTimestamp(21) |
| →→ | 770 | TrdRegTimestampType | C | 10=OrderSubmissionTime | Regulatory timestamp type. | int(2) |
| → | 2668 | NoTrdRegPublications | N | Up to 3 | Number of regulatory publication rules in repeating group for the batch. Leg-level regulatory publication rules are not supported. | NumInGroup(1) |
| →→ | 2669 | TrdRegPublicationType | C | 0=Pre-trade transparency waiver
1=Post-trade deferral
2=Exempt from publication | Required if `NoTrdRegPublications` (#2668) is included. The type of regulatory publication. | int(1) |
| →→ | 2670 | TrdRegPublicationReason | C | 4=No public price quoted as instrument is illiquid
7=Deferral due to "Illiquid Instrument"
11=Exempted due to securities financing transaction | Required if `NoTrdRegPublications` (#2668) is included. Additional reason for trade publication type specified in `TrdRegPublicationType` (#2669). Reasons may be specific to regulatory trade publication rules. | int(2) |
| 453  | NoPartyIDs | N | 2 | For orders sent to an MTF, the repeating groups represent the following entities:\* Order Originating Firm (taker org)
* Liquidity Provider (maker org)

 | Qty(1) |
| → | 448 | PartyID | N | — | For orders sent to an MTF, this value is based on entity type:\* Order Originating Firm (taker org): LEI value
* Liquidity Provider (maker org): LEI value

 | String(20) |
| → | 447 | PartyIDSource | N | N=LEI | For orders sent to an MTF, this value is based on entity type:\* Order Originating Firm (taker org): N (LEI)
* Liquidity Provider (maker org): N (LEI)

 | char(1) |
| → | 452 | PartyRole | N | 13=Order Originating Firm
35=Liquidity Provider | For orders sent to an MTF, this value is based on entity type:\* Order Originating Firm (taker org): 13
* Liquidity Provider (maker org): 35

 | int(2) |
| 9391  | ClientAcknowledgeTrade | C | Y: ExecAck expected
N: ExecAck not expected | Required for messages sent to an MTF. Whether or not an Execution Acknowledgement message (35=BN) is expected or not: | Boolean(1) |
| 9392  | STPOnAcknowledge | C | Y: Delay STP until after ExecAck
N: Do not wait for ExecAck to send STP | Required if `ClientAcknowledgeTrade` (#9391)=Y. Whether or not STP messages should be delayed or not. | Boolean(1) |


#### Execution Report (MiFID)

Execution Report MiFID data 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=8 | — |
| → | 7632 | MidPxLeg | N | — | For SEF batch trades only: The mid rate | Price(20) |
| 9366  | MakerLEI | N | — | Legal Entity Identifier (LEI) of the maker of the trade. If there are multiple LEIs with which the maker can book the trade, please specify the final LEI with which the trade was booked. | String(20) |
| 9374  | USINamespace | N | — | The ten-character USI namespace for single-leg trades or the near-leg USI prefix for multi-legged trades. Only included when the receiving organization is configured to receive SEF identifiers and when the trade involves SEF instruments and organizations. | String(10) |
| 9375  | USIFarNamespace | N | — | The ten-character USI namespace for the far-leg. Only included when the receiving organization is configured to receive SEF identifiers and when the trade involves SEF instruments and organizations. | String(10) |
| 9376  | USI | N | — | The USI for single-leg trades or the near-leg USI for multi-legged trades. Only included when the receiving organization is configured to receive SEF identifiers and when the trade involves SEF instruments and organizations. | String(20) |
| 9377  | USIFar | N | — | The far-leg USI. Only included when the receiving organization is configured to receive SEF identifiers and when the trade involves SEF instruments and organizations. | String(20) |
| 9378  | UTIPrefix | N | — | UTI namespace for single-leg trades (outrights) and near leg of swaps | String(20) |
| 9379  | UTIFarPrefix | N | — | UTI namespace for far leg of swaps. Not applicable to single-leg trades. | String(20) |
| 9380  | UTI | N | — | UTI value for single-leg trades (outrights, near leg of swaps, and each leg of multi-leg trades. | String(52) |
| 9381  | UTIFar | N | — | UTI value for far leg of swaps. Not applicable to single-leg trades. | String(52) |
| 9382  | UPI | N | — | Unique Product Identifier value | String(52) |


### EMIR

The RTN (Report Tracking Number) under EMIR reporting is captured as a repeating group. The unique numbers are assigned to the execution, either for a single-leg trade or in common to all legs of a multi-leg trade, such as swaps. Integral receives these values on the FIX workflow and sets it on the trade for downstream STP.

EMIR fields can be supplied on the following message types:

* New Order - Single (`MsgType` (#35)=D)
* Execution Report Acknowledgment (`MsgType` (#35)=BN)


FIX fields for EMIR REFIT and CFTC data 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| 1907  | NoRegulatoryTradeIDs | N | — | Repeating group to support regulatory reporting trade IDs (RTNs). Indicates the number of elements in the repeating group. | NumInGroup(2) |
| → | 1903 | RegulatoryTradeID | C | — | Regulatory trade ID as received from the external venue. | String(52) |
| → | 1904 | RegulatoryTradeIDEvent | C | 0=Initial block trade. | Event that caused origination of the regulatory ID. | Int(1) |
| → | 1906 | RegulatoryTradeIDType | C | 6=Report tracking number. | Type of regulatory ID. | Int(1) |
| → | 2411 | RegulatoryLegRefID | C | 1= Single leg trade or near leg of a swap.
2=Far leg of a swap. | Indicates the leg of the trade to which the regulatory trade applies. | String(1) |


### CFTC

The following CFTC data can be captured in FIX messaging:

* UPI (Unique Product Identifier): fields for each leg of a single leg or a multi-leg trade. Integral receives this field from external venues and captures it on the trade to send it on the STP message.
* UTI (Unique Transaction Identifier)


CFTC fields can be supplied on the following message types:

* New Order - Single (`MsgType` (#35)=D)
* Execution Report Acknowledgment (`MsgType` (#35)=BN)


FIX fields for EMIR REFIT and CFTC data 

| Tag | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| 9398  | UPI | N | — | Unique Product Identifier under CFTC rules, a product-level identifier for single-leg trades, near leg of swaps, or for individual legs of a multi-leg trade. Integral receives this value on the FIX workflow and sets it on the trade for downstream STP. | String(52) |
| 9399  | UPIFar | N | — | Unique Product Identifier under CFTC rules, a product-level identifier for the far leg of swaps. Integral receives this value on the FIX workflow and sets it on the trade for downstream STP. | String(52) |
| 9378  | UTIPrefix | N | — | Unique code for the code issuing authority for single-leg trades and near leg of swaps. Supports 20-character UTI prefixes. | String(20) |
| 9379  | UTIFarPrefix | N | — | Unique code for the code issuing authority for far leg of swaps. Supports 20-character UTI prefixes. | String(20) |
| 9380  | UTI | N | — | Unique code for single-leg trade, near leg of swaps, and each leg of multi-leg trades. | String(52) |
| 9381  | UTIFar | N | — | Unique code for far leg of swaps. | String(52) |


## Changes

The following table lists API changes and significant changes to this document.

API and document changes 

| Date (document version) | Changes |
|  --- | --- |
| February 2026 (1.0v22) | Corrected format for `SettlDate` (#64) and `SettlDate2` (#193) to *YYYYMMDD*:* [New Order - Single](#new-order--single)
* [New Order – Multileg (block trades)](#new-order--multileg-block-trades)
* [Order Cancel/Replace Request](#order-cancelreplace-request)
* [Execution Report](#execution-report)

 |
| November 2025 (1.0v21) | * Added [External algos](#external) and [Serialized algo orders (deprecated)](#serialized-algo-orders-deprecated).
* Added `NoStrategyParameters` (#957) repeating group to [New Order – Single](#new-order--single) to support external algos.
* Reorganized [Orders](#orders).

 |
| September 2025 (1.0v20) | Corrected list of tenors in [Supported tenors](#supported-tenors). |
| February 2025 (1.0v19) | Corrected field name from `ExecType` to `ExecInst` in [TWAP orders](#twap-orders). |
| August 2024 (1.0v18) | You can now specify relative and absolute expiry times with the `ExpireTime` (#126) field.
In previous releases, only the time portion of the `ExpireTime` (#126) field was processed.: in the format *YYYYMMDD-hh:mm:ss.sss* the date portion *YYYYMMDD* was ignored.
The date portion of the `ExpireTime` (#126) field can now be specified to enable GTD (good-til-date) orders:* Relative expiry: set the date portion to 00000000.
For example, for expiry 30 seconds from receipt, you would specify 126=00000000-00:00:30.000.
* Absolute expiry (new feature): set both the date and time portions.
For example, to set the order to expire at 17:00 on August 14th, 2025, you would specify 126=20250814-17:00:00.000.

 |
| July 2024 (1.0v17) | * Simplified base message formats by moving regulatory fields to [Regulatory data (MiFID, EMIR, CFTC)](#regulatory-data-mifid-emir-cftc).
* Corrected and expanded [Order entry sessions](#order-entry-sessions).

 |