# FIX RFS API

The Integral FIX RFS API is a FIX-based channel that enables liquidity-taking firms to request a quote from liquidity-making firms, receive an executable quote or stream of quotes, and then accept a quote to trade.

## 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 RFS 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.

### Supported message set

The following message types are supported by the Integral FIX RFS 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. |


#### Supported business messages

Message direction is from the customer's perspective.

Supported business messages 

| Direction | Message name | `MsgType` (#35)  | Message purpose |
|  --- | --- | --- | --- |
| Out | New Order - Single | D | Customer submits an order to Integral. |
| Out | New Order – Multileg | AB | Customer submits a batch order to Integral. |
| In | Execution Report | 8 | Integral confirms receipt of an order, relays order status information, or relays fill information. |
| Out | Quote Request | R | Customer sends to Integral to start an RFS quote stream. |
| In | Quote Request Reject | AG | Integral sends to reject an unsuccessful Quote Request. |
| In | Quote | S | Integral sends in response to a successful Quote Request. |
| In, Out
 | Quote Cancel
 | Z
 | Integral sends to stop an RFS quote stream and cancel all quotes.
Customer sends to Integral to cancel a Quote Request message and stop an RFS stream.
 |
| In | Business Message Reject | j | Integral indicates that the New Order - Single 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)

 |
| Quote Request (#35=R) | Quote Request Reject (#35=AG) |


### RFS sessions

#### Session type

The Integral FIX RFS API operates on a single RFS session to:

1. Request from providers.
2. Receive quotes.
3. Send orders to hit quotes and execute trades.


Messages are transactional and persistent with no lost messages allowed, reflecting their business criticality.

#### Your organization client ID

Your organization ID is expressed as a series of tokens separated by periods, much like an Internet domain name:

*sessionType*.*orgShortName*

`rfs.yourOrganizationID`

Organization ID format 

| Token | Example | Description |
|  --- | --- | --- |
| *sessionType* | **rfs**.yourOrganizationID | Indicates messages sent on an RFS session. |
| *orgShortName* | rfs.**yourOrganizationID** | Your organization’s short name ID. |


All messages that you send to Integral must include your ID in the `SenderCompID` (#49) field.

All messages that you receive from Integral include your ID in the `TargetCompID` (#56) field.

#### Session availability

Daily and weekly RFS 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 Integral Technical 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.

#### Intra-session reconnections

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

If your 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).

### Session management

#### Connect

The Integral FIX RFS 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.

### Supported tenors

For trade types with future settlement dates, you can specify a broken date or a standard tenor. The FIX RFS 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. |


### Common message components

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

#### Terminology

Each Integral FIX RFS 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 RFS API implementation.
  * N = optional for both the FIX RFS 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 RFS 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 RFS 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.

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

### Quote Request

Customers send a Quote Request message to Integral to initiate the RFS workflow.

To request quotes for batch trades, see [Quote Request (batch trades)](#quote-request-batch-trades).

To request a streaming book of prices from your providers, see [Quote Request (book of prices)](#quote-request-book-of-prices).

Valid responses 

* Quote (#35=S)


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.

Quote Request format (single trades) 

| Tag | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=R | — |
| 34 | MsgSeqNum | Y | — | Integer message sequence number. | SeqNum(9) |
| 49 | SenderCompID | Y | — | Your organization’s ID. | String(30) |
| 52 | SendingTime | Y | — | Time of message transmission. | UTCTimestamp(21) |
| 50 | SenderSubID | C | — | Your legal entity’s ID if you are trading directly with a liquidity provider. If you are trading on behalf of a customer, this field is not included. | String(30) |
| 56 | TargetCompID | Y | — | The Integral server’s ID. | String(30) |
| 115 | OnBehalfOfCompID | C | — | Your customer’s organization ID if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 116 | OnBehalfOfSubID | C | — | The ID of your customer’s legal entity if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 128 | DeliverToCompID | N | — | The ID of the liquidity provider organization to whom the request is sent. | String(30) |
| 448 | PartyID | C | — | When included on the message by itself and not as part of a repeating group: The ID of your organization’s user who submitted the message if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 1 | Account | N | — | For batch trades. Required if the batch is allocated to a single account. | String(30) |
| 131 | QuoteReqID | Y | — | Client-assigned unique ID for the quote request. For batch trades, this ID is included in all responses from Integral. | String(20) |
| 146 | NoRelatedSym | Y | 1 | Number of related instruments in the request. This value is always “1” (one). | NumInGroup(1) |
| 55 | Symbol | Y | — | The symbol for the base and variable currencies of the currency pair in the format *baseCCY/variableCCY* (for example, “EUR/USD”). | String(35) |
| 167 | SecurityType | Y | * FOR
* FXNDF
* FXFWD
* FXNDS
* FXSWAP

 | The security type:* FOR: Foreign Exchange Contract. By default, for a given instrument, quote convention settings on the server automatically determine the trade type.

Contact your Integral Technical Account Manager to configure specific instruments if you need to specify the trade type on a request-by-request basis.
When the system is configured to accept both deliverable and non-deliverable trade types for specific instruments, you can specify the following values as execution instructions that indicate how your request is processed:* FXNDF: non-deliverable forward. If specified for a deliverable-only instrument, the request is rejected.
* FXFWD: deliverable forward. If specified for a non-deliverable-only currency pair, the request is rejected.
* FXNDS: non-deliverable swap. If this parameter is specified for a deliverable-only currency pair, the request is rejected.
* FXSWAP: deliverable swap. If this parameter is specified for a non-deliverable-only currency pair, the request is rejected.

 | String(20) |
| 54 | Side | C | 1=Buy
2=Sell
Space=2-Way
7=Undisclosed | The order side is from customer’s (FIX client) perspective. For FX swap, it is the side of the far leg.
Undisclosed batch (two-way price): Required with value “7”. | char(1) |
| 38 | OrderQty | C | — | Requested amount specified in the dealt currency `Currency` (#15). For FX swap, this is the near leg amount.
Required for single trade quotes.
Disclosed batch (one-way price): Not applicable and must not be included on the request for disclosed (one-way price) batch quote.
Undisclosed batch (two-way price): Required. | Qty(20) |
| 64 | SettlDate | N | * Tenor
* Broken date

 | Either a standard tenor symbol or broken date in *YYYYMMDD* format for outright and swap.
If the field is empty, it is considered a spot stream request.* FX spot: Spot date.
* FX outright: Value date.
* FX swap (spot-forward and forward-forward): Near leg value date.
If a tenor, the value is defined by Integral ([Supported tenors](#supported-tenors)).

 | * Broken date: LocalMktDate(10)
* Tenor: String(30)

 |
| 193 | SettlDate2 | N | Either standard tenor symbol or a broken date in *YYYYMMDD* format.* Tenor
* Broken date

 | FX spot, outright: Not applicable.
FX swap: The far leg value date. | * Broken date: LocalMktDate(10)
* Tenor: String(30)

 |
| 192 | OrderQty2 | N | — | Requested amount specified in the dealt currency `Currency` (#15). For FX swap, this is the far leg amount. | Qty(20) |
| 15 | Currency | Y | — | Dealt currency. | Currency(3) |
| 40 | OrdType | Y | — | D=Previously quoted (for FX spot RFS, FX outright RFS, and NDF).
G=FX swap. | char(1) |
| 11060 | WorkflowTypeParam | N | 0=RFS workflow
1=RFQ workflow | Indicates the workflow for which the request is made:
0=RFS workflow: request a stream of quotes. `ExpireTime` (#126) specifies the expiry time of the request.
1=RFQ workflow: request a single quote that is valid for a duration specified by `ExpireTime` (#126). The server must be configured to enable the RFQ workflow. Please contact your Technical Account Manager to discuss settings. | int(1) |
| 126 | ExpireTime | Y | See descr. | This value of this field depends on the value of the `WorkflowTypeParam` (#11060) field that indicates if you are trading in the RFS workflow (11060=0) or the RFQ workflow (also known as "held rates, 11060=1).
**RFS workflow (**`11060=0`**):**
This field is the expiry time of the request. The date portion *YYYYMMDD* determines whether the value is an relative or absolute expiry time:* 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`.
**RFQ workflow ("held rates", **`11060=1`**):**

The server must be configured to enable the RFQ workflow. Please contact your Technical Account Manager to discuss settings.
This field is the requested duration for quote validity in the format *YYYYMMDD-hh:mm:ss.sss*. The date component *YYYYMMDD* must match the date component of `SendingTime` (#52) of the request.
Look in `ValidUntilTime` (#62) of the quote for the validity duration.
Minimum and maximum values are:* Min: 30 seconds *YYYYMMDD*-00:00:30.000
* Max: 24 hours *YYYYMMDD*-24:00:00.000

 | UTCTimestamp(21) |
| 60 | TransactTime | Y | — | The time the Quote Request is sent by the client. Automatically stamped by the FIX engine in the format *YYYYMMDD-hh:mm:ss.sss*. | UTCTimestamp(21) |
| 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 | — | Required for NDF swaps only: The far-leg fixing date | LocalMktDate(8) |
| 9410 | SettlementInst | N | — | The settlement instructions added to the RFS request from the trading app or the API. | String (255) |
| <Standard trailer>  | Y | — | — | — |


### Quote

Integral sends a Quote message in response to a successful Quote Request.

Valid responses 

* Quote Cancel (#35=Z)
* New Order – Single (#35=D)


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.

Quote format (single trades) 

| Tag | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=S | — |
| 34 | MsgSeqNum | Y | — | Integer message sequence number. | SeqNum(9) |
| 49 | SenderCompID | Y | — | The Integral server’s ID. | String(30) |
| 52 | SendingTime | Y | — | Time of message transmission. | UTCTimestamp(21) |
| 56 | TargetCompID | Y | — | Your organization’s ID. | String(30) |
| 57 | TargetSubID | C | — | The originating legal entity’s 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(30) |
| 115 | OnBehalfOfCompID | C | — | Your customer’s organization ID if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 128 | DeliverToCompID | C | — | The ID of the customer trader who submitted the message if you are trading with liquidity providers on behalf of the customer. Otherwise not included. | String(30) |
| 129 | DeliverToSubID | C | — | The ID of your customer’s legal entity if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 15 | Currency | N | — | Dealt currency | Currency(3) |
| 40 | OrdType | Y | — | D=Previously quoted (for FX spot and FX outright RFS).
G=FX swap. | char(1) |
| 54 | Side | N | 1=Buy
2=Sell
Empty=2-Way | The order side is from customer’s (FIX client) perspective. For FX swap, it is the side of the far leg.
Not included in batch quotes. Each leg in the batch specifies its side. | char(1) |
| 60 | TransactTime | Y | — | The time the message is generated. Automatically stamped by the FIX engine in the format *YYYYMMDD-hh:mm:ss.sss*. | UTCTimestamp(21) |
| 62 | ValidUntilTime | N | — | Validity duration of the quote in the format *YYYYMMDD-hh:mm:ss.sss*. Only the time portion is used as the duration. For example, 00000000-00:01:30.000 means the quote is good for 1 minute and 30 seconds. | UTCTimestamp(21) |
| 64 | SettlDate | N | — | The field is specified in the format *YYYYMMDD*.* FX spot: Spot date.
* FX outright: Outright value date.
* FX spot-forward swap: Spot date.
* FX forward-forward swap: Near value date.

 | LocalMktDate(10) |
| 55 | Symbol | Y | — | The symbol for the base and variable currencies of the currency pair in the format *baseCCY/variableCCY* (for example, “EUR/USD”). | String(35) |
| 117 | QuoteID | Y | — | Unique quote ID assigned by Integral. | String(20) |
| 131 | QuoteReqID | Y | — | Client-assigned unique ID for the quote request, taken from the `QuoteReqID` (#131) on the originating Quote Request message. For batch trades, this ID is included in all responses from Integral. | String(20) |
| 132 | BidPx | N | — | All-in bid price. Included only if `Side` (#54) in the originating Quote Request is sell or 2-way.
If the value is 0 (zero), your client should ignore the quote.* FX spot: Spot price.
* FX outright: Outright price.
* FX spot-forward swap: Spot price.
* FX forward-forward swap: Near leg all-in price.

 | Price(20) |
| 133 | OfferPx | N | — | All-in offer price. Included only if `Side` (#54) in the originating Quote Request is buy or 2-way. If the value is 0 (zero), your client should ignore the quote. | Price(20) |
| 134 | BidSize | N | — | Bid size of the near leg quote. Included only if `Side` (#54) in the originating Quote Request is sell or 2-way. If the value is 0 (zero), your client should ignore the quote. | Qty(20) |
| 135 | OfferSize | N | — | Offer size of the near leg quote. Included only if `Side` (#54) in the originating Quote Request is buy or 2-way. If the value is 0 (zero), your client should ignore the quote. | Qty(20) |
| 167
 | SecurityType
 | Y
 | * FOR
* FXNDF
* FXFWD
* FXNDS
* FXSWAP

 | The security type:
* FOR: Foreign Exchange Contract. By default, for a given instrument, quote convention settings on the server automatically determine the trade type.

When the system is configured to accept both deliverable and non-deliverable trade types for specific instruments, you can specify the following values as execution instructions that indicate how your request is processed (see [Quote Request](#quote-request)):
* FXNDF: non-deliverable forward.
* FXFWD: deliverable forward.
* FXNDS: non-deliverable swap.
* FXSWAP: deliverable swap.

 | String(20)
 |
| 188 | BidSpotRatev | N | — | Bid spot rate. Included only if `Side` (#54) in the originating Quote Request is sell or 2-way. If the value is 0 (zero), your client should ignore the quote. | Price(20) |
| 189 | BidForwardPoints | N | — | Bid forward points. The value is used for outrights and forward/forward swaps. Included only if `Side` (#54) in the originating Quote Request is sell or 2-way. | PriceOffset(20) |
| 190 | OfferSpotRate | N | — | Offer spot rate. Included only if `Side` (#54) in the originating Quote Request is buy or 2-way. If the value is 0 (zero), your client should ignore the quote. | Price(20) |
| 191 | OfferForwardPoints | N | — | Offer forward points. The value is used for outrights and forward/forward swaps. Included only if `Side` (#54) in the originating Quote Request is buy or 2-way. | PriceOffset(20) |
| 193 | SettlDate2 | N | * Tenor
* 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)

 |
| 537 | QuoteType | C | 0 (zero) = Indicative (the quote is not tradable)
1 = Tradable | Whether or not the quote is tradable. | int(1) |
| 541 | MaturityDate | C | — | The fixing date for NDF trades. Either this field or a value date (`SettlDate` (#64)) must be specified. If 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 must be before `SettlDate` (#64).
NDFs: The fixing date.
NDF swaps: The near-leg fixing date. | LocalMktDate(8) |
| 8541 | MaturityDate2 | C | — | Required 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) |
| 642 | BidForwardPoints2 | N | — | Bid Forward Points for the far leg. The value is used for Swap and Fwd/Fwd Swap only. Included only if `Side` (#54) in the originating Quote Request is sell or 2-way. | PriceOffset(20) |
| 643 | OfferForwardPoints2 | N | — | Offer Forward Points for the far leg. The value is used for Swap and Fwd/Fwd Swap only. Included only if `Side` (#54) in the originating Quote Request is buy or 2-way. | PriceOffset(20) |
| 7551 | BidSize2 | N | — | Bid size of the far leg quote. Included only if `Side` (#54) in the originating Quote Request is sell or 2-way. | Qty(20) |
| 7552 | OfferSize2 | N | — | Offer size of the far leg quote. Included only if `Side` (#54) in the originating Quote Request is buy or 2-way. | Qty(20) |
| 9410 | SettlementInst | N | — | The settlement instructions added to the RFS request from the trading app or the API. | String (255) |
| <Standard trailer>  | Y | — | — | — |


### New Order – Single

Customers use the New Order - Single message to accept quotes 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) |
| 117 | QuoteID | Y | — | Unique ID from the quote assigned by Integral.
For trading from a book of prices, this quote ID of an individual quote, either `BidQuoteID` (#11016) or `OfferQuoteID` (#11017). | String(20) |
| 128 | DeliverToCompID | C | — | The liquidity provider organization’s ID. Required only for previously quoted orders (`OrdType` (#40)=D). | 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 | D=Previously quoted | Type of order. | char(1) |
| 44 | Price | Y | — | The quoted rate.
For trading from a book of prices, this is the all-in quote rate from an individual quote, either `LegBidPx` (#681) or `LegOfferPx` (#684). | Price(20) |
| 15 | Currency | Y | — | Identifies currency used for prices. | Currency(3) |
| 18 | ExecInst | Y | B=Match with all available liquidity | How your order is executed. | char(2) |
| 167 | SecurityType | N | * FOR
* FXNDF
* FXFWD
* FXNDS
* FXSWAP

 | The security type:* FOR: Foreign Exchange Contract. By default, for a given instrument, quote convention settings on the server automatically determine the trade type.

This value must match the value sent in the Quote Request (35=R) message. Otherwise the order is rejected.
When the system is configured to accept both deliverable and non-deliverable trade types for specific instruments, you can specify the following values as execution instructions that indicate how your request is processed:* FXNDF: non-deliverable forward.
* FXFWD: deliverable forward.
* FXNDS: non-deliverable swap.
* FXSWAP: deliverable swap.

 | String(20) |
| 460 | Product | N | 4=CURRENCY | The asset class. | int(1) |
| <Standard trailer>  | Y | — | — | — |


### Quote Cancel

Integral sends a Quote Cancel message to the client to stop an RFS quote stream and cancel all quotes.

Customers send a Quote Cancel message to Integral as part of the RFS workflow to cancel a Quote Request message and stop an RFS stream.

Valid responses 

* Quote Cancel (#35=Z)
* New Order – Multileg (#35=AB)


Message format 

Quote Cancel format 

| Tag | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=Z |  |
| 49 | SenderCompID | Y | — | Your organization’s ID. | String(30) |
| 50 | SenderSubID | C | — | Your legal entity’s ID if you are trading directly with a liquidity provider. Not included if you are trading on behalf of a customer. | String(30) |
| 56 | TargetCompID | Y | — | The Integral server’s ID. | String(30) |
| 115 | OnBehalfOfCompID | C | — | The ID of the customer trader who submitted the message if you are trading with liquidity providers on behalf of the customer. Otherwise not included. | String(30) |
| 116 | OnBehalfOfSubID | C | — | The ID of your customer’s legal entity if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 128 | DeliverToCompID | Y | — | The liquidity provider organization’s ID. | String(30) |
| 129 | DeliverToSubID | C | — | The ID of your customer’s legal entity if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 448 | PartyID | C | — | The ID of your organization’s user who submitted the message if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 60 | TransactTime | Y | — | The time the message was generated. Automatically stamped by the FIX engine in the format *YYYYMMDD-hh:mm:ss.sss*. | UTCTimestamp(21) |
| 117 | QuoteID | C | * (asterisk) for batch trades

 | Required when the message is sent by Integral.
not required when the message is sent by the customer to cancel a quote request.
For batch trades, the value is * (asterisk) when the message is sent by Integral to cancel all published quotes. | String(20) |
| 131 | QuoteReqID | Y | — | The `QuoteReqID` (#131) of the originating quote request. | String(20) |
| 298 | QuoteCancelType | Y | — | 1=Cancel for Symbols, used only for batch trades.
4=Quote Withdraw, used when the quote stream is canceled by the provider.
5=Quote/Request Expired, used when the request or quote expiry is reached. | int(1) |
| <Standard trailer>  | Y | — | — |


### Quote Request Reject

Integral sends a Quote Request Reject message to the client to reject a previously sent Quote Request.

Valid responses 

* None


Message format 

Quote Request Reject format 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=AG | — |
| 49  | SenderCompID | Y | — | The Integral server’s ID. | String(30) |
| 56  | TargetCompID | Y | — | Your organization’s ID. | String(30) |
| 57  | TargetSubID | C | — | The originating legal entity’s 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(30) |
| 115  | OnBehalfOfCompID | C | — | Your customer’s organization ID if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 128  | DeliverToCompID | C | — | The ID of the customer trader who submitted the message if you are trading with liquidity providers on behalf of the customer. Otherwise not included. | String(30) |
| 129  | DeliverToSubID | C | — | The ID of your customer’s legal entity if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 58  | Text | N | — | Free format text explaining the reason for rejection.If the `Text` (#58) field includes the text “INTERNAL_SERVER_ERROR”, this indicates a serious error. Stop trading immediately and contact Business Support to resolve the issue.
 | String(255) |
| 131  | QuoteReqID | Y | — | The `OrdReqID` (#131) of the Quote Request message that has been rejected. | String(20) |
| 658  | QuoteRequestRejectReason | Y | — | The reason for the rejection:
1=Unknown symbol.
2=Exchange or security closed.
3=Quote request exceeds limit.
4=Not authorized to request quote.
99=Other. | String(2) |
| 146  | NoRelatedSym | Y | — | Number of related instruments in the request. For batch trades, value can be greater than 1 (one). | NumInGroup(2) |
| → | 55 | Symbol | Y | — | The symbol for the base and variable currencies of the currency pair in the format *baseCCY/variableCCY* (for example, “EUR/USD”). | String(35) |
| → | 60 | TransactTime | Y | — | The time the Quote Request reject message is generated in the format *YYYYMMDD-hh:mm:ss.sss*. | UTCTimestamp(21) |


### Execution Report

Integral sends an Execution Report message to:

* Confirm the receipt of an order
* Send order status information
* Send fill information on an order
* 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 

* [New](#new)
* [Fill](#fill)
* [Order reject](#order-reject)
* [Order status](#order-status)


#### New

Valid responses 

* None


Message format 

Execution Report format: new 

| Tag | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=8 | — |
| 115 | OnBehalfOfCompID | C | — | Your customer’s organization ID if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 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 | 0=New | Describes the purpose of the execution report. | char(1) |
| 39 | OrdStatus | Y |  | 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). | 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 | D=Previously quoted | Type of order | char(1) |
| 44 | Price | N | — | Price for Previously Quoted orders (`OrdType` (#40)=D) | Price(20) |
| 15 | Currency | Y(API) | — | Identifies currency used for amount | Currency(3) |
| 59 | TimeInForce | Y | 4=FOK (Fill Or Kill) | Specifies how long the order remains in effect | char(1) |
| 60 | TransactTime | Y | — | Time the transaction represented by this execution report occurred. | UTCTimestamp(21) |
| 541 | MaturityDate | C | — | The fixing date for NDF trades. Either this field or a value date (`SettlDate` (#64)) must be specified. If 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 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) |
| <Standard trailer>  | Y | — | — | — |


#### Fill

Execution Report format: fill 

| Tag | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=8 | — |
| 115 | OnBehalfOfCompID | C | — | Your customer’s organization ID if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 116 | OnBehalfOfSubID | C | — | The ID of your customer’s legal entity if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | 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 | 2=Filled | Identifies if the order is 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 | D=Previously quoted | Type of order | char(1) |
| 44 | Price | N | — | Price for Previously Quoted orders (`OrdType` (#40)=D).
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
* FXNDF
* FXFWD
* FXNDS
* FXSWAP

 | The security type:
* FOR: Foreign Exchange Contract. By default, for a given instrument, quote convention settings on the server automatically determine the trade type.

When the system is configured to accept both deliverable and non-deliverable trade types for specific instruments, the following values indicate the requested trade type:
* FXNDF: non-deliverable forward.
* FXFWD: deliverable forward.
* FXNDS: non-deliverable swap.
* FXSWAP: deliverable swap.

 | String(20)
 |
| 59 | TimeInForce | Y | 4=FOK (Fill Or Kill) | 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 | 0 (zero) | Always 0 (zero) for RFS fills. | 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) |
| 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) |
| 9410 | SettlementInst | N | — | The settlement instructions added to the RFS request from the trading app or the API | String(255) |
| 541 | MaturityDate | C | — | The fixing date for NDF trades. Either this field or a value date (`SettlDate` (#64)) must be specified. If 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 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) |
| <Standard trailer>  | Y | — | — | — |


#### Order reject

Execution Report format: reject 

| Tag | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=8 | — |
| 115 | OnBehalfOfCompID | C | — | Your customer’s organization ID if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 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) |
| 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 | D=Previously quoted | Type of order | char(1) |
| 44 | Price | N | — | Price for Previously Quoted orders (`OrdType` (#40)=D) | Price(20) |
| 15 | Currency | Y(API) | — | Identifies currency used for amount | Currency(3) |
| 167
 | SecurityType
 | N
 | * FOR
* FXNDF
* FXFWD
* FXNDS
* FXSWAP

 | The security type:
* FOR: Foreign Exchange Contract. By default, for a given instrument, quote convention settings on the server automatically determine the trade type.

When the system is configured to accept both deliverable and non-deliverable trade types for specific instruments, the following values indicate the requested trade type:
* FXNDF: non-deliverable forward.
* FXFWD: deliverable forward.
* FXNDS: non-deliverable swap.
* FXSWAP: deliverable swap.

 | String(20)
 |
| 59 | TimeInForce | Y | 4=FOK (Fill Or Kill) | 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) |
| 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) |
| 541 | MaturityDate | C | — | The fixing date for NDF trades. Either this field or a value date (`SettlDate` (#64)) must be specified. If 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 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) |
| <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 | — |
| 115 | OnBehalfOfCompID | C | — | Your customer’s organization ID if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 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
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) |
| 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 | D=Previously quoted | Type of order | char(1) |
| 44 | Price | N | — | Price for Previously Quoted orders (`OrdType` (#40)=D) | Price(20) |
| 15 | Currency | Y(API) | — | Identifies currency used for amount | Currency(3) |
| 167
 | SecurityType
 | N
 | * FOR
* FXNDF
* FXFWD
* FXNDS
* FXSWAP

 | The security type:
* FOR: Foreign Exchange Contract. By default, for a given instrument, quote convention settings on the server automatically determine the trade type.

When the system is configured to accept both deliverable and non-deliverable trade types for specific instruments, the following values indicate the requested trade type:
* FXNDF: non-deliverable forward.
* FXFWD: deliverable forward.
* FXNDS: non-deliverable swap.
* FXSWAP: deliverable swap.

 | String(20)
 |
| 59 | TimeInForce | Y | 4=FOK (Fill Or Kill) | Specifies how long the order remains in effect | char(1) |
| 151 | LeavesQty | Y | —. | Unfilled amount for the order. | 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) |
| 790 | OrdStatusReqID | N | — | Contains the `ClOrdID` (#11) present in the Order Status Request. | String(11) |
| 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

 | Either standard tenor symbol or a broken date in the format *YYYYMMDD*.
FX spot, outright: Not applicable.
FX swap: The far leg value date. | * 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) |
| 541 | MaturityDate | C | — | The fixing date for NDF trades. Either this field or a value date (`SettlDate` (#64)) must be specified. If 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 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) |
| <Standard trailer>  | Y | — | — | — |


### Batch trades

You can request and trade batches of trades in a single currency pair.

* [Quote Request (batch trades)](#quote-request-batch-trades)
* [Quote (batch trades)](#quote-batch-trades)
* [New Order – Multileg (batch trades)](#new-order-multileg-batch-trades)
* [Execution Report: New (batch trades)](#execution-report-new-batch-trades)
* [Execution Report: Fill (batch trades)](#execution-report-fill-batch-trades)


#### Quote Request (batch trades)

Customers send a Quote Request message with the `NoLegs` (#555) field set to Integral to request a stream of RFS quotes for batch trades.

Valid responses 

* Quote (#35=S)


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.

Quote Request format (batch trades) 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=R | — |
| 34  | MsgSeqNum | Y | — | Integer message sequence number. | SeqNum(9) |
| 49  | SenderCompID | Y | — | Your organization’s ID. | String(30) |
| 52  | SendingTime | Y | — | Time of message transmission. | UTCTimestamp(21) |
| 50  | SenderSubID | C | — | Your legal entity’s ID if you are trading directly with a liquidity provider. If you are trading on behalf of a customer, this field is not included. | String(30) |
| 56  | TargetCompID | Y | — | The Integral server’s ID. | String(30) |
| 115  | OnBehalfOfCompID | C | — | Your customer’s organization ID if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 116  | OnBehalfOfSubID | C | — | The ID of your customer’s legal entity if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 128  | DeliverToCompID | N | — | The ID of the liquidity provider organization to whom the request is sent. | String(30) |
| 448  | PartyID | C | — | When included on the message by itself and not as part of a repeating group: The ID of your organization’s user who submitted the message if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 1  | Account | N | — | For batch trades. Required if the batch is allocated to a single account. | String(30) |
| 131  | QuoteReqID | Y | — | Client-assigned unique ID for the quote request. For batch trades, this ID is included in all responses from Integral. | String(20) |
| 146  | NoRelatedSym | Y | 1 | Number of related instruments in the request. This value is always “1” (one). | NumInGroup(1) |
| 55  | Symbol | Y | — | The symbol for the base and variable currencies of the currency pair in the format *baseCCY/variableCCY* (for example, “EUR/USD”). | String(35) |
| 167  | SecurityType | Y | FOR=Foreign Exchange Contract | The security type. | String(20) |
| 54  | Side | C | 1=Buy
2=Sell
Space=2-Way
7=Undisclosed | The order side is from customer’s (FIX client) perspective. For FX swap, it is the side of the far leg.
Undisclosed batch (two-way price): Required with value “7”. | char(1) |
| 38  | OrderQty | C | — | Requested amount specified in the dealt currency `Currency` (#15). For FX swap, this is the near leg amount.
Required for single trade quotes.
Disclosed batch (one-way price): Not applicable and must not be included on the request for disclosed (one-way price) batch quote.
Undisclosed batch (two-way price): Required. | Qty(20) |
| 15  | Currency | Y | — | Dealt currency. | Currency(3) |
| 126  | ExpireTime | Y | — | The relative or absolute expiry time of the request 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 | — | The time the Quote Request is sent by the client. Automatically stamped by the FIX engine in the format *YYYYMMDD-hh:mm:ss.sss*. | UTCTimestamp(21) |
| 555  | NoLegs | Y | — | Repeating group for multi-leg trade details that represent a trade leg in the batch of trades. The value of this field indicates the number of groups and thus the number of legs. | NumInGroup(2) |
| → | 600 | LegSymbol | Y | — | The leg’s currency pair. | String(35) |
| → | 624 | LegSide | Y | * 1=Buy
* 2=Sell
* 7=Undisclosed (for undisclosed batch trades)

 | The side of the leg. | char(1) |
| → | 556 | LegCurrency | N | — | The dealt currency of the leg. | Currency(3) |
| → | 687 | LegQty | Y | — | The dealt amount of the leg. For undisclosed batch requests, this value is the net amount for given value date. For example, if two legs for 1W value date with amount 1M buy and 2M sell, then the value of this field for 1W will be 1M. The side of the leg is only revealed after price acceptance. | Qty(20) |
| → | 588 | LegSettDate | Y | — | Value date of the leg | LocalMktDate(8) |
| → | 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.* Venue (required for non-spot RFS MiFID 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.* Venue: MIC code (required for non-spot RFS MifFID-II legs).
* Customer Account (taker allocation account): LEI value.
* Customer Account Legal Entity: organization ID.

 | String(30) |
| → | 654 | LegRefID | Y | — | The unique ID of the trade represented by the leg in the batch. For multi-leg trades, such as swap trades, this ID should be the same for all legs of the trade. This element must be the last element in each `NoLegs` (#555) group. | String(20) |
| 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 | — | Required for NDF swaps only: The far-leg fixing date | LocalMktDate(8) |
| <Standard trailer>  | Y | — | — | — |


#### Quote (batch trades)

Integral sends a Quote message with batch trade quotes in response to a successful batch trade Quote Request.

Valid responses 

* Quote Cancel (#35=Z)
* New Order – Multileg (#35=AB)


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.

Quote format (batch trades) 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=S | — |
| 34  | MsgSeqNum | Y | — | Integer message sequence number. | SeqNum(9) |
| 49  | SenderCompID | Y | — | The Integral server’s ID. | String(30) |
| 52  | SendingTime | Y | — | Time of message transmission. | UTCTimestamp(21) |
| 56  | TargetCompID | Y | — | Your organization’s ID. | String(30) |
| 57  | TargetSubID | C | — | The originating legal entity’s 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(30) |
| 115  | OnBehalfOfCompID | C | — | Your customer’s organization ID if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 128  | DeliverToCompID | C | — | The ID of the customer trader who submitted the message if you are trading with liquidity providers on behalf of the customer. Otherwise not included. | String(30) |
| 129  | DeliverToSubID | C | — | The ID of your customer’s legal entity if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 40  | OrdType | Y | — | D=Previously quoted (for FX spot and FX outright RFS).
G=FX swap. | char(1) |
| 60  | TransactTime | Y | — | The time the message is generated. Automatically stamped by the FIX engine in the format *YYYYMMDD-hh:mm:ss.sss*. | UTCTimestamp(21) |
| 62  | ValidUntilTime | N | — | Validity duration of the quote in the format *YYYYMMDD-hh:mm:ss.sss*. Only the time portion is used as the duration. For example, 00000000-00:01:30.000 means the quote is good for 1 minute and 30 seconds. | UTCTimestamp(21) |
| 55  | Symbol | Y | — | The symbol for the base and variable currencies of the currency pair in the format *baseCCY/variableCCY* (for example, “EUR/USD”). | String(35) |
| 117  | QuoteID | Y | — | Unique quote ID assigned by Integral. | String(20) |
| 131  | QuoteReqID | Y | — | Client-assigned unique ID for the quote request, taken from the `QuoteReqID` (#131) on the originating Quote Request message. For batch trades, this ID is included in all responses from Integral. | String(20) |
| 537  | QuoteType | C | 0 (zero) = Indicative (the quote is not tradable)
1 = Tradable | Whether or not the quote is tradable.
Required for batch trades and must be tradable (537=1). | int(1) |
| 555  | NoLegs | Y | — | Repeating group for batch quotes that represent a trade leg in the batch of trades. The value of the `NoLegs` (#555) field indicates the number of groups and thus the number of legs. | NumInGroup(2) |
| → | 600 | LegSymbol | Y | — | The leg’s currency pair. | String(35) |
| → | 624 | LegSide | Y | — | The side of the leg:
1=Buy.
2=Sell.
7=Undisclosed (for undisclosed batch trades). | char(1) |
| → | 556 | LegCurrency | N | — | The dealt currency of the leg. | Currency(3) |
| → | 588 | LegSettDate | N | — | Value date of the leg. | LocalMktDate(8) |
| → | 681 | LegBidPx | N | — | Bid spot rate. | Price(20) |
| → | 684 | LegOfferPx | N | — | Offer spot rate. | Price(20) |
| → | 654 | LegRefID | Y | — | The unique ID of the trade represented by the leg in the batch. For multi-leg trades, such as swap trades, this ID should be the same for all legs of the trade. | String(20) |
| → | 1067 | LegBidFwdPoints | N | — | Bid forward points. For example, if the forward points for EUR/USD using market conventions, for any given tenor, is 8 then we expect to receive 0.0008 instead of 8. | PriceOffset(20) |
| → | 1068 | LegOfferFwdPoints | N | — | Offer forward points. For example, if the forward points for EUR/USD using market conventions, for any given tenor, is 8 then we expect to receive 0.0008 instead of 8. | PriceOffset(20) |
| <Standard trailer>  | Y | — | — | — |


#### New Order – Multileg (batch trades)

Customers send a New Order – Multileg message to submit a batch order 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 – Multileg format 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=AB | — |
| 35  | MsgType | Y | AB | — | — |
| 115  | OnBehalfOfCompID | C | — | Your customer’s organization ID if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 128  | DeliverToCompID | C | — | The ID of the customer trader who submitted the message if you are trading with liquidity providers on behalf of the customer. Otherwise not included. | String(30) |
| 11  | ClOrdID | Y | — | A session-scoped unique identifier assigned by the client. Must have the same value as the `QuoteReqID` (#131) on the originating Quote Request and Quote messages. If the client sends multiple New Order – Multileg messages for the same order, the same `ClOrdID` (#11) must be sent with each attempt. | String(30) |
| 40  | OrdType | Y | D=Previously quoted
H=Forex previously quoted | The order type. | char(1) |
| 60  | TransactTime | Y | — | The time the message is sent by the client. Automatically stamped by the FIX engine in the format:
*YYYYMMDD-hh*:*mm*:*ss*.*sss* | UTCTimestamp(21) |
| 117  | QuoteID | Y | — | The reference ID of the bid or offer dealing price. This is conditionally required, as the `OrdType` (#40) field is D (previously quoted). | String(20) |
| 55  | Symbol | Y | — | The symbol for the base and variable currencies of the currency pair in the following format:
*baseCCY*/*variableCCY*
(for example, “EUR/USD”) | String(35) |
| 15  | Currency | Y | — | The dealt currency. This may be the base or term currency of a currency pair. | Currency(3) |
| 167  | SecurityType | Y | FOR=Foreign Exchange Contract | The security type. | String(20) |
| 75  | TradeDate | Y | — | The trade date in the format *YYYYMMDD*. | LocalMktDate(8) |
| 460  | Product | Y | 4 | The asset class. The value is always 4=CURRENCY. | int(1) |
| 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) |
| → | 600 | LegSymbol | Y | — | The leg’s currency pair. | String(35) |
| → | 624 | LegSide | Y | (empty)=2-way
1=Buy
2=Sell\ | The side of the leg. | char(1) |
| → | 556 | LegCurrency | Y | — | The dealt currency of the leg. | Currency(3) |
| → | 687 | LegQty | Y | — | The amount of dealt currency of the leg. | Qty(20) |
| → | 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.* 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.* 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) |
| → | 654 | LegRefID | Y | — | The unique ID of the trade represented by the leg in the batch. For multi-leg trades, such as swap trades, this ID should be the same for all legs of the trade. This element must be the last element in each `NoLegs` (#555) group. | String(20) |
| → | 588 | LegSettDate | Y | — | Value date of the leg. | LocalMktDate(8) |
| <Standard trailer>  | Y | — | — | — |


#### Execution Report: New (batch trades)

Valid responses 

* None


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.

Execution Report format: new (batch trades) 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=8 | — |
| 115  | OnBehalfOfCompID | C | — | Your customer’s organization ID if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 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 | 0=New | Describes the purpose of the execution report. | char(1) |
| 39  | OrdStatus | Y |  | 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). | 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 | D=Previously quoted | Type of order | char(1) |
| 44  | Price | N | — | Price for Previously Quoted orders (`OrdType` (#40)=D) | Price(20) |
| 15  | Currency | Y(API) | — | Identifies currency used for amount | Currency(3) |
| 59  | TimeInForce | Y | 4=FOK (Fill Or Kill) | Specifies how long the order remains in effect | char(1) |
| 60  | TransactTime | Y | — | Time the transaction represented by this execution report occurred. | UTCTimestamp(21) |
| 541  | MaturityDate | C | — | The fixing date for NDF trades. Either this field or a value date (`SettlDate` (#64)) must be specified. If 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 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) |
| 555  | NoLegs | Y | — | (Batch) Repeating group for multi-leg trade details that represent a trade leg in the batch of trades. The value of the `NoLegs` (#555) field indicates the number of groups and thus the number of legs. | NumInGroup(2) |
| → | 600 | LegSymbol | Y | — | (Batch) The leg’s currency pair | String(35) |
| → | 624 | LegSide | Y | (empty)=2-way
1=Buy
2=Sell | (Batch) The side of the leg | char(1) |
| → | 556 | LegCurrency | Y | — | (Batch) The dealt currency of the leg | Currency(3) |
| → | 687 | LegQty | Y | — | The amount of dealt currency of the leg. | Qty(20) |
| → | 654 | LegRefID | Y | — | (Batch) The unique ID of the trade represented by the leg in the batch. For multi-leg trades, such as swap trades, this ID should be the same for all legs of the trade. | String(20) |
| → | 588 | LegSettDate | Y | — | (Batch) Value date of the leg | LocalMktDate(8) |
| <Standard trailer>  | Y | — | — | — |


#### Execution Report: Fill (batch trades)

Valid responses 

* None


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.

Execution Report format: fill (batch trades) 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=8 | — |
| 115  | OnBehalfOfCompID | C | — | Your customer’s organization ID if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 116  | OnBehalfOfSubID | C | — | The ID of your customer’s legal entity if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | 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 | 2=Filled | Identifies if the order is 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 | D=Previously quoted | Type of order | char(1) |
| 44  | Price | N | — | Price for Previously Quoted orders (`OrdType` (#40)=D).
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 | The security type. | String(20) |
| 59  | TimeInForce | Y | 4=FOK (Fill Or Kill) | 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 | 0 (zero) | Always 0 (zero) for RFS fills. | 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) |
| 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) |
| 541  | MaturityDate | C | — | The fixing date for NDF trades. Either this field or a value date (`SettlDate` (#64)) must be specified. If 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 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) |
| 555  | NoLegs | Y | — | (Batch) Repeating group for multi-leg trade details that represent a trade leg in the batch of trades. The value of the `NoLegs` (#555) field indicates the number of groups and thus the number of legs. | NumInGroup(2) |
| → | 600 | LegSymbol | Y | — | (Batch) The leg’s currency pair | String(35) |
| → | 624 | LegSide | Y | (empty)=2-way
1=Buy
2=Sell | (Batch) The side of the leg | char(1) |
| → | 556 | LegCurrency | Y | — | (Batch) The dealt currency of the leg | Currency(3) |
| → | 687 | LegQty | Y | — | The amount of dealt currency of the leg. | Qty(20) |
| → | 654 | LegRefID | Y | — | (Batch) The unique ID of the trade represented by the leg in the batch. For multi-leg trades, such as swap trades, this ID should be the same for all legs of the trade. | String(20) |
| → | 566 | LegPrice | N | — | (Batch) All-in rate of the executed trade | Price(20) |
| → | 588 | LegSettDate | Y | — | (Batch) Value date of the leg | LocalMktDate(8) |
| → | 1893 | LegExecID | N | — | (Batch) The ID of the executed trade | String(20) |
| <Standard trailer>  | Y | — | — | — |


### Book of prices

Request a sorted book of streaming prices with RFS workflow messages:

* [Quote Request (book of prices)](#quote-request-book-of-prices)
`TargetCompId` (#128) set to one of the following:
  * "ALL" to send your request to all of your configured providers.
  * A comma-separated list of providers to receive your request.
* [Quote (book of prices)](#quote-book-of-prices)
You receive your streaming RFS book as Quote messages (`MsgType` (#35)=S) with the prices in the book defined as legs by the repeating group .`NoLegs` (#555).
* [New Order – Single](#new-order-single)
To request to trade a quote in the book, you send a New Order - Single message (`MsgType` (#35)=D) with the following information from the book:
  * `QuoteID` (#117) set to an individual quote ID, either `BidQuoteID` (#11016) or `OfferQuoteID` (#11017).
  * `Price` (#44) set to the all-in quote rate, either `LegBidPx` (#681) or `LegOfferPx` (#684).


#### Quote Request (book of prices)

Request a sorted book of streaming prices with a Quote Request message with `DeliverToCompID` (#128) set to one of the following:

* "ALL" to send your request to all of your configured providers.
* A comma-separated list of providers to receive your request.


Valid responses 

* Quote (#35=S)


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.

Quote Request format (book of prices ) 

| Tag | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=R | — |
| 34 | MsgSeqNum | Y | — | Integer message sequence number. | SeqNum(9) |
| 49 | SenderCompID | Y | — | Your organization’s ID. | String(30) |
| 52 | SendingTime | Y | — | Time of message transmission. | UTCTimestamp(21) |
| 50 | SenderSubID | C | — | Your legal entity’s ID if you are trading directly with a liquidity provider. If you are trading on behalf of a customer, this field is not included. | String(30) |
| 56 | TargetCompID | Y | — | The Integral server’s ID. | String(30) |
| 115 | OnBehalfOfCompID | C | — | Your customer’s organization ID if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 116 | OnBehalfOfSubID | C | — | The ID of your customer’s legal entity if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 128 | DeliverToCompID | N | — | The ID of the liquidity provider organization to whom the request is sent.
To request a streaming book of prices instead of a single stream, you need to set the value of `TargetCompId` (#128) to one of the following:* "ALL" to send your request to all of your configured providers.
* A comma-separated list of providers to receive your request.

 | String(30) |
| 448 | PartyID | C | — | When included on the message by itself and not as part of a repeating group: The ID of your organization’s user who submitted the message if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 1 | Account | N | — | For batch trades. Required if the batch is allocated to a single account. | String(30) |
| 131 | QuoteReqID | Y | — | Client-assigned unique ID for the quote request. For batch trades, this ID is included in all responses from Integral. | String(20) |
| 146 | NoRelatedSym | Y | 1 | Number of related instruments in the request. This value is always “1” (one). | NumInGroup(1) |
| 55 | Symbol | Y | — | The symbol for the base and variable currencies of the currency pair in the format *baseCCY/variableCCY* (for example, “EUR/USD”). | String(35) |
| 167 | SecurityType | Y | FOR=Foreign Exchange Contract | The security type. | String(20) |
| 54 | Side | C | 1=Buy
2=Sell
Space=2-Way
7=Undisclosed | The order side is from customer’s (FIX client) perspective. For FX swap, it is the side of the far leg.
Undisclosed batch (two-way price): Required with value “7”. | char(1) |
| 38 | OrderQty | C | — | Requested amount specified in the dealt currency `Currency` (#15). For FX swap, this is the near leg amount.
Required for single trade quotes.
Disclosed batch (one-way price): Not applicable and must not be included on the request for disclosed (one-way price) batch quote.
Undisclosed batch (two-way price): Required. | Qty(20) |
| 64 | SettlDate | N | * Tenor
* Broken date

 | Either a standard tenor symbol or broken date in *YYYYMMDD* format for outright and swap.
If the field is empty, it is considered a spot stream request.* FX spot: Spot date.
* FX outright: Value date.
* FX swap (spot-forward and forward-forward): Near leg value date.

 | * Broken date: LocalMktDate(10)
* Tenor: String(30)

 |
| 193 | SettlDate2 | N | * Tenor
* 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)

 |
| 192 | OrderQty2 | N | — | Requested amount specified in the dealt currency `Currency` (#15). For FX swap, this is the far leg amount. | Qty(20) |
| 15 | Currency | Y | — | Dealt currency. | Currency(3) |
| 40 | OrdType | Y | — | D=Previously quoted (for FX spot RFS, FX outright RFS, and NDF).
G=FX swap. | char(1) |
| 264 | MarketDepth | Y | 1 (one)=best price/TOB | How prices in the book are aggregated.
The only value supported is 264=1 for best-price/top-of-book (TOB) aggregation.
If the field is not included or is set to any value other than "1", then full-book aggregation is used.This field does not control the number of tiers sent in the Quote Message.
 | UTCTimestamp(21) |
| 126 | ExpireTime | Y | — | The relative or absolute expiry time of the request 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 | — | The time the Quote Request is sent by the client. Automatically stamped by the FIX engine in the format *YYYYMMDD-hh:mm:ss.sss*. | UTCTimestamp(21) |
| 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 | — | Required for NDF swaps only: The far-leg fixing date | LocalMktDate(8) |
| <Standard trailer>  | Y | — | — | — |


#### Quote (book of prices)

You receive your streaming RFS book as Quote messages (`MsgType` (#35)=S) with the prices in the book defined as legs by the repeating group .`NoLegs` (#555).

Because prices are sorted best-to-worst, the bid and offer prices on each leg may come from different providers.

With books of single-leg prices, such as spot and outright, the number of legs matches the number of providers who respond with a price.

For books of swap prices, the number of legs is twice the number of providers to represent near-leg and far-leg prices.

Hitting a quote in the book

To request to trade a quote in the book, you send a New Order - Single message (`MsgType` (#35)=D) with the following information from the book:

* `QuoteID` (#117) set to an individual quote ID, either `BidQuoteID` (#11016) or `OfferQuoteID` (#11017).
* `Price` (#44) set to the all-in quote rate, either `LegBidPx` (#681) or `LegOfferPx` (#684).


Valid responses 

* Quote Cancel (#35=Z)
* New Order – Single Leg (#35=D)


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.

Quote format (book of prices) 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=S | — |
| 34  | MsgSeqNum | Y | — | Integer message sequence number. | SeqNum(9) |
| 49  | SenderCompID | Y | — | The Integral server’s ID. | String(30) |
| 52  | SendingTime | Y | — | Time of message transmission. | UTCTimestamp(21) |
| 56  | TargetCompID | Y | — | Your organization’s ID. | String(30) |
| 57  | TargetSubID | C | — | The originating legal entity’s 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(30) |
| 115  | OnBehalfOfCompID | C | — | Your customer’s organization ID if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 128  | DeliverToCompID | C | — | The ID of the customer trader who submitted the message if you are trading with liquidity providers on behalf of the customer. Otherwise not included. | String(30) |
| 129  | DeliverToSubID | C | — | The ID of your customer’s legal entity if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 15  | Currency | N | — | Dealt currency | Currency(3) |
| 40  | OrdType | Y | — | D=Previously quoted (for FX spot and FX outright RFS).
G=FX swap. | char(1) |
| 54  | Side | N | 1=Buy
2=Sell
Empty=2-Way | The order side is from customer’s (FIX client) perspective. For FX swap, it is the side of the far leg. | char(1) |
| 60  | TransactTime | Y | — | The time the message is generated. Automatically stamped by the FIX engine in the format *YYYYMMDD-hh:mm:ss.sss*. | UTCTimestamp(21) |
| 62  | ValidUntilTime | N | — | Validity duration of the quote in the format *YYYYMMDD-hh:mm:ss.sss*. Only the time portion is used as the duration. For example, 00000000-00:01:30.000 means the quote is good for 1 minute and 30 seconds. | UTCTimestamp(21) |
| 64  | SettlDate | N | — | The field is specified in the format *YYYYMMDD*.* FX spot: Spot date.
* FX outright: Outright value date.
* FX spot-forward swap: Spot date.
* FX forward-forward swap: Near value date.

 | LocalMktDate(10) |
| 55  | Symbol | Y | — | The symbol for the base and variable currencies of the currency pair in the format *baseCCY/variableCCY* (for example, “EUR/USD”). | String(35) |
| 117  | QuoteID | Y | — | The book ID. | String(20) |
| 131  | QuoteReqID | Y | — | Client-assigned unique ID for the quote request, taken from the `QuoteReqID` (#131) on the originating Quote Request message. For batch trades, this ID is included in all responses from Integral. | String(20) |
| 167  | SecurityType | Y | FOR=Foreign Exchange Contract | The security type. | String(20) |
| 537  | QuoteType | C | 0 (zero) = Indicative (the quote is not tradable)
1 = Tradable | Whether or not the quote is tradable. | int(1) |
| 555  | NoLegs | Y | — | Repeating group of prices in the book.
With books of single-leg prices, such as spot and outright, the number of legs matches the number of providers who respond with a price.
For books of swap prices, the number of legs is twice the number of providers to represent near-leg and far-leg prices. | NumInGroup(—) |
| → | 600 | LegSymbol | Y | — | The leg’s currency pair. | String(35) |
| → | 624 | LegSide | Y | (empty)=2-way
1=Buy
2=Sell | The side of the leg. | char(1) |
| → | 556 | LegCurrency | Y | — | The dealt currency of the leg. | Currency(3) |
| → | 687 | LegQty | Y | — | The amount of dealt currency of the leg. | Qty(20) |
| → | 588 | LegSettDate | Y | — | Value date of the leg. | LocalMktDate(8) |
| → | 681 | LegBidPx | Y | — | Bid all-in rate. | Price(20) |
| → | 684 | LegOfferPx | Y | — | Offer all-in rate. | Price(20) |
| → | 1067 | LegBidFwdPoints | C | — | Bid forward points. for outrights and forward legs of swaps. For example, if the forward points for EUR/USD using market conventions, for any given tenor, is 8 then we expect to receive 0.0008 instead of 8. | PriceOffset(20) |
| → | 1068 | LegOfferFwdPoints | C | — | Offer forward points. for outrights and forward legs of swaps.. For example, if the forward points for EUR/USD using market conventions, for any given tenor, is 8 then we expect to receive 0.0008 instead of 8. | PriceOffset(20) |
| → | 7914 | LegBidSpotRate | Y | — | Bid spot rate. | Price(20) |
| → | 7915 | LegOfferSpotRate | Y | — | Offer spot rate. | Price(20) |
| → | 11016 | BidQuoteID | Y | — | Bid quote ID assigned by provider. Don't assume that a leg's bid and offer quote IDs are the same. Because the book is sorted, bid and offer quotes on a leg can come from different providers and different IDs. | String(20) |
| → | 11017 | OfferQuoteID | Y | — | Offer quote ID assigned by provider. Don't assume that a leg's bid and offer quote IDs are the same. Because the book is sorted, bid and offer quotes on a leg can come from different providers and different IDs. | String(20) |
| → | 11018 | BidLP | Y | — | ID of the provider responding with the bid quote. | String(35) |
| → | 11019 | OfferLP | Y | — | ID of the provider responding with the offer quote. | String(35) |
| → | 11020 | BidLPMidRate | — | — | The mid rate from the bid-quote provider. | Price(20) |
| → | 11021 | OfferLPMidRate | — | — | The mid rate from the offer-quote provider. | Price(20) |
| <Standard trailer>  | Y | — | — | — |


### Trading on Integral MTF

* [Quote Request (MTF)](#quote-request-mtf)
* [Execution Report: Fill (MTF)](#execution-report-fill-mtf)
* [Execution Report Acknowledgement](#execution-report-acknowledgement)
* [Integral MTF parameters](#integral-mtf-parameters)


#### Quote Request (MTF)

Customers request execution on Integral MTF by sending a Quote Request message with the `NoPartyIDs` (#453) repeating group set to the Market Identifier Code (MIC) "IMTF":

* `NoPartyIDs` (#453)
  * `PartyID` (#448)=IMTF
  * `PartyIDSource` (#447)=G (Market Identifier Code (MIC))
  * `PartyRole` (#452)=64 (Multilateral Trading Facility)


For more information about Integral MTF parameters and configuration, see [Integral MTF parameters](#integral-mtf-parameters).

Valid responses 

* Quote (#35=S)


Message format 

Quote Request format (single trades) (MTF) 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=R | — |
| 34  | MsgSeqNum | Y | — | Integer message sequence number. | SeqNum(9) |
| 49  | SenderCompID | Y | — | Your organization’s ID. | String(30) |
| 52  | SendingTime | Y | — | Time of message transmission. | UTCTimestamp(21) |
| 50  | SenderSubID | C | — | Your legal entity’s ID if you are trading directly with a liquidity provider. If you are trading on behalf of a customer, this field is not included. | String(30) |
| 56  | TargetCompID | Y | — | The Integral server’s ID. | String(30) |
| 115  | OnBehalfOfCompID | C | — | Your customer’s organization ID if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 116  | OnBehalfOfSubID | C | — | The ID of your customer’s legal entity if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 128  | DeliverToCompID | N | — | The ID of the liquidity provider organization to whom the request is sent. | String(30) |
| 448  | PartyID | C | — | When included on the message by itself and not as part of a repeating group: The ID of your organization’s user who submitted the message if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 1  | Account | N | — | For batch trades. Required if the batch is allocated to a single account. | String(30) |
| 131  | QuoteReqID | Y | — | Client-assigned unique ID for the quote request. For batch trades, this ID is included in all responses from Integral. | String(20) |
| 146  | NoRelatedSym | Y | 1 | Number of related instruments in the request. This value is always “1” (one). | NumInGroup(1) |
| 55  | Symbol | Y | — | The symbol for the base and variable currencies of the currency pair in the format *baseCCY/variableCCY* (for example, “EUR/USD”). | String(35) |
| 167  | SecurityType | Y | FOR=Foreign Exchange Contract | The security type. | String(20) |
| 54  | Side | C | 1=Buy
2=Sell
Space=2-Way
7=Undisclosed | The order side is from customer’s (FIX client) perspective. For FX swap, it is the side of the far leg.
Undisclosed batch (two-way price): Required with value “7”. | char(1) |
| 38  | OrderQty | C | — | Requested amount specified in the dealt currency `Currency` (#15). For FX swap, this is the near leg amount.
Required for single trade quotes.
Disclosed batch (one-way price): Not applicable and must not be included on the request for disclosed (one-way price) batch quote.
Undisclosed batch (two-way price): Required. | Qty(20) |
| 64  | SettlDate | N | * Tenor
* Broken date

 | The field contains either a standard tenor symbol or broken date in *YYYYMMDD* format for outright and swap.
If the field is empty, it is considered a spot stream request.* FX spot: Spot date.
* FX outright: Value date.
* FX swap (spot-forward and forward-forward): Near leg value date.

 | * Broken date: LocalMktDate(10)
* Tenor: String(30)

 |
| 193  | SettlDate2 | N | * Tenor
* 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)

 |
| 192  | OrderQty2 | N | — | Requested amount specified in the dealt currency `Currency` (#15). For FX swap, this is the far leg amount. | Qty(20) |
| 15  | Currency | Y | — | Dealt currency. | Currency(3) |
| 40  | OrdType | Y | — | D=Previously quoted (for FX spot RFS, FX outright RFS, and NDF).
G=FX swap. | char(1) |
| 11060  | WorkflowTypeParam | N | 0=RFS workflow
1=RFQ workflow | Indicates the workflow for which the request is made:
0=RFS workflow: request a stream of quotes. `ExpireTime` (#126) specifies the expiry time of the request.
1=RFQ workflow: request a single quote that is valid for a duration specified by `ExpireTime` (#126). The server must be configured to enable the RFQ workflow. Please contact your Technical Account Manager to discuss settings. | int(1) |
| 126  | ExpireTime | Y | See descr. | VoobaThis value of this field depends on the value of the `WorkflowTypeParam` (#11060) field that indicates if you are trading in the RFS workflow (11060=0) or the RFQ workflow (also known as "held rates, 11060=1).
**RFS workflow (**`11060=0`**):**
This field is the expiry time of the request. The date portion *YYYYMMDD* determines whether the value is an relative or absolute expiry time:
**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`.
**RFQ workflow ("held rates", **`11060=1`**):**\The server must be configured to enable the RFQ workflow. Please contact your Technical Account Manager to discuss settings.
This field is the requested duration for quote validity in the format *YYYYMMDD-hh:mm:ss.sss*. The date component *YYYYMMDD* must match the date component of `SendingTime` (#52) of the request.
Look in `ValidUntilTime` (#62) of the quote for the validity duration.
Minimum and maximum values are:* Min: 30 seconds *YYYYMMDD*-00:00:30.000
* Max: 24 hours *YYYYMMDD*-24:00:00.000

 | UTCTimestamp(21) |
| 60  | TransactTime | Y | — | The time the Quote Request is sent by the client. Automatically stamped by the FIX engine in the format *YYYYMMDD-hh:mm:ss.sss*. | UTCTimestamp(21) |
| 453  | NoPartyIDs | N | Minimum 1 (one). See description. | (Integral MTF) For execution on Integral MTF, the MIC code is required. The number of repeating groups depends on the MTF parameters included on the message. See [Integral MTF parameters](#integral-mtf-parameters).
Repeating groups can represent the following:* MIC ("IMFT", required on every request to trigger execution in Integral MTF)
* Executing user
* Executing firm LEI
* Customer account
* Investment decision maker

 | Qty(1) |
| → | 448 | PartyID | C | See description. | (Integral MTF) Required if `NoPartyIDs` (#453) is included.* MIC: "IMFT", required on every request to trigger execution in Integral MTF.
* Executing user: Executing user ID. If not supplied on the message, the value of the Integral MTF Default Executing User is picked up from the logged in/connecting organization.
* Executing firm LEI: Executing firm code. If not supplied on the message, the Executing Firm LEI value from the logged in/connecting organization's legal entity or organization is used.
* Customer account: Customer account code. If not supplied on the message, the Customer Account value from the customer's Legal Entity or Organization is used.
* Investment decision maker: Executing investment decision maker ID. If not supplied on the message, the value of the Integral MTF Default Investment Decision Maker is picked up from the logged in/connecting organization

 | String(20) |
| → | 447 | PartyIDSource | C | G=MIC
D=Proprietary code | (Integral MTF) Required if `NoPartyIDs` (#453) is included.* MIC: G
* Executing user: D
* Executing firm LEI: D
* Customer account: D
* Investment decision maker: D

 | char(1) |
| → | 452 | PartyRole | C | See description. | (Integral MTF) Required if `NoPartyIDs` (#453) is included.* MIC: 64
* Executing user: 12 (must also specify `PartyRoleQualifier` (#2376))
* Executing firm LEI: 1
* Customer account: 24
* Investment decision maker: 122 (must also specify `PartyRoleQualifier` (#2376))

 | int(2) |
| → | 2376 | PartyRoleQualifier | C | 22=Algorithm
24=Natural person | Required for Executing User (PartyRole (#452)= 12) and Investment Decision Maker (PartyRole (#452)= 122). | int(2) |
| 29  | LastCapacity | N | 1=Agent
3=Cross as Principal
4=Riskless Principal | Trading Capacity for non-batch trades.
1=Agent (AOTC, any other capacity).
3=Cross as Principal (MTCH, matched principal).
4=Riskless Principal (DEAL, dealing on own account). | int(1) |
| 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 | — | Required for NDF swaps only: The far-leg fixing date | LocalMktDate(8) |
| 9410  | SettlementInst | N | — | The settlement instructions added to the RFS request from the trading app or the API. | String (255) |
| <Standard trailer>  | Y | — | — | — |


#### Execution Report: Fill (MTF)

Integral MTF sends the following parameters on the Execution Report so that you can meet regulatory requirements:

* RTN
* UTI
* ISIN
* Liquidity Provider LEI


For more information about Integral MTF parameters and configuration, see [Integral MTF parameters](#integral-mtf-parameters).

Valid responses 

* None


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.

Execution Report format: fill (MTF) 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=8 | — |
| 115  | OnBehalfOfCompID | C | — | Your customer’s organization ID if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 116  | OnBehalfOfSubID | C | — | The ID of your customer’s legal entity if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | 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 | 2=Filled | Identifies if the order is 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). | 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 | D=Previously quoted | Type of order | char(1) |
| 44  | Price | N | — | Price for Previously Quoted orders (`OrdType` (#40)=D).
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) |
| 59  | TimeInForce | Y | 4=FOK (Fill Or Kill) | 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). | Price(20) |
| 32  | LastQty | C | — | Quantity bought/sold on this (last) fill. Required if `ExecType` (#150)=F (Trade). | Qty(20) |
| 151  | LeavesQty | Y | 0 (zero) | Always 0 (zero) for RFS fills. | 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). | 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) |
| 9410  | SettlementInst | N | — | The settlement instructions added to the RFS request from the trading app or the API | String(255) |
| 541  | MaturityDate | C | — | The fixing date for NDF trades. Either this field or a value date (`SettlDate` (#64)) must be specified. If 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 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) |
| 9395  | RTN | N | — | (MTF) Regulatory trade ID as received from the external venue. | String(52) |
| 9378  | UTIPrefix | N | — | (MTF) Unique code for the code issuing authority for single-leg trades and near leg of swaps | String(20) |
| 9379  | UTIFarPrefix | N | — | (MTF) Unique code for the code issuing authority for far leg of swaps. | String(20) |
| 9380  | UTI | N | — | (MTF) Unique code for single-leg trade, near leg of swaps, and legs of multi-leg trades. | String(52) |
| 9381  | UTIFar | N | — | (MTF) Unique code for far leg of swaps. | String(52) |
| 48  | SecurityID | C | — | (MTF) Required if `SecurityIDSource` (#22) is included. Security identifier value. For swaps, the near- and far-leg values are comma separated (*nearLegISIN*,*farLegISIN*). | String(12) |
| 22  | SecurityIDSource | C | 4=ISIN number | (MTF) Required if `SecurityID` (#48) is included. Identifies class or source of the `SecurityID` (#48) value. | String(1) |
| 453  | NoPartyIDs | N | 1 | (MTF) A repeating group that contains the Liquidity Provider LEI. | Qty(1) |
| → | 448 | PartyID | C | — | (MTF) The Liquidity Provider LEI. Required if `NoPartyIDs` (#453) is included. | String(20) |
| → | 447 | PartyIDSource | C | N=LEI | (MTF) Indicates that the ID is an LEI.. | char(1) |
| → | 452 | PartyRole | C | 35=Liquidity Provider | (MTF) Indicates the LEI is for the Liquidity Provider. | int(2) |
| <Standard trailer>  | Y | — | — | — |


#### Execution Report Acknowledgement

This message is optional if you trade on Integral MTF and is only sent if required by your organization. Contact your Integral Technical Account Manager if you need these parameters for regulatory requirements.

For more information about Integral MTF parameters and configuration, see [Integral MTF parameters](#integral-mtf-parameters).

Valid responses 

* None


Message format 

Execution Report Acknowledgement format 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=BN | — |
| 34  | MsgSeqNum | Y | — | Integer message sequence number. | SeqNum(9) |
| 49  | SenderCompID | Y | — | The Integral server’s ID. | String(30) |
| 52  | SendingTime | Y | — | Time of message transmission. | UTCTimestamp(21) |
| 56  | TargetCompID | Y | — | Your organization’s ID. | String(30) |
| 57  | TargetSubID | C | — | The originating legal entity’s 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(30) |
| 115  | OnBehalfOfCompID | C | — | Your customer’s organization ID if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 128  | DeliverToCompID | C | — | The ID of the customer trader who submitted the message if you are trading with liquidity providers on behalf of the customer. Otherwise not included. | String(30) |
| 129  | DeliverToSubID | C | — | The ID of your customer’s legal entity if you are dealing with the liquidity provider as a facilitator on behalf of the customer. Otherwise not included. | String(30) |
| 768  | NoTrdRegTimestamps | C | 2 | Regulatory timestamps, required for MTF trading. | NumInGroup(1) |
| → | 769 | TrdRegTimestamp | C | — | Timestamp in the format *YYYYMMDD-hh:mm:ss.sss*. | UTCTimestamp(21) |
| → | 770 | TrdRegTimestampType | C | 10=Order Submission Time.
1=Execution Time. | Regulatory timestamp type. | int(2) |
| <Standard trailer>  | Y | — | — | — |


#### Integral MTF parameters

Integral FIX messaging supports execution on Integral MTF.

Per your organization's structure and requirements, you can either supply the parameters on FIX messages on a request-by-request basis or work with your Integral Technical Account Manager to configure these parameters in the Integral admin database. Please note that these parameters are necessary for onboarding onto Integral MTF for regulatory compliance.

You send the following parameters to Integral MTF:

* Market Identifier Code (MIC) ("IMTF", required on every request to trigger execution in Integral MTF)
* Executing user
* Executing firm LEI
* Customer account
* Investment decision maker
* Trading capacity


Parameters sent on FIX messages override settings in the system.

Integral MTF sends the following parameters back so that you can meet regulatory requirements. These parameters can also be made available by asynchronous STP messaging or by an end-of-day file download.

* Provider LEI
* ISIN
* UTI
* RTN
* Order Submission Time
* Trade Execution Time


##### Basic configuration to trade on Integral MTF

You must set the MIC to "IMTF" to trigger execution on Integral MTF.

Omitting the MIC or setting to any other value results in off-MTF execution.

##### FIX messages sent to Integral MTF

You send MTF parameters on the Quote Request (`MsgType` (#35)=R) FIX message.

###### Market Identifier Code (MIC)

The MIC is required for all messages sent to Integral MTF.

MTF parameters for MIC code 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| 453  | NoPartyIDs | Y | Minimum 1 (one). See description. | For execution on Integral MTF, the MIC is required. The number of repeating groups depends on the MTF parameters included on the message. | Qty(1) |
| → | 448 | PartyID | Y | IMTF | Venue ID. Always "IMTF". Required for the trade to be executed on Integral MTF. | String(20) |
| → | 447 | PartyIDSource | Y | G=Market Identifier Code (MIC) | Always "G". Required for messages sent to an MTF. | char(1) |
| → | 452 | PartyRole | Y | 64=Multilateral Trading Facility | Always "64". Required for messages sent to an MTF. | int(2) |


###### Executing user

MTF parameters for executing firm user 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| 453  | NoPartyIDs | Y | See description. | If not supplied on the message, the value of the Integral MTF Default Executing User is picked up from the logged in/connecting organization. The number of repeating groups depends on the MTF parameters included on the message. | Qty(1) |
| → | 448 | PartyID | N | — | Executing user ID. | String(20) |
| → | 447 | PartyIDSource | N | D=Proprietary/custom code | Indicates that the ID is a proprietary code in Integral MTF. | char(1) |
| → | 452 | PartyRole | N | 12=Executing User | Indicates the ID is for the executing user. | int(2) |
| → | 2376 | PartyRoleQualifier | C | 22=Algorithm
24=Natural person | Only required for Executing User (PartyRole (#452)= 12) and Investment Decision Maker (PartyRole (#452)= 122). | int(2) |


###### Executing firm LEI

MTF parameters for executing firm LEI 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| 453  | NoPartyIDs | Y | See description. | If not supplied on the message, the Executing Firm LEI value from the logged in/connecting organization's legal entity or organization is used. The number of repeating groups depends on the MTF parameters included on the message. | Qty(1) |
| → | 448 | PartyID | N | — | Executing firm code. | String(20) |
| → | 447 | PartyIDSource | N | D=Proprietary/custom code | Indicates that the ID is a proprietary code in Integral MTF. | char(1) |
| → | 452 | PartyRole | N | 1=Executing Firm | Indicates the ID is for the executing firm. | int(2) |


###### Customer account

MTF parameters for customer account 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| 453  | NoPartyIDs | Y | See description. | If not supplied on the message, the Customer Account value from the customer's Legal Entity or Organization is used. The number of repeating groups depends on the MTF parameters included on the message. | Qty(1) |
| → | 448 | PartyID | N | — | Customer account code. | String(20) |
| → | 447 | PartyIDSource | N | D=Proprietary/custom code | Indicates that the ID is a proprietary code in Integral MTF. | char(1) |
| → | 452 | PartyRole | N | 24=Customer Account | Indicates the ID is for the customer account. | int(2) |


###### Investment decision maker

MTF parameters for investment decision maker 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| 453  | NoPartyIDs | Y | See description. | If not supplied on the message, the value of the Integral MTF Default Investment Decision Maker is picked up from the logged in/connecting organization.. The number of repeating groups depends on the MTF parameters included on the message. | Qty(1) |
| → | 448 | PartyID | N | — | Executing investment decision maker ID. | String(20) |
| → | 447 | PartyIDSource | N | D=Proprietary/custom code | Indicates that the ID is a proprietary code in Integral MTF. | char(1) |
| → | 452 | PartyRole | N | 122=Investment Decision Maker | Indicates the ID is for the investment decision maker. | int(2) |
| → | 2376 | PartyRoleQualifier | C | 22=Algorithm
24=Natural person | Only required for Executing User (PartyRole (#452)= 12) and Investment Decision Maker (PartyRole (#452)= 122). | int(2) |


###### Trading capacity

MTF parameters for trading capacity 

| Tag | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| 29 | LastCapacity | N | 1=Agent (AOTC, any other capacity).
3=Cross as Principal (MTCH, matched principal).
4=Riskless Principal (DEAL, dealing on own account). | Trading Capacity for non-batch trades. | int(1) |


##### FIX messages received from Integral MTF

Integral MTF sends parameters on the following messages so that you can meet regulatory requirements.

* Execution Report (`MsgType` (#35)=8)
* Execution Report Acknowledgment (`MsgType` (#35)=BN)


###### Execution Report

MTF parameters received from Integral MTF on Execution Report 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| 9395  | RTN | N | — | Regulatory trade ID as received from the external venue. | String(52) |
| 9378  | UTIPrefix | N | — | Unique code for the code issuing authority for single-leg trades and near leg of swaps | String(20) |
| 9379  | UTIFarPrefix | N | — | Unique code for the code issuing authority for far leg of swaps. | String(20) |
| 9380  | UTI | N | — | Unique code for single-leg trade, near leg of swaps, and legs of multi-leg trades. | String(52) |
| 9381  | UTIFar | N | — | Unique code for far leg of swaps. | String(52) |
| 48  | SecurityID | C | — | Required if `SecurityIDSource` (#22) is included. Security identifier value. For swaps, the near- and far-leg values are comma separated (*nearLegISIN*,*farLegISIN*). | String(12) |
| 22  | SecurityIDSource | C | 4=ISIN number | Required if `SecurityID` (#48) is included. Identifies class or source of the `SecurityID` (#48) value. | String(1) |
| 453  | NoPartyIDs | N | 1 | A repeating group that contains the Liquidity Provider LEI. | Qty(1) |
| → | 448 | PartyID | C | — | The Liquidity Provider LEI. Required if `NoPartyIDs` (#453) is included. | String(20) |
| → | 447 | PartyIDSource | C | N=LEI | Indicates that the ID is an LEI.. | char(1) |
| → | 452 | PartyRole | C | 35=Liquidity Provider | Indicates the LEI is for the Liquidity Provider. | int(2) |


###### Execution Report Acknowledgment

This message is optional and is only sent if required by your organization. Contact your Integral Technical Account Manager if you need these parameters for regulatory requirements.

MTF parameters received from Integral MTF on Execution Report Acknowledgment (optional) 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| 768  | NoTrdRegTimestamps | C | 2 | Regulatory timestamps, required for MTF trading. | NumInGroup(1) |
| → | 769 | TrdRegTimestamp | C | — | Timestamp in the format *YYYYMMDD-hh:mm:ss.sss*. | UTCTimestamp(21) |
| → | 770 | TrdRegTimestampType | C | 10=Order Submission Time
1=Execution Time | Regulatory timestamp type. | int(2) |


### Business Message Reject

Integral sends the Business Message Reject message to notify the customer app of a rejected New Order - Single 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 | 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:

* [Quote Request (single trades)](#quote-request-single-trades)
* [Quote (single trades)](#quote-single-trades)
* [Quote Request (batch trades)](#quote-request-batch-trades-1)
* [Quote (batch trades)](#quote-batch-trades-1)
* [New Order - Single](#new-order---single)
* [New Order - Multileg (batch trades)](#new-order---multileg-batch-trades)
* [Execution Report](#execution-report-2)


#### Quote Request (single trades)

Quote Request MiFID data (single trades) 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=R | — |
| 48  | SecurityID | N | — | Required if `SecurityIDSource` (#22) is included. Security identifier value. For swaps, the near- and far-leg values are comma separated (*nearLegISIN*,*farLegISIN*). Also for swaps, the parent instrument may have its own ISIN captured in `ISINLinkID` (#9393). | String(12) |
| 22  | SecurityIDSource | C | 4=ISIN number | Required if `SecurityID` (#48) is included. Identifies class or source of the `SecurityID` (#48) value. | String(1) |
| 9393  | ISINLinkID | N | — | Applicable to swaps only. The ISIN of the swap instrument. The near and far legs may have their own ISINs captured in `SecurityID` (#48). | String(50) |
| 453  | NoPartyIDs | N | 4 | For quote requests sent to an MTF, the repeating groups represent the following entities:* Venue
* Order Originating Firm (taker org)
* Liquidity Provider (maker org)
* Customer Account (taker allocation account)

 | Qty(1) |
| → | 448 | PartyID | C | — | Required if `NoPartyIDs` (#453) is included. For MTF quote requests, this field has the following value based on entity type:* Venue: MIC code
* Order Originating Firm (taker org): LEI value
* Liquidity Provider (maker org): LEI value
* Customer Account (taker allocation account): LEI value

 | String(20) |
| → | 447 | PartyIDSource | C | G=MIC
N=LEI | Required if `NoPartyIDs` (#453) is included. For MTF quote requests, this field has the following value based on entity type:* Venue: G (MIC)
* Order Originating Firm (taker org): N (LEI)
* Liquidity Provider (maker org): N (LEI)
* Customer Account (taker allocation account): N (LEI)

 | char(1) |
| → | 452 | PartyRole | C | 64=Multilateral Trading Facility
13=Order Originating Firm
35=Liquidity Provider
24=Customer Account | Required if `NoPartyIDs` (#453) is included. For MTF quote requests, this field has the following value based on entity type:* Venue: 64 (Multilateral Trading Facility)
* Order Originating Firm (taker org): 13
* Liquidity Provider (maker org): 35
* Customer Account (taker allocation account): 24

 | int(2) |
| → | 802 | NoPartySubIDs | N | 1 | A repeating group to contain the venue’s LEI (when `PartyRole` (#452)=64). | NumInGroup(1) |
| →→ | 523 | PartySubID | C | — | The venue’s LEI. Required if `NoPartySubIDs` (#802) is added. | 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) |


#### Quote (single trades)

Quote MiFID data (single trades) 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=S | — |
| 48  | SecurityID | N | — | Required if `SecurityIDSource` (#22) is included. Security identifier value for non-batch quotes. For batch quotes, the security ID value is included on each leg. For swaps, the near- and far-leg values are comma separated (*nearLegISIN*,*farLegISIN*). | String(12) |
| 22  | SecurityIDSource | N | 4=ISIN number | Identifies class or source of the `SecurityID` (#48) value for non-batch quotes. For batch quotes, the security ID is included on each leg. | String(1) |
| 453  | NoPartyIDs | N | 3 | For quotes on an MTF, the repeating groups represent the following entities:* Maker's Executing Trader.
* Liquidity Provider (maker org).
* Maker's Investment Decision Maker.

 | Qty(20) |
| → | 448 | PartyID | C | — | Required if `NoPartyIDs` (#453) is included. For quotes on an MTF, this field has the following value based on entity type:* Maker's Executing Trader: Short Code.
* Liquidity Provider (maker org): LEI value.
* Maker's Investment Decision Maker: Short Code.

 | String(20) |
| → | 447 | PartyIDSource | C | N=LEI
P=Short Code | Required if `NoPartyIDs` (#453) is included. For quotes on an MTF, this field has the following value based on entity type:* Maker's Executing Trader: P (Short Code).
* Liquidity Provider (maker org): N (LEI).
* Maker's Investment Decision Maker: P (Short Code).

 | char(1) |
| → | 452 | PartyRole | C | 12=Executing Trader
35=Liquidity Provider
122=Investment Decision Maker | Required if `NoPartyIDs` (#453) is included. For quotes on an MTF, this field has the following value based on entity type:* Maker's Executing Trader: 12.
* Liquidity Provider (maker org): 35.
* Maker's Investment Decision Maker: 122.

 | int(2) |
| → | 2376 | PartyRoleQualifier | C | 22=Algorithm
24=Natural person | For quotes on an MTF, the user type. Only required for Executing Trader (PartyRole (#452)= 12) and Investment Decision Maker (PartyRole (#452)= 122). | int(2) |
| 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) |


#### Quote Request (batch trades)

Quote Request MiFID data (batch trades) 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=R | — |
| 555  | NoLegs | Y | — | Repeating group for multi-leg trade details that represent a trade leg in the batch of trades. The value of this field indicates the number of groups and thus the number of legs. | NumInGroup(2) |
| → | 602 | LegSecurityID | N | — | For MTF batch quote requests, the security identifier value for the leg (`LegSecurityIDSource` (#603)=4 (ISIN)) | String(12) |
| → | 603 | LegSecurityIDSource | C | 4=ISIN number | Required if `LegSecurityID` (#602) is included. For MTF batch quote requests, 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 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, this field has the following value 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(30) |
| →→ | 525 | NestedPartyIDSource | C | G=MIC
N=LEI | Required if `NoNestedPartyIDs` (#539) is included. For MTF batch quote requests, this field has the following value 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 field has the following value based on entity type:* Venue: 64 (Multilateral Trading Facility, required for non-spot RFS MiFID 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) |


#### Quote (batch trades)

Quote MiFID data (batch trades) 

| Tag  | Field name | Req’d | Valid values | Description | Type(length) |
|  --- | --- | --- | --- | --- | --- |
| <Standard header>  | Y | — | 35=S | — |
| 555  | NoLegs | Y | — | Repeating group for batch quotes that represent a trade leg in the batch of trades. The value of the `NoLegs` (#555) field indicates the number of groups and thus the number of legs. | NumInGroup(2) |
| → | 602 | LegSecurityID | N | — | For MTF batch quotes, the security identifier value. For swaps, the near- and far-leg values are comma separated (*nearLegISIN*,*farLegISIN*). | String(12) |
| → | 603 | LegSecurityIDSource | C | 4=ISIN number | Required if `LegSecurityID` (#602) is included. For MTF batch quotes, identifies class or source of the `LegSecurityID` (#602) value. | String(1) |
| 453  | NoPartyIDs | N | 3 | For quotes on an MTF, the repeating groups represent the following entities:* Maker's Executing Trader.
* Liquidity Provider (maker org).
* Maker's Investment Decision Maker.

 | Qty(20) |
| → | 448 | PartyID | C | — | Required if `NoPartyIDs` (#453) is included. For quotes on an MTF, this field has the following value based on entity type:* Maker's Executing Trader: Short Code.
* Liquidity Provider (maker org): LEI value.
* Maker's Investment Decision Maker: Short Code.

 | String(20) |
| → | 447 | PartyIDSource | C | N=LEI
P=Short Code | Required if `NoPartyIDs` (#453) is included. For quotes on an MTF, this field has the following value based on entity type:* Maker's Executing Trader: P (Short Code).
* Liquidity Provider (maker org): N (LEI).
* Maker's Investment Decision Maker: P (Short Code).

 | char(1) |
| → | 452 | PartyRole | C | 12=Executing Trader
35=Liquidity Provider
122=Investment Decision Maker | Required if `NoPartyIDs` (#453) is included. For quotes on an MTF, this field has the following value based on entity type:* Maker's Executing Trader: 12.
* Liquidity Provider (maker org): 35.
* Maker's Investment Decision Maker: 122.

 | int(2) |
| → | 2376 | PartyRoleQualifier | C | 22=Algorithm
24=Natural person | For quotes on an MTF, the user type. Only required for Executing Trader (PartyRole (#452)= 12) and Investment Decision Maker (PartyRole (#452)= 122). | int(2) |
| → | 7632 | MidPxLeg | N | — | The mid rate | Price(20) |


#### New Order - Single

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)

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

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, batch trades and SSPs. 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:

* Quote Request (`MsgType` (#35)=R)
* New Order - Single (`MsgType` (#35)=D)
* New Order - Multileg (`MsgType` (#35)=AB)
* 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) |
| 555  | NoLegs | Y | — | Repeating group for multi-leg trade details on New Order - Multileg (`MsgType` (#35)=AB). | NumInGroup(2) |
| → | 9395 | RTN | N | — | For batch trades sent with New Order - Multileg (`MsgType` (#35)=AB). Regulatory trade ID as received from the external venue. Include this field on each leg of the batch trade. | String(52) |


### 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:

* Quote Request (`MsgType` (#35)=R)
* New Order - Single (`MsgType` (#35)=D)
* New Order - Multileg (`MsgType` (#35)=AB)
* 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.0v32) | Corrected format for `SettlDate` (#64) and `SettlDate2` (#193) to *YYYYMMDD*:* [Quote Request](#quote-request)
* [Quote](#quote)
* [New Order - Single](#new-order--single)
* [Execution Report](#execution-report)
* [Execution Report: Fill (batch trades)](#execution-report-fill-batch-trades)
* [Quote Request (book of prices)](#quote-request-book-of-prices)
* [Quote (book of prices)](#quote-book-of-prices)
* [Quote Request (MTF)](#quote-request-mtf)

 |
| November 2025
(1.0v31) | Added support for deliverable and non-deliverable instruments on a request-by-request basis to `SecurityType` (#167) on [Quote Request](#quote-request) and various messages.* FOR: Foreign Exchange Contract. By default, for a given instrument, quote convention settings on the server automatically determine the trade type.

Contact your Integral Technical Account Manager to configure specific instruments if you need to specify the trade type on a request-by-request basis.
When the system is configured to accept both deliverable and non-deliverable trade types for specific instruments, you can specify the following values as execution instructions that indicate how your request is processed:* FXNDF: non-deliverable forward. If specified for a deliverable-only instrument, the request is rejected.
* FXFWD: deliverable forward. If specified for a non-deliverable-only currency pair, the request is rejected.
* FXNDS: non-deliverable swap. If this parameter is specified for a deliverable-only currency pair, the request is rejected.
* FXSWAP: deliverable swap. If this parameter is specified for a non-deliverable-only currency pair, the request is rejected.

 |
| October 2025
(1.0v29) | * Added [Typical RFS workflow](/developer-portal/fix-examples#typical-rfs-workflow)
* Corrected and clarified required status and description of `OnBehalfOfCompID` (#115) in various messages.

 |
| September 2025
(1.0v28) | * Corrected list of tenors in [Supported tenors](#supported-tenors).

 |
| March 2025
(1.0v27) | * Corrections:
  * Added `LegQty` (#687) to [Execution Report: Fill (batch trades)](#execution-report-fill-batch-trades).
  * Added `LegQty` (#687) to Execution Report messages for batch trades in [FIX 4.4 examples](/developer-portal/fix-examples#fix-4.4-examples).
  * Changed `ExecType` (#150) value to "F" in Execution Report messages for batch trades in [FIX 4.4 examples](/developer-portal/fix-examples#fix-4.4-examples).
* Added clarification that you can request and trade batches of trades in a single currency pair ([Batch trades](#batch-trades)).

 |
| January 2025
(1.0v26) | Added support for the RFQ workflow ("held rates"):* Added `WorkflowTypeParam` (#11060) to [Quote Request](#quote-request) to indicate if the request is made for the RFS workflow (11060=0) or the RFQ workflow (11060=1).
* Enhanced description of `ExpireTime` (#126) in [Quote Request](#quote-request) to clarify values and conditions for RFS and RFQ requests.
* Enhanced description of `ValidUntilTime` (#62) in [Quote](#quote) to clarify duration time.
* Added Quote Request (RFQ "held rates") and Quote (RFQ "held rates") to [FIX 4.3 Examples](/developer-portal/fix-examples#fix-4.3-examples) and [FIX 4.4 examples](/developer-portal/fix-examples#fix-4.4-examples).

 |
| August 2024
(1.0v23)
 | The `MarketDepth` (#264) field has been added to the Quote Request (35=R) message for requesting books of RFS prices ([Quote Request (book of prices)](#quote-request-book-of-prices)).
The only value supported is 264=1 for best-price/top-of-book (TOB) aggregation.
If the field is not included or is set to any value other than "1", then full book aggregation is used.
This field does not control the number of tiers sent in the Quote Message.
 |
| August 2024
(1.0v22) | You can now specify relative and absolute expiry times with the `ExpireTime` (#126) field.* [Quote Request](#quote-request)
* [Quote Request (batch trades)](#quote-request-batch-trades)
* [Quote Request (book of prices)](#quote-request-book-of-prices)
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`.

 |
| June 2024
(1.0v21) | Added messaging to request and trade a book of streaming prices:* [Book of prices](#book-of-prices)
* [Quote Request (book of prices)](#quote-request-book-of-prices)
* [Quote (book of prices)](#quote-book-of-prices)

 |
| May 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 [RFS sessions](#rfs-sessions).

 |