Overview
Welcome to Abaxx Exchange and Clearing API documentation page.
This document will provide you technical guidance in integrating your application to Abaxx Exchange and Clearing platform.
Version History
Version | Date | Comment |
---|---|---|
1.4 | 18 Apr 2024 | Additional Contracts |
1.3 | 22 Feb 2024 | Update endpoints, Exchange timings |
1.2 | 13 Dec 2023 | Update Contract timings, FIX flow behavior |
1.1 | 31 Oct 2023 | Update Contract Specification |
1.0 | 1 May 2023 | First Version |
Abaxx Exchange
Abaxx Exchange facilitates an efficient execution experience for members across the lifecycle of a trade. Market participants can expect:
- Timely generation of contracts
- Instant dissemination of market data
- Established market controls that limit user error and prescribe price limits to ensure intraday price movements are within "market-acceptable" ranges
Trading members can access Abaxx Exchange through our order management system (OMS), or via API through proprietary or ISV OMS solutions.
Order types based on price (i.e. Limit, Market) or time (i.e. Day, Good Till Cancel, Good Till Date) are matched by the trading system on a price-time priority basis, standardising and ensuring transparency to members on the matching criteria utilised.
Abaxx Clearing
Abaxx Clearing performs post-trade clearing, risk management and settlement services for Abaxx Exchange. By acting as the buyer to every seller and the seller to every buyer, the clearinghouse stands to mitigate counterparty credit risk and completes the full-service offering of Abaxx Exchange.
Contract Specifications
Following are the list of contracts for trading and its specfications.
For full list of tradable contracts, please refer to InstrumentStatus on orderBookDepth's qualifier for WebSocket or SecurityListRequest message type for FIX.
Product Name | Gulf of Mexico (LNG) | North Pacific Asia (LNG) | North West Europe (LNG) | JREDD+ Carbon Offset Unit Futures |
---|---|---|---|---|
Product Code | GOM | NPA | NWE | RD1 |
Product Type(s) | Futures (Outright, Spread & Strip) |
Futures (Outright, Spread & Strip) |
Futures (Outright, Spread & Strip) |
Futures (Outright, Spread & Strip) |
Trading Hours (SGT) | Pre-Open: 9:30 Open: 10:00 Close: 00:00 (Midnight) |
Pre-Open: 9:30 Open: 10:00 Close: 00:00 (Midnight) |
Pre-Open: 9:30 Open: 10:00 Close: 00:00 (Midnight) |
Pre-Open: 9:30 Open: 10:00 Close: 00:00 (Midnight) |
Contract Unit | 10000 MMBtu | 10000 MMBtu | 10000 MMBtu | 100 Ton |
Quote Price | USD & Cents / MMBtu | USD & Cents / MMBtu | USD & Cents / MMBtu | USD & Cents / MMBtu |
Quote Currency | USD | USD | USD | USD |
Tick Size | 0.01 | 0.01 | 0.01 | 0.01 |
Contract Months | Monthly for 12 consecutive months | Monthly for 12 consecutive months | Monthly for 12 consecutive months | Monthly for 12 consecutive months |
Product Name | Nickel Sulphate Singapore | CORSIA Phase One |
---|---|---|
Product Code | NSS | CP1 |
Product Type(s) | Futures (Outright, Spread & Strip) |
Futures (Outright, Spread & Strip) |
Trading Hours (SGT) | Pre-Open: 9:30 Open: 10:00 Close: 00:00 (Midnight) |
Pre-Open: 9:30 Open: 10:00 Close: 00:00 (Midnight) |
Contract Unit | 5 MT | 100 tCO2e |
Quote Price | USD / MT | USD / tCO2e |
Quote Currency | USD | USD |
Tick Size | 1 | 0.01 |
Contract Months | Monthly for 12 consecutive months | Monthly for 12 consecutive months |
Product Name | Lithium Carbonate Singapore | Lithium Carbonate Rotterdam | Lithium Carbonate Baltimore |
---|---|---|---|
Product Code | LCS | LCR | LCB |
Product Type(s) | Futures (Outright, Spread & Strip) |
Futures (Outright, Spread & Strip) |
Futures (Outright, Spread & Strip) |
Trading Hours (SGT) | Pre-Open: 9:30 Open: 10:00 Close: 00:00 (Midnight) |
Pre-Open: 9:30 Open: 10:00 Close: 00:00 (Midnight) |
Pre-Open: 9:30 Open: 10:00 Close: 00:00 (Midnight) |
Contract Unit | 1 MT | 1 MT | 1 MT |
Quote Price | USD / MT | USD / MT | USD / MT |
Quote Currency | USD | USD | USD |
Tick Size | 1 | 1 | 1 |
Contract Months | Monthly for 12 consecutive months | Monthly for 12 consecutive months | Monthly for 12 consecutive months |
Exchange Timings
1. Trading Timings
All timings are on Singapore Timezone (SGT).
We encourage members to start connecting to our API by 8:30 SGT
Time | Activity |
---|---|
09:30 | Pre-open session |
10:00 | Market open |
00:00 | Market Close |
2. Clearing and Settlement Timings
Time | Activity |
---|---|
09:00 | Clearing starts |
09:00 | Position management window starts |
09:00 | Collateral deposit window starts |
10:30 | Deadline to fulfill end of day margin call |
11:30 | Position reporting deadline |
13:00 | Collateral withdrawal window starts |
16:00 | Intraday clearing cycle |
16:00 | Collateral withdrawal window ends |
17:00 | Collateral deposit window ends |
18:00 | Deadline to fulfill intraday margin call |
00:30 | Position management window ends |
02:30 | Completion of end of day clearing cycle |
Symbology
Outright
ProductCode + MaturityMonthCode + MaturityYear
i.e. RD1M23 for REDD+ 16-20 Carbon Future (Jun 2023)
Spread
ProductCode + MaturityMonthCodenear + MaturityYearnear + "/" + MaturityMonthCodefar + MaturityYearfar
i.e. GOMV23/X23 for Gulf of Mexico LNG Spread (Oct 2023 / Nov 2023)
Buy 1 GOMV23/X23 means:
- Buy 1 GOMV23
- Sell 1 GOMX23
Strip
ProductCode + MaturityMonthCodenear + MaturityYearnear + "-" + MaturityMonthCodefar + MaturityYearfar
i.e. NWEX23-H24 for NortWest Europe LNG Strip (Nov 2023 - Mar 2024)
Buy 1 NWEX23-H24 means:
- Buy 1 NWEX23
- Buy 1 NWEZ23
- Buy 1 NWEF24
- Buy 1 NWEG24
- Buy 1 NWEH24
MaturityYear should be in format YY (i.e. 23 for year 2023).
Futures Maturity Month Codes
Month | MaturityMonthCode |
---|---|
January | F |
February | G |
March | H |
April | J |
May | K |
June | M |
July | N |
August | Q |
September | U |
October | V |
November | X |
December | Z |
OrderTypes and Validity
OrderType/TimeInForce Matrix
Type | DAY | GTC | GTD | FOK | IOC | GAA |
---|---|---|---|---|---|---|
Limit | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Market | ✗ | ✗ | ✗ | ✓ | ✓ | ✗ |
Stop | ✗ | ✗ | ✗ | ✓ | ✓ | ✗ |
Stop Limit | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ |
Supported Order Types
OrderType | Description |
---|---|
Limit | Order is being sent with a specific price. A buy order will be executed with the requested price or lower price a sell order will be executed with the requested price or higher price. |
Market | Order is attempted filled at the best price in the market. Partial filled is allowed. In case not all the amount can be filled, the residual amount will be cancelled. |
Stop | A Stop Order is a Market Order that will remain Suspended (will not be entered into order book) until the stop price is reached. Once triggered, it will be treated similar to a regular Market Order. |
Stop Limit | A Stop Limit Order is a Limit Order that will remain Suspended (will not be entered into order book) until the stop price is reached. Once triggered, a Stop Limit Order will be treated as a regular Limit Order. |
Supported Order Validity
TimeInForce | Description |
---|---|
DAY | Order will be automatically cancelled when trading day is closed. |
GTC | Good Till Cancel (resting on book till cancellation) |
GTD | Good Till Date (at given time (expiryDate) order will be automatically cancelled). |
FOK | Fill Or Kill (all or nothing) |
IOC | Immediate Or Cancelled (allows partial fills) |
GAA | Good At Auction can be captured only during auctions and will expire after auction in case it was not filled |
API Availability Matrix
Type | Trading | Clearing |
---|---|---|
WebSocket | ✓ | ✗ |
FIX | ✓ | ✗ |
FIXML via AMQ | ✗ | ✓ |
Secure File Transfer | ✗ | ✓ |
Exchange
FIX Trading
The FIX API meant to serve clients with FIX integration knowledge and experience, if this is not the case, it is recommended you use which is easier to integrate.
Abaxx Exchange FIX gateway enables participants:
- Trading : allows to submit orders commands and to receive real-time information on executed trades.
- Drop Copy : Recieve real time orders activcity and trade reoprts
- Market Data : consume diffrent types of market data
The interface is a point-to-point service based on the technology and industry standards TCP/IP, FIXT and FIX. The session and application event models and messages are based on versions FIXT1.1 and FIX5.0 (SP 2) respectively.
FIX Connection Details
Environment | SocketConnectHost | SocketConnectPort | Description |
---|---|---|---|
UAT | fix.uat.service.xabx.net | 8443 | Trading, Market Data & Reporting |
PROD | fix.service.abaxx.exchange | 8443 | Trading, Market Data & Reporting |
FIX Onboarding
Step | Env | Action | Responsible |
---|---|---|---|
1.a | UAT | Provide FIX session credentials assigned to member | Abaxx |
1.b | Prod | Provide public IP's CIDR range for IP whitelisting | Member |
1.c | Prod | Provide FIX session credentials (including SocketConnectHost and SocketConnectPort) assigned to member | Abaxx |
2 | UAT | Test credentials and start development and inform Abaxx when ready for conformance testing | Member |
3 | UAT | FIX conformance testing and sign-off | Member / Abaxx |
4 | Prod | Proceed on Step 1.b | Member |
5 | Prod | Test and conclude FIX connectivity is LIVE | Member / Abaxx |
Contact Us
For technical exchange related queries: [email protected]
For functional exchange related queries: [email protected]
Standard Headers and Trailers
Standard Headers Structure
Tag | Name | Required | Description |
---|---|---|---|
8 | BeginString | Y | FIXT.1.1 (Must be the 1st field in the message) |
9 | BodyLength | Y | (Must be the 2nd field in the message) |
35 | MsgType | Y | (Must be the 3rd field in the message) |
49 | SenderCompID | Y | Participant's CompID |
56 | TargetCompID | Y | Exchange' CompID |
34 | MsgSeqNum | Y | Sequence number |
43 | PossDupFlag | N | Indicates possible retransmission of message with this sequence number. Supported values:
|
52 | SendingTime | Y | Time in UTC (microseconds) Format: YYYYMMDD-hh:mm:ss.uuuuuu |
122 | OrigSendingTime | N | Required if PossDupFlag(43) is set to Y Time the message was originally transmitted in UTC (microseconds) Format: YYYYMMDD-hh:mm:ss.uuuuuu |
Standard Trailer Structure
Tag | Name | Required | Description |
---|---|---|---|
10 | CheckSum | Y | FIX checksum calculated |
Session Messages
Logon (A)
// Sample Logon Request
8=FIXT.1.1|9=199|35=A|34=1|49=FIRM|52=20230413-07:04:45.549606|56=ABAXX|553=USERNAME|554=PASSWORD|20037=Y|98=0|108=30|141=Y|1137=9|10=130|
// Sample Logon Response
8=FIXT.1.1|9=89|35=A|34=1|49=ABAXX|52=20230413-07:04:45.823352|56=FIRM|98=0|108=30|141=Y|1137=9|10=245|
Tag | Name | Required | Description |
---|---|---|---|
98 | EncryptMethod | Y | Supported values:
|
108 | HeartBtInt | Y | Always 108 = 30 |
553 | Username | Y | Market participant's apiKey |
554 | Password | Y |
|
141 | ResetSeqNumFlag | N | Supported values:
|
1137 | DefaultApplVerID | Y | Always 1137 = 9 _(FIX50SP2) |
20037 | Custom field | N | Supported values:
|
Heartbeat (0)
// Sample Heartbeat message
8=FIXT.1.1|9=64|35=0|34=2|49=FIRM|52=20230413-08:08:17.710123|56=ABAXX|10=080|
Tag | Name | Required | Description |
---|---|---|---|
112 | TestReqID | N | Required when the heartbeat is the result of a TestRequest message. ID of the TestRequest |
TestRequest (1)
// Sample TestRequest message
8=FIXT.1.1|9=73|35=1|34=6|49=FIRM|52=20230413-08:09:52.868580|56=ABAXX|112=TEST|10=124|
// Sample response for TestRequest message
8=FIXT.1.1|9=73|35=0|34=6|49=ABAXX|52=20230413-08:09:52.899403|56=FIRM|112=TEST|10=121|
Tag | Name | Required | Description |
---|---|---|---|
112 | TestReqID | N | ID of the TestRequest |
ResendRequest (2)
// Sample ResendRequest message
8=FIXT.1.1|9=75|35=2|34=33|49=FIRM|52=20230413-08:23:03.597499|56=ABAXX|7=20|16=0|10=073|
Tag | Name | Required | Description |
---|---|---|---|
7 | BeginSeqNo | Y | MsgSeqNum of first message in range to be resent |
16 | EndSeqNo | Y | MsgSeqNum of last message in range to be resent.
|
Reject (3)
// Sample Reject message
8=FIXT.1.1|9=113|35=5|34=3|49=FIRM|52=20230414-02:19:18.649517|56=ABAXX|58=MsgSeqNum too low, expecting 2 but received 1|10=040|
Tag | Name | Required | Description |
---|---|---|---|
98 | RefSeqNum | Y | MsgSeqNum of rejected message |
58 | Text | N | Error message |
373 | SessionRejectReason | N | Error Code as per FIX specifications |
371 | RefTagID | N | Reference TagId caused the rejection |
372 | RefMsgType | N | Reference MsgType of rejected message |
SequenceReset (4)
// Sample SequenceReset message
8=FIXT.1.1|9=72|35=4|49=FIRM|56=ABAXX|34=448|52=20230414-02:21:20.868575|36=445|123=Y|10=097|
Tag | Name | Required | Description |
---|---|---|---|
123 | GapFillFlag | N | Indicates that the SequenceReset message is replacing administrative or application messages which will not be resent. Supported values:
Exchange sends out only Y as part of the ResendRequest flow. In case client application will send message with N, Exchange will ignore the MsgSeqNum(34) and apply the NewSeqNo(36) as the new inbound sequence |
Logout (5)
// Sample Logout Request
8=FIXT.1.1|9=91|35=5|34=6|49=ABAXX|52=20230414-02:22:16.569898|56=FIRM|58=Client initiated logout|10=013|
// Sample Logout Response
8=FIXT.1.1|9=64|35=5|34=7|49=FIRM|52=20230414-02:22:16.520312|56=ABAXX|10=079|
Tag | Name | Required | Description |
---|---|---|---|
58 | Text | N | Free text |
Trading Messages
Supported Client Intitiated Messages
Message | MsgType | Usage |
---|---|---|
NewOrderSingle | D | Allows the MP to submit a new order |
OrderCancelRequest | F | Allows the MP to cancel an active order |
OrderCancelReplaceRequest | G | Allows the MP to modify an active order |
OrderMassCancelRequest | q | Allows the MP to mass cancel all active orders for a specific instrument |
Supported Exchange Intitiated Messages
Message | MsgType | Usage |
---|---|---|
ExecutionReport | 8 | Indicates the result of order command. |
OrderMassCancelReport | r | Indicates the result of the mass cancel command. |
OrderCancelReject | 9 | Indicates that an order cancel request or order cancel/replace request has been rejected. |
BusinessMessageReject | j | Indicates that an application message could not be processed |
Order Lifecycle Scenarios
Below scenarios summarize the trading actions that are support with the corresponded ExecutionReport.
Scenario | ExecType(150) | OrdStatus(39) |
---|---|---|
Order Rejected | 8 (Rejected) | 8 (Rejected) |
Order accepted and order is fully resting on the book | 0 (New) | 0 (New) |
Order accepted and order is fully executed immediately | F (Trade) | 2 (Filled) |
Order accepted and order is partially executed immediately and the residual is resting on the book | F (Trade) | 1 (Partially filled) |
Order accepted and order is partially executed immediately and the residual is cancelled (IOC) | F (Trade) & 4 (Cancelled) |
1 (Partially filled) & 4 (Canceled) |
Order with immediate TIF (IOC, FOK) that failed to be executed | 4 (Canceled) | 4 (Canceled) |
GTD order that has expired | 4 (Canceled) | 4 (Canceled) |
Order cancelled | 4 (Canceled) | 4 (Canceled) |
Order modified | 5 (Replaced) | 0 (New) or 1 (Partially filled) |
Order replaced | 4 (Canceled) & 5 (Replaced) | 4 (Canceled) & 0 (New) |
Order suspended (STP/STPLMT) | 0 (New) | 0 (New) |
Order injected (STP/STPLMT) | L (Triggered or activated by System) | 0 (New) |
NewOrderSingle (D)
// Sample NewOrderSingle message
8=FIXT.1.1|9=157|35=D|34=6|49=FIRM|52=20230417-06:35:50.551725|56=ABAXX|11=1681713329128057|38=5|40=2|44=3.6|54=1|55=GOMF24|59=1|453=1|448=CL00001|447=D|452=38|581=1|10=007|
Tag | Name | Required | Description |
---|---|---|---|
11 | ClOrdID | Y | Unique identifier for order |
55 | Symbol | Y | Contract Code |
54 | Side | Y | Supported values:
|
38 | OrderQty | Y | Quantity |
40 | OrdType | Y | Supported values:
|
44 | Price | N | Order price. Required for limit orders |
99 | StopPx | N | Stop price. Required for Stop & Stop Limit orders |
59 | TimeInForce | Y | Supported values:
|
432 | ExpireDate | N | Expiry time in seconds in UTC, required if TimeInForce = GTD and ExpireTime(126) is not specified. Format: YYYYMMDD |
126 | ExpireTime | N | Expiry time in seconds in UTC, required if TimeInForce = GTD and ExpireDate(432) is not specified. Format: YYYYMMDD-hh:mm:ss |
581 | AccountType | Y | Supported values:
|
Parties Component Block | Y | Party information related to the submitter of the request. | |
110 | MinQty | N | Minimum quantity of an IOC order to be executed. |
Parties Component Block
Tag | Name | Required | Description |
---|---|---|---|
453 | NoPartyIDs | Y | Number of parties. |
→ 448 | PartyID | Y | Identification of the party. |
→ 447 | PartyIDSource | Y | Used to identify the classification source. Supported values: |
→ 452 | PartyRole | Y | Identifies the type of PartyID(448). Mandatory values: Optional values: |
Account/Parties block example mapping
Client Account | House Account |
---|---|
AccountType[581] = 1 (Client) NoPartyIDs[453] = 1 → PartyID[448] = < Client Account > → PartyIDSource[447] = D (Proprietary) → PartyRole[452] = 38 (Position account) |
AccountType[581] = 3 (House) NoPartyIDs[453] = 1 → PartyID[448] = < House Account > → PartyIDSource[447] = D (Proprietary) → PartyRole[452] = 38 (Position account) |
OrderCancelRequest (F)
// Sample OrderCancelRequest message
8=FIXT.1.1|9=114|35=F|34=7|49=FIRM|52=20230417-06:40:02.668041|56=ABAXX|11=1681713593666681|41=1681713552808524|55=GOMF24|10=163|
Tag | Name | Required | Description |
---|---|---|---|
37 | OrderID | N | Order Id to be cancelled Mandatory if OrigClOrdID was not specified |
41 | OrigClOrdID | N | Original ClOrdID to be cancelled Mandatory if ClOrdID was not specified |
11 | ClOrdID | Y | Unique ID of cancel request, numbers only |
55 | Symbol | Y | Contract Code |
OrderCancelReplaceRequest (G)
// Sample OrderCancelReplaceRequest message
8=FIXT.1.1|9=105|35=G|34=3|49=FIRM|52=20230417-06:54:41.810225|56=ABAXX|11=1681714468232072|37=18|38=5|55=GOMF24|10=156|
Tag | Name | Required | Description |
---|---|---|---|
37 | OrderID | Y | Order Id to be cancelled Mandatory if OrigClOrdID was not specified |
11 | ClOrdID | Y | Unique ID of cancel request, numbers only |
110 | MinQty | N | Allowed only when 59(TIF)= 3(IOC) |
55 | Symbol | Y | Contract Code |
54 | Side | Y | Side must be equal to the side of original order. |
60 | TransactTime | Y | Time this request was initiated/released by the trader or trading system. |
38 | OrderQty | Y | New OrderQty must be less than the original OrderQty |
40 | OrdType | Y | OrdType must be equal to the OrdType of original order. |
44 | Price | N | New order Price Required If OrderQty >= LeavesQty of original order |
99 | StopPx | N | New order Stop price Required for stop orders and stop limit orders |
59 | TimeInForce | N | New order Time In Force Values same as New Order Single |
432 | ExpireDate | N | Expiry Date Format: YYYYMMDD Required if TimeInForce = GTD and ExpireTime(126) is not specified. |
126 | ExpireTime | N | New order Expiry time in seconds(UTC Time). Format: YYYYMMDD-hh:mm:ss Required if TimeInForce = GTD and ExpireDate(432) is not specified. |
OrderMassCancelRequest (q)
// Sample OrderMassCancelRequest message
8=FIXT.1.1|9=101|35=q|34=10|49=FIRM|52=20230417-06:57:45.588953|56=ABAXX|11=1681714584168715|55=GOMF24|530=1|10=046|
Tag | Name | Required | Description |
---|---|---|---|
11 | ClOrdID | Y | Unique ID of cancel request, numbers only |
55 | Symbol | Y | Contract Code |
530 | MassCancelRequestType | Y | 1 = Cancel orders for a security |
1461 | NoTargetPartyIDs | N | Identifies the number of target parties identified in a mass action. |
→ 1462 | TargetPartyID | N | Required if NoTargetPartyIDs(1461) > 0. Used to identify the party targeted for the action specified in the message. |
→ 1463 | TargetPartyIDSource | N | Required if NoTargetPartyIDs(1461) > 0. Used to identify source of target party identifier. |
→ 1464 | TargetPartyRole | N | Required if NoTargetPartyIDs(1461) > 0. Used to identify the role of source party identifier. |
ExecutionReport (8)
// Sample ExecutionReport (New) message
8=FIXT.1.1|9=259|35=8|34=27|49=ABAXX|52=20230417-07:02:36.984844|56=FIRM|11=1681714928236006|14=0|17=27490|37=21|38=5|39=0|40=2|44=3.60|54=1|55=GOMF24|59=1|60=20230417-07:02:36.977804|150=0|151=5|453=2|448=CL00001|447=D|452=7|448=CL00001|447=D|452=7|581=1|10=000|
// Sample ExecutionReport (Rejected) message
8=FIXT.1.1|9=152|35=8|49=ABAXX|56=MP1|34=4|52=20230417-07:18:08.839269|17=27520|150=8|37=-1|11=1681715386652710|39=8|103=1011|54=1|14=0|151=0|58=Permission denied for this instrument|10=037|
// Sample ExecutionReport (Trade) message*
8=FIXT.1.1|9=280|35=8|34=6|49=ABAXX|52=20230417-07:10:10.115812|56=FIRM|11=1681715386652704|14=2|17=27509|31=4.50|32=2|37=2|38=2|39=2|40=1|54=2|55=RD1Z24|59=4|60=20230417-07:10:10.107444|75=20230417|150=F|151=0|453=2|448=CL00001|447=D|452=7|448=CL00001|447=D|452=7|581=1|880=1|10=147|
// Sample ExecutionReport (Cancelled) message
8=FIXT.1.1|9=279|35=8|34=18|49=ABAXX|52=20230417-07:14:44.047668|56=FIRM|11=1681715678264620|14=0|17=27518|37=4|38=10|39=4|40=2|41=1681715603111519|44=3.50|54=1|55=RD1Z24|59=1|60=20230417-07:14:44.042350|150=4|151=0|453=2|448=CL00001|447=D|452=7|448=CL00001|447=D|452=7|581=1|10=196|
// Sample ExecutionReport (Replaced) message
8=FIXT.1.1|9=280|35=8|34=21|49=ABAXX|52=20230417-07:16:11.384506|56=FIRM|11=1681715762541856|14=0|17=27520|37=5|38=10|39=0|40=2|41=1681715712522661|44=10.00|54=2|55=RD1Z24|59=1|60=20230417-07:16:11.376005|150=5|151=5|453=2|448=CL00001|447=D|452=7|448=CL00001|447=D|452=7|581=1|10=222|
// Sample ExecutionReport (Order Status) message
8=FIXT.1.1|9=292|35=8|34=2|49=ABAXX|52=20230417-07:44:01.110660|56=FIRM|11=1681715712522661|14=0|17=0|31=0|32=0|37=5|38=10|39=0|40=2|44=10.00|54=2|55=RD1Z24|59=1|60=20230417-07:16:11.376005|150=I|151=5|453=2|448=CL00001|447=D|452=7|448=CL00001|447=D|452=7|581=1|584=1681717439131833|912=Y|10=245|
Tag | Name | Required | Description |
---|---|---|---|
37 | OrderID | Y | Order Id. In case of rejection message will be -1 |
41 | OrigClOrdID | N | ClOrdID of the cancelled/modified order in case ExecType(150) is:
|
11 | ClOrdID | N | ClOrdID of the request message in case ExecType(150) is:
(In case request is done not from FIX GW it will not be returned) ClOrdID of the order in case ExecType(150) is:
|
17 | ExecID | Y | Unique identifier of execution report
|
880 | TrdMatchID | N | Match Id - only in case ExecType = Trade |
150 | ExecType | Y | Describes the purpose of the execution report:
|
39 | OrdStatus | Y | Current order status (after this message):
|
636 | WorkingIndicator | N | Applicable only when OrdStatus=0(New) and 1 of the below:
N = Order is suspended |
58 | Text | N | In case of rejection, specifies the error message |
103 | OrdRejReason | N | In case of rejection, specifies the exchange error code |
38 | OrderQty | N | Order original quantity |
14 | CumQty | N | Order total filled quantity |
151 | LeavesQty | N | Remaining open quantity |
32 | LastQty | N | Executed amount on current fill only |
31 | LastPx | N | Executed price on current fill only |
55 | Symbol | N | Contract code |
54 | Side | N | Supported values:
|
40 | OrdType | N | Supported values:
|
44 | Price | N | Order price |
59 | TimeInForce | N | Supported values:
|
432 | ExpireDate | N | Expiry Date Format: YYYYMMDD |
126 | ExpireTime | N | Expiry time in UTC Format: YYYYMMDD-hh:mm:ss |
581 | AccountType | N | Supported values:
|
Parties Component Block | N | Party information related to the submitter of the request. | |
912 | LastRptRequested | N | Will be included only in case ExecType(150) = I (Order Status) Identify if this is the last record
|
584 | MassStatusReqID | N | Will be included only in case ExecType(150) = I (Order Status), from request |
110 | MinQty | N | Minimum quantity of an order to be executed. |
442 | MultiLegReportingType | N | Will be shown for strategy trades only if in LOGON(A) → 20037 = Y 1 - Single security - not strategy trade 2 - Individual leg of a multi-leg security 3 - Multi-leg security - the parent trade of multi-leg security |
820 | TradeLinkID | N | Only if in LOGON(A) → 20037 = Y Only when MultiLegReportingType(442) = 2, will show Parent trade ID (multiLegStrategyTradeId in WS API) (this can be associated with strategy ExecutionReport TrdMatchID (880) of the parent) |
1647 | NoRelatedInstruments | N | Only if in LOGON(A) → 20037 = Y Only when MultiLegReportingType(442) = 2, shows number of related instruments Will always be 1 |
1648 | RelatedInstrumentType | N | Required if NoRelatedInstruments > 0 The type of instrument relationship 99 (Custom: Multi-leg security) |
1649 | RelatedSymbol | N | Required if NoRelatedInstruments > 0 Parent Symbol (This is required in order to know explicitly which strategy trade is the parent trade). |
1650 | RelatedSecurityID | N | Required if NoRelatedInstruments > 0 Parent instrumentId |
1651 | RelatedSecurityIDSource | N | Required if NoRelatedInstruments > 0 Identifies class or source of the RelatedSecurityID (1650) value. 99 (Custom) |
OrderMassCancelReport (r)
// Sample OrderMassCancelReport (Accepted) message
8=FIXT.1.1|9=105|35=r|49=ABAXX|56=FIRM|34=26|52=20230208-12:59:24.189454|11=1675861165216|530=1|531=1|533=1|1369=41489|10=221|
// Sample OrderMassCancelReport (Rejected) message
8=FIXT.1.1|9=136|35=r|49=ABAXX|56=FIRM|34=19|52=20230208-12:56:07.210122|11=1675860968239|530=1|531=0|532=1010|58=Instrument FIX not found|1369=41488|10=255|
Tag | Name | Required | Description |
---|---|---|---|
11 | ClOrdID | Y | Unique ID of mass cancel request |
530 | MassCancelRequestType | Y | 1 = Cancel orders for a security |
531 | MassCancelResponse | Y | Supported values:
|
532 | MassCancelRejectReason | N | In case of reject, specify the exchange error code |
533 | TotalAffectedOrders | N | In case of success, number of orders affected from the mass cancel request |
1369 | MassActionReportID | Y | Unique ID of mass cancel request |
1461 | NoTargetPartyIDs | N | Should be populated with the values provided on the associated OrderMassCancelRequest(MsgType=Q). Repeating group below should contain unique combinations of |
→ 1462 | TargetPartyID | N | Should be populated with the values provided on the associated OrderMassCancelRequest(MsgType=Q). |
→ 1463 | TargetPartyIDSource | N | Should be populated with the values provided on the associated OrderMassCancelRequest(MsgType=Q). |
→ 1464 | TargetPartyRole | N | Should be populated with the values provided on the associated OrderMassCancelRequest(MsgType=Q). |
58 | Text | N | In case of reject, specify the error message |
OrderCancelReject (9)
// Sample OrderCancelReject message
8=FIXT.1.1|9=139|35=3|34=6|49=FIRM|52=20230417-07:06:02.144455|56=ABAXX|45=4|58=Value is incorrect (out of range) for this tag|371=102|372=9|373=5|10=011|
Tag | Name | Required | Description |
---|---|---|---|
11 | ClOrdID | Y | Unique ID of cancel request |
37 | OrderID | Y | orderId that was sent to be cancelled/modified. Always NONE |
39 | OrdStatus | Y | 8 = Rejected |
102 | CxlRejReason | Y | Specify the error code |
434 | CxlRejResponseTo | Y | Original request is:
|
58 | Text | Y | In case of reject, specify the error message |
BusinessMessageReject (j)
// Sample BusinessMessageReject message
8=FIXT.1.1|9=280|35=j|49=ABAXX|56=FIRM|34=2|52=20230417-06:57:45.642669|45=2|372=x|380=6|58=This apiKey doesn't have the right permission|10=127|
Tag | Name | Required | Description |
---|---|---|---|
380 | BusinessRejectReason | Y | Specify the error code per FIX specifications |
58 | Text | Y | Specify the error message |
45 | BusinessRejectReason | Y | Reference msgSeqNum |
372 | RefMsgType | Y | The MsgType(35) of the FIX message being referenced |
Market Data Messages
Supported Client Intitiated Messages
Message | MsgType | Usage |
---|---|---|
MarketDataRequest | V | Allows the client to request or manage subscriptions for market data for multiple instruments |
SecurityListRequest | x | Allows to request a list of instruments details that match the criteria provided |
SecurityStatusRequest | e | Allows to request the trading status of an instrument |
Supported Exchange Intitiated Messages
Message | MsgType | Usage |
---|---|---|
MarketDataSnapshotFullRefresh | W | Used to return a snapshot of market data |
MarketDataIncrementalRefresh | X | Used to return incremental market data updates |
MarketDataRequestReject | Y | Indicates that a Market Data Request has been rejected |
SecurityList | y | Used to return a list of instruments and their details |
SecurityStatus | f | Used to return trading status of an instrument |
// Sample MarketDataRequest (Ticker) message
8=FIXT.1.1|9=131|35=V|34=49|49=FIRM|52=20230428-01:33:08.515829|56=ABAXX|262=54590554105700|263=1|264=1|265=0|267=2|269=0|269=1|146=1|55=GOMV23|10=236|
// Sample MarketDataRequest (MBP) message
8=FIXT.1.1|9=141|35=V|34=74|49=FIRM|52=20230428-01:45:15.168096|56=ABAXX|262=55317199903900|263=1|264=0|265=1|267=2|269=0|269=1|146=2|55=GOMV23|55=GOMX23|10=064|
// Sample MarketDataRequest (MBOFD) message
8=FIXT.1.1|9=141|35=V|34=96|49=FIRM|52=20230428-01:54:08.334367|56=ABAXX|262=55850356979400|263=1|264=0|265=1|267=2|269=0|269=1|146=2|55=GOMV23|55=GOMX23|10=071|
// Sample MarketDataRequest (Time & Sales) message
8=FIXT.1.1|9=126|35=V|34=114|49=FIRM|52=20230428-02:01:39.799175|56=ABAXX|262=56301814346100|263=1|264=5|265=1|267=1|269=2|146=1|55=GOMV23|10=015|
// Sample MarketDataRequest (Imbalance) message
8=FIXT.1.1|9=126|35=V|34=120|49=FIRM|52=20230428-02:04:20.178086|56=ABAXX|262=56462188023400|263=1|264=5|265=1|267=1|269=A|146=1|55=GOMV23|10=019|
MarketDataRequest(V) / Response Messages
Request | Success Message | Failure Message |
---|---|---|
For Ticker subscription, use below parameters:
|
|
|
For Market by Price (MBP) subscription, use below parameters:
|
|
|
For Market by Order Full Depth (MBOFD) subscription, use below parameters:
|
|
|
For Time & Sales subscription, use below parameters:
|
|
|
For Auction Indicative Equilibrium Price (Imbalance) subscription, use below parameters:
|
|
|
Messages related to auctions
Market Data updates related to the auction are disseminated using MarketDataIncrementalRefresh(X) messages. A single update can have multiple entries with different MDEntryTypes as below. Check AuctionIndicativeEP to see more details explanation about auction indicative price.
Condition | MDEntryType entry |
---|---|
when the book is empty | MDEntryType(269)=J (Empty book) |
Best bid exist without IndicativePrice | MDEntryType(269)=0 (Bid) |
Best offer exist without IndicativePrice | MDEntryType(269)=1 (Offer) |
Best bid & offer exist without IndicativePrice | MDEntryType(269)=0 (Bid) MDEntryType(269)=1 (Offer) |
When IndicativePrice exist | MDEntryType(269)=Q (Auction clearing price) |
When imbalanceQuantity exist | MDEntryType(269)=A (Imbalance) |
When IndicativePrice & imbalanceQuantity exist | MDEntryType(269)=Q (Auction clearing price) MDEntryType(269)=A (Imbalance) |
MarketDataRequest (V)
Tag | Name | Required | Description |
---|---|---|---|
262 | MDReqID | Y | Unique ID for this request. |
263 | SubscriptionRequestType | Y | Supported values:
|
264 | MarketDepth | N | Mandatory for SubscriptionRequestType(263) = 0 or 1 Supported values:
|
265 | MDUpdateType | N | Mandatory for SubscriptionRequestType(263) = 1 Supported values:
|
267 | NoMDEntryTypes | Y | Mandatory for SubscriptionRequestType(263) = 0 or 1 Number of MDEntryType(269) fields in the request. |
269 | MDEntryType | Y | Mandatory for SubscriptionRequestType(263) = 0 or 1 Type of market data to request. Supported values:
|
146 | NoRelatedSym | Y | Specifies the number of repeating instruments |
55 | Symbol | Y | Contract Code. Mandatory for SubscriptionRequestType(263) = 0 or 1 |
MarketDataRequestReject (Y)
// Sample MarketDataRequestReject message
8=FIXT.1.1|9=106|35=Y|49=ABAXX|56=FIRM|34=120|52=20230428-02:05:41.047380|262=56542915163100|281=0|58=Wrong Symbol(55)|10=126|
Tag | Name | Required | Description |
---|---|---|---|
262 | MDReqID | Y | Unique ID for this request. |
58 | text | N | Reason for the rejection |
281 | MDReqRejReason | N | Reason for the rejection of a Market Data request. Supported values:
|
MarketDataSnapshotFullRefresh (W)
// Sample MarketDataSnapshotFullRefresh (Ticker) message
8=FIXT.1.1|9=180|35=W|49=ABAXX|56=FIRM|34=949|52=20230428-07:03:33.435774|262=74414813390500|55=GOMV23|48=375|22=99|779=20230428-07:03:00.090000|268=2|269=0|270=2.9|271=5|269=1|270=2.91|271=10|10=081|
// Sample MarketDataSnapshotFullRefresh (MBOFD) message
8=FIXT.1.1|9=166|35=W|49=ABAXX|56=FIRM|34=957|52=20230428-07:06:22.874120|262=74584355985700|55=GOMV23|48=375|22=99|779=20230428-07:03:00.090438|268=1|269=1|270=2.91|271=10|37=60|10=242|
8=FIXT.1.1|9=165|35=W|49=ABAXX|56=FIRM|34=958|52=20230428-07:06:22.874120|262=74584355985700|55=GOMV23|48=375|22=99|779=20230428-07:02:07.521267|268=1|269=0|270=2.90|271=5|37=59|10=209|
// Sample MarketDataSnapshotFullRefresh (MBP) message
8=FIXT.1.1|9=166|35=W|49=ABAXX|56=FIRM|34=962|52=20230428-07:08:16.986575|262=74698459716900|55=GOMV23|48=375|22=99|779=20230428-07:03:00.090438|268=1|269=1|270=2.91|271=10|37=60|10=010|
8=FIXT.1.1|9=165|35=W|49=ABAXX|56=FIRM|34=963|52=20230428-07:08:16.986575|262=74698459716900|55=GOMV23|48=375|22=99|779=20230428-07:02:07.521267|268=1|269=0|270=2.90|271=5|37=59|10=|
Tag | Name | Required | Description |
---|---|---|---|
262 | MDReqID | Y | Unique ID for this request. |
55 | Symbol | Y | Instrument symbol |
779 | LastUpdateTime | Y | Timestamp of last update to data item Format : YYYYmmDD-hh:mm:ss.000000 |
268 | NoMDEntries | Y | Repeating group. Number of market data entries in the message |
→ 269 | MDEntryType | Y | Type of market data to request. Supported values:
|
→ 270 | MDEntryPx | N | Price of the instrument associated with this entry. |
→ 271 | MDEntrySize | N | Quantity associated with the related entry. Supported values:
|
→ 1023 | MDPriceLevel | N | Relevant only for bid and ask (MBP) Integer to convey the level of a bid or offer at a given price level. |
→ 48 | SecurityID | Y | In case the symbol is changed after subscription, the permanent instrument identifier can be identified using this field. |
→22 | SecurityIDSource | Y | Identifies the class or source of the SecurityID(48) Always 99 = Custom |
→ 278 | MDEntryID | N | Relevant only for bid and ask - MBOFD Market data entry id |
→ 346 | NumberOfOrders | N | Relevant only for bid and ask - MBP In an Aggregated Book, used to show how many individual orders make up an MDEntry |
20029 | XXX | N | If the MDEntryType(269) = 0 (bid) & 1 (ask) for MBOFD & NEW for Ticker : Indicates whether this message is the last in a sequence of messages on the current snapshot |
MarketDataIncrementalRefresh (X)
// Sample MarketDataIncrementalRefresh (MBOFD) message
8=FIXT.1.1|9=175|35=X|49=ABAXX|56=FIRM|34=987|52=20230428-07:14:06.603222|262=74985101307200|268=1|279=0|55=GOMV23|48=375|22=99|37=61|269=0|270=2.85|271=5|272=20230428|273=07:14:06.592104|10=102|
// Sample MarketDataIncrementalRefresh (Time & Sales) message
8=FIXT.1.1|9=177|35=X|49=ABAXX|56=FIRM|34=1000|52=20230428-07:16:53.088518|262=74988467297000|268=1|279=0|269=2|55=GOMV23|48=375|22=99|270=2.91|271=5|272=20230428|273=07:16:53.075459|2446=1|10=232|
Tag | Name | Required | Description |
---|---|---|---|
262 | MDReqID | Y | Unique ID from the incoming request ID. |
268 | NoMDEntries | Y | Repeating group. Number of market data entries in the message |
→279 | MDUpdateAction | Y | Specifies the type of market data update. MBOFD : MDEntryType(269) = 0 (bid) & 1 (ask): Supported values:
Time & Sales : MDEntryType(269) = 2 (trade): Supported values:
Supported values:
Supported values:
Supported values:
Supported values:
|
→55 | Symbol | Y | Instrument symbol |
→48 | SecurityID | Y | Permanent instrument identifier, in case symbol is changed after subscription, you can identify the instrument using this field. |
→22 | SecurityIDSource | Y | Identifies the class or source of the SecurityID(48) Always 99 = Custom |
→278 | MDEntryID | N | If the MDEntryType(269) = 0 (bid) or 1 (ask) |
→269 | MDEntryType | Y | Type of market data to request. Mandatory for SubscriptionRequestType(263) = 0 or 1 Supported values:
|
→270 | MDEntryPx | Y | If MDEntryType(269) = 0 (bid) & 1 (ask) → Price of the order associated with this entry. Interpret the value based on the entry type. If MDEntryType(269) = 2 (Trade) → Price of the trade associated with this entry. If MDEntryType(269) = Q (AuctionClearingPrice) → AuctionIndicativeEP.IndicativePrice |
→271 | MDEntrySize | Y | If MDEntryType(269) = 0 (bid) & 1 (ask) → Quantity of the order associated with this entry. If MDEntryType(269) = 2 (Trade) → Quantity of the trade associated with this entry. If MDEntryType(269) = A (Imbalance) → AuctionIndicativeEP.imbalanceQuantity If MDEntryType(269) = Q (AuctionClearingPrice) → AuctionIndicativeEP.pairedQuantity |
→272 | MDEntryDate | Y | Date of Market Data Entry in UTC Format : YYYYMMDD |
→273 | MDEntryTime | Y | Time of Market Data Entry in UTC (microseconds) Format : HH:MM:SS.ssssss |
→276 | QuoteCondition | N | If the message is sent as a reply for an imbalance request AND [MDEntryType(269)= 0(Bid) OR 1(Ask)]: Supported values:
|
→277 | TradeCondition | N | If the MDEntryType(269) = A (Imbalance): Supported values:
|
→1023 | MDPriceLevel | N | If the message is sent as a reply for an imbalance request AND [MDEntryType(269)= 0(Bid) OR 1(Ask)]: Value =1 |
→1070 | MDQuoteType | N | If MDEntryType(269) = A (Imbalance) OR Q (AuctionClearingPrice): Supported values:
|
→2446 | AggressorSide | N | If MDEntryType(269) = 2 (Trade) → Indicates which side is the aggressor or if there is no aggressor Supported values:
|
SecurityListRequest (x)
// Sample SecurityListRequest message
8=FIXT.1.1|9=98|35=x|34=35|49=FIRM|52=20230417-07:23:06.198497|56=ABAXX|263=1|320=1681716182728279|559=4|10=041|
Tag | Name | Required | Description |
---|---|---|---|
320 | SecurityReqID | Y | Unique ID for this request |
559 | SecurityListRequestType | Y | Supported values:
|
263 | SubscriptionRequestType | N | Supported values:
|
SecurityList (y)
// Sample SecurityList (SPOT Instrument) message
8=FIXT.1.1|9=260|35=y|49=ABAXX|56=FIRM|34=40|52=20230417-07:23:06.276102|320=1681716182728279|560=0|893=N|146=1|55=GOM|48=344|22=99|965=1|2576=2|1148=0.01|1786=0|562=1|1140=10000|107=Market Level Instrument|167=SPOT|762=Commodities (T)|15=USD|207=XABX|20011=0|20026=J|10=018|
// Sample SecurityList (OUTRIGHT Instrument) message
8=FIXT.1.1|9=324|35=y|49=ABAXX|56=FIRM|34=47|52=20230417-07:23:06.277711|320=1681716182728279|560=0|893=N|146=1|55=RD1Z23|48=351|22=99|965=1|2576=2|1786=0|562=1|1140=10000|107=REDD+ 16-20 Dec 2023|167=FUT|762=Commodities futures (C)|15=USD|225=20230412|20010=03:00:00Z|541=20231129|1079=22:30:00Z|231=10000|1193=C|20011=0|20027=341|10=171|
// Sample SecurityList (SPREAD Instrument) message
8=FIXT.1.1|9=330|35=y|49=ABAXX|56=FIRM|34=267|52=20230417-07:23:06.339553|320=1681716182728279|560=0|893=N|146=1|55=NWEJ25/K25|48=572|22=99|965=1|2576=2|1786=0|562=1|1140=10000|107=NWE SPREAD J25 K25|167=MLEG|15=USD|225=20230412|20010=03:00:00Z|541=20250303|1079=22:30:00Z|231=10000|1193=C|20011=0|20027=342|555=2|602=414|566=3.5|602=416|10=045|
// Sample SecurityList (STRIP Instrument) message
8=FIXT.1.1|9=345|35=y|49=ABAXX|56=FIRM|34=179|52=20230417-07:23:06.315726|320=1681716182728279|560=0|893=N|146=1|55=NPAZ23-H24|48=484|22=99|965=1|2576=2|1786=0|562=1|1140=10000|107=NPA STRIPS Z23-H24|167=MLEG|15=USD|225=20230412|20010=03:00:00Z|541=20231101|1079=22:30:00Z|231=10000|1193=C|20011=0|20027=343|555=4|602=422|566=15|602=425|602=423|602=427|10=017|
Tag | Name | Required | Description |
---|---|---|---|
320 | SecurityReqID | Y | Unique Id for the Security Definition Request. |
560 | SecurityRequestResult | Y | The results returned to a Security Request message Supported values:
|
1607 | SecurityRejectReason | N | Identifies the reason a security definition request is being rejected. Note: will be sent only when SecurityRequestResult(560) = 1 |
893 | LastFragment | N | Indicates whether this message is the last in a sequence of messages on the current snapshot Supported values:
Note: this field will return only from the snapshot (not for updates) |
146 | NoRelatedSym | Y | Specifies the number of repeating symbols specified Note: In case there is no data and the request was valid, this field won't be returned |
→ 55 | Symbol | Y | Instrument Symbol |
→ 48 | SecurityID | Y | Permanent instrument identifier, in case symbol is changed after subscription, you can identify the instrument using this field. |
→ 22 | SecurityIDSource | Y | Identifies the class or source of the SecurityID(48) Always 99 = Custom |
→ 107 | SecurityDesc | Y | Description |
→ 167 | SecurityType | N | Instrument category Supported values:
|
→ 762 | SecuritySubType | N | The Sub-Catagory of the instrument Supported values:
|
→ 15 | Currency | Y | Quote currency |
→ 2576 | InstrumentPricePrecision | Y | Price precision, number of decimals allowed in price field |
→ 965 | SecurityStatus | Y | Indicates the current state of the instrument. Supported values:
|
→ 207 | SecurityExchange | N | Market Identifier Code (MIC) Supported values:
|
→ 461 | CFICode | N | Classification of Financial Instruments codes (CFI) |
→ 541 | MaturityDate | N | Trading is allowed up to this date. Format : YYYYMMDD |
→ 1079 | MaturityTime | N | Trading is allowed up to this time. Format : HH:MM:SSZ |
225 | IssueDate | N | Trading is allowed from this time. Format : YYYYMMDD |
→ 20010 | Custom Tag | N | Trading is allowed from this time. Format : HH:MM:SSZ |
→ 201 | PutOrCall | N | In case SecurityType(167) = OPT Case subCategory : |
→ 231 | ContractMultiplier | N | Contract size |
→ 1193 | SettlMethod | N | Settlement method for a contract or instrument. Supported values:
|
→ 1194 | ExerciseStyle | N | Type of exercise of a derivatives security. Supported values:
|
→ 202 | StrikePrice | N | Strike |
→ 1148 | LowLimitPrice | N | Min price |
→ 1149 | HighLimitPrice | N | Max price |
→ 562 | MinTradeVol | Y | The minimum order quantity |
→ 1140 | MaxTradeVol | Y | The maximum order quantity |
→ 1786 | TradeVolType | Y | Define the type of trade volume applicable for the MinTradeVol(562) and MaxTradeVol(1140) Supported values:
|
→ 20011 | Custom tag | N | Quantity Precision |
→ 20012 | Custom tag | N | Quantity Increment |
→ 20013 | Custom tag | N | Tick Min Price Percentage |
→ 20014 | Custom tag | N | Tick Max Price Percentage |
→ 20015 | Custom tag | N | Daily Min Price Percentage |
→ 20016 | Custom tag | N | Daily Max Price Percentage |
→ 20017 | Custom tag | N | Expiry Date Format is YYYY-MM-DD |
→ 20018 | Custom tag | N | Max Order Value |
→ 20026 | Custom tag | N | Underlying Assets The value will be the same as the value in UnderlyingAssets List Example: Category (Spot) & Sub Category (Commodities) → Agriculture (A) |
→ 20027 | Custom tag | N | Underlying Instrument Id |
→ 555 | NoLegs | N | Number of legs that make up the Security |
→→ 600 | LegSymbol | N | The symbol of the leg |
→→ 602 | LegSecurityID | N | Legs Instrument Id |
→→ 566 | LegPrice | N | Leg 1 Reference Price |
→ 20030 | Custom tag | N | Number of tick size items in one entry in the tick table repeating group |
→→ 20031 | Custom tag | N | Price range |
→→ 20032 | Custom tag | N | Tick size |
→ 40019 | NoAdditionalTerms | N | Number of additional terms in the repeating group. |
→→ 40000 | NoAdditionalTermBondRefs | N | Optional Number of bonds in the repeating group. |
→→→ 40013 | AdditionalTermBondMaturityDate | N | MaturityDate format: YYYYMMDD |
→→→ 40012 | AdditionalTermBondCouponRate | N | Coupon (NOTE: 0.05 represents 5% and 0.9525 represents 95.25%) |
→→→ 40016 | AdditionalTermBondCouponFrequencyPeriod | N | Period of coupon |
→→→ 40017 | AdditionalTermBondCouponFrequencyUnit | N | Time unit associated with the frequency of the bond's coupon payment. Mo = Month |
58 | Text | N | In case of rejection, specifies the error message |
SecurityStatusRequest (e)
// Sample SecurityStatusRequest message
8=FIXT.1.1|9=101|35=e|34=2|49=FIRM|52=20230417-07:37:54.246186|56=ABAXX|55=GOMX23|263=0|324=1681717066260899|10=053|
Tag | Name | Required | Description |
---|---|---|---|
324 | SecurityStatusReqID | Y | Unique ID for this security request. |
55 | Symbol | Y | Instrument symbol |
263 | SubscriptionRequestType | Y | Subscription Request Type. Supported values:
|
SecurityStatus (f)
// Sample SecurityStatus message
8=FIXT.1.1|9=103|35=f|34=2|49=ABAXX|52=20230417-07:37:54.318765|56=FIRM|55=GOMX23|324=1681717066260899|326=100|10=156|
Tag | Name | Required | Description |
---|---|---|---|
324 | SecurityStatusReqID | Y | Unique ID for this security request. |
55 | Symbol | Y | Instrument symbol |
326 | SubscriptionRequestType | Y | Represents a specific market status for security. Supported values:
|
Drop Copy Messages
There are 2 drop copy services provided by exchange:
Execution Reports : To receive a real-time copy of each eligible Execution Report immediately after it is published.
Trade Capture Reports : To receive information on the order book trades as well as trade entries along with notifications of any trade cancel. Trades are availble for the last day only, details of trades on previous trading days are not available here.
Data Eligibility
Drop copy can be published for single market participant (MP) or for group of MPs that are pre-configured by exchange operations team.
MP name will always be added as additional party with the below parameters:
- 448 (PartyID) = MP Name
- 452 (PartyRole) = 7 (Entering Firm)
- 447 (PartyIDSource) = D (Custom)
Subscription
Execution Reports : No need to subscribe, assuming the credentials provided by operations team include the right permission, the Execution Reports will start to be published once sessions is properly initiated.
Trade Capture Reports : Explicit subscription is required, see below for more details, successful subscription will occur only if the appropriate permission was granted to connection credentials.
Strategies / Multi Legs Handling
There are 2 options for strategies trade reporting:
- Send one strategy summary message with MultiLegReportingType(442) = 3 (Multi-leg security)
- Send one individual legs messages with MultiLegReportingType(442) = 2 (Individual leg of a multi-leg security)
On ExecutionReport(8) system sends only the fill of the strategy summary, while on TradeCaptureReport(AE) system allows subscriber to determine how to get the trades.
For example: GOMV23/X23 for Gulf of Mexico LNG Spread (October 2023 / November 2023)
ExecutionReport will include only GOMV23/X23 (without any value tag 442)
On TradeCaptureReport subscriber has 2 options how to get the data:
Option 1
Using MultiLegReportingType(442) = 3 (Multi-leg security) on the TradeCaptureReportRequest(AD) Single trade report will be sent:
- Trade Report 1:
- Symbol(55) = GOMV23/X23
- MultiLegReportingType(442) = 3 (Multi-leg security)
Option 2
Using MultiLegReportingType(442) = 2 (Individual leg of a multi-leg security) on the TradeCaptureReportRequest(AD) tow trade reports will be sent:
Trade Report 1:
- Symbol(55) = GOMV23
- MultiLegReportingType(442) = 2 (Individual leg of a multi-leg security)
- tradeLegRefId(824) = 1
- multiLegDifferentialPrice(1522) = Trade price of the strategy
Trade Report 2:
- Symbol(55) = GOMX23
- MultiLegReportingType(442) = 2 (Individual leg of a multi-leg security)
- tradeLegRefId(824) = 2
- multiLegDifferentialPrice(1522) = Trade price of the strategy
Trade cancellation trade reports works exactly the same as trade report.
Supported Client Intitiated Messages
Message | MsgType | Usage |
---|---|---|
Trade Capture Report Request | AD | Allows to request Trade Capture Reports from the server |
Order Mass Status Request | AF | Request the list of active orders, will response with ExecutionReports(MsgType=8) |
Supported Exchange Intitiated Messages
Message | MsgType | Usage |
---|---|---|
Trade Capture Report Request Ack | AQ | Acknowledges the receipt of a Trade Capture Report Request message from the client. Can indicates successful subscription or rejected one. |
Trade Capture Report | AE | Indicates one of the following:
|
Execution Report | 8 | Indicates one of the following:
|
Trade Capture Report Request (AD) / Response Messages
Success Message | Failure Message | No Result |
---|---|---|
|
|
|
Order Mass Status Request (AF) / Response Messages
Success Message | Failure Message | No Result |
---|---|---|
|
|
|
OrderMassStatusRequest (AF)
// Sample OrderMassStatusRequest message
8=FIXT.1.1|9=92|35=AF|34=2|49=FIRM|52=20230417-07:44:00.883742|56=ABAXX|584=1681717439131833|585=7|10=237|
Tag | Name | Required | Description |
---|---|---|---|
584 | MassStatusReqID | Y | Order Mass Status Request ID |
585 | MassStatusReqType | Y | Supported values:
|
TradeCaptureReportRequest (AD)
// Sample TradeCaptureReportRequest message
8=FIXT.1.1|9=104|35=AD|34=3|49=FIRM|52=20230417-08:08:18.905268|56=ABAXX|263=1|442=2|568=1681718890045931|569=0|10=051|
Tag | Name | Required | Description |
---|---|---|---|
568 | TradeRequestID | Y | Trade Capture Report Request ID |
569 | TradeRequestType | Y | Supported values:
|
263 | SubscriptionRequestType | Y | Supported values:
|
442 | MultiLegReportingType | Y | Determines how to publish strategy trades: Supported values: |
TradeCaptureReportRequestAck (AQ)
// Sample TradeCaptureReportRequestAck (Accepted) message
8=FIXT.1.1|9=104|35=AQ|34=3|49=ABAXX|52=20230417-08:08:19.013092|56=FIRM|568=1681718890045931|569=0|749=0|750=0|10=059|
// Sample TradeCaptureReportRequestAck (Rejected) message
8=FIXT.1.1|9=95|35=AQ|49=ABAXX|56=FIRM|34=5|52=20230417-08:08:19.134739|568=1681718890045935|569=0|749=99|750=2|10=065|
Tag | Name | Required | Description |
---|---|---|---|
568 | TradeRequestID | Y | From request |
569 | TradeRequestType | Y | From request |
749 | TradeRequestResult | Y | Supported values:
|
750 | TradeRequestStatus | Y | Supported values:
|
58 | Text | N | Will be populated in case TradeRequestStatus = 2 (Rejected) |
TradeCaptureReport (AE)
// Sample TradeCaptureReport - Single Leg (Order Book Trade) message
20230417-08:08:19.129606000 : 8=FIXT.1.1|9=294|35=AE|49=ABAXX|56=FIRM|34=14|52=20230417-08:08:19.065011|568=1681718890045931|912=N|487=0|828=0|55=RD1Z24|32=2|31=4.50|75=20230417|60=20230417-07:10:10.107444|552=1|54=1|581=1|453=2|448=CL00001|447=D|452=7|448=CL00001|447=D|452=7|797=Y|570=N|1003=1|37=1|11=1681715342884328|10=027|
// Sample TradeCaptureReport - Single Leg (Trade Cancellation) message
8=FIXT.1.1|9=297|35=AE|49=ABAXX|56=MP1|34=216|52=20230209-08:18:51.753707|568=1675930324481|912=N|487=1|55=INS1|32=0.88|31=1.0|75=20230209|60=20230209-08:18:51.733963|552=1|54=1|453=3|448=123456|447=D|452=38|448=ABCD|447=D|452=12|448=FIRM|447=D|452=7|797=Y|570=N|1003=7|37=13|11=1675930396980|41=1675930396980|10=227|
// Sample TradeCaptureReport - Single Leg (Trade Entry) message
8=FIXT.1.1|9=245|35=AE|49=ABAXX|56=MP1|34=222|52=20230209-08:20:59.193384|568=1675930324481|912=N|487=0|828=2|55=INS1|32=10.00|31=100.0|75=20230209|60=20230209-08:20:59.169972|552=1|54=2|581=3|453=2|448=2|447=D|452=38|448=FIRM|447=D|452=7|797=Y|570=N|1003=8|10=132|
// Sample TradeCaptureReport - Multi Leg (Single Security) message
8=FIXT.1.1|9=303|35=AE|49=ABAXX|56=MP1|34=204|52=20230209-08:13:17.022751|568=1675930324481|912=N|487=0|828=0|55=INS1|32=0.88|31=1.0|75=20230209|60=20230209-08:13:16.996985|552=1|54=1|453=3|448=123456|447=D|452=38|448=ABCD|447=D|452=12|448=MP1|447=D|452=7|797=Y|570=N|1003=7|37=13|11=1675930396980|10=223|
// Sample TradeCaptureReport - Multi Leg (Individual Leg) message
8=FIXT.1.1|9=290|35=AE|49=ABAXX|56=mastergroup|34=6|52=20221115-15:13:05.331013|568=1668525185446|912=Y|487=0|828=2|55=Test1FMar23|32=10.0000|31=-1.500000|75=20221115|60=20221115-15:07:15.153740|552=1|54=2|581=1|453=2|448=33|447=D|452=38|448=Test1|447=D|452=7|797=Y|570=N|1003=1|442=2|824=2|1522=3.000000|10=223|
Tag | Name | Required | Description |
---|---|---|---|
568 | TradeRequestID | Y | From request |
912 | LastRptRequested | Y | Indicates if this is the last record (applicable for snapshots only) |
487 | TradeReportTransType | Y | Supported values:
|
828 | TrdType | Y | Only when TradeReportTransType = 0 Supported values:
|
797 | CopyMsgIndicator | N | Indicates drop copy, always Y |
570 | PreviouslyReported | Y | Always N |
1003 | TradeId | Y | Trade Id (Match Id) |
552 | NoSides | Y | Always 1 (One Side) |
37 | OrderID | Y | Order Id Changed Only when TrdType = 0 (Regular trade) For both TradeReportTransType 0(New) and 1(Cancel) |
11 | ClOrdID | N | ClOrdID of the order Changed only when TrdType = 0 (Regular trade) For both TradeReportTransType 0(New) and 1(Cancel) |
32 | LastQty | N | Trade amount |
31 | LastPx | N | Trade price |
55 | Symbol | N | Instrument symbol |
54 | Side | N | Supported values:
|
44 | Price | N | Order price |
60 | TransactTime | Y | Event timestamp in microseconds in UTC Format : YYYYmmDD-hh:mm:ss.000000 |
75 | TradeDate | Y | Format : YYYYMMDD |
581 | AccountType | N | Supported values:
|
73 | NoOrders | N | Only when MultiLegReportingType(442) = 2, Indicates number of orders to be combined. Will always be 2 |
→ 2887 | RelatedOrderID | N | Only when NoOrders(73) > 0 Identifier of a related order. |
→ 2888 | RelatedOrderIDSource | N | Only when NoOrders(73) > 0 Describes the source of the identifier that RelatedOrderID(2887) represents. |
1647 | NoRelatedInstruments | N | Only when MultiLegReportingType(442) = 2, shows number of related instruments Will always be 1 |
→ 1648 | RelatedInstrumentType | N | Only when NoRelatedInstruments(1647) > 0 The type of instrument relationship 99 (Custom: Multi-leg security) |
→ 1649 | RelatedSymbol | N | Only when NoRelatedInstruments(1647) > 0 Parent Symbol |
→ 1650 | RelatedSecurityID | N | Only when NoRelatedInstruments(1647) > 0 Parent instrumentId |
→ 1651 | RelatedSecurityIDSource | N | Only when NoRelatedInstruments(1647) > 0 Identifies class or source of the RelatedSecurityID(1650) value. 99 (Custom) |
<Parties> | N | This is party information related to the submitter of the request. | |
442 | MultiLegReportingType | N | Will be shown for strategy trades only - per request parameter |
824 | tradeLegRefId | N | Only when MultiLegReportingType(442) = 2, will show leg index (leg1 → 1, leg2 → 2 etc) |
1522 | multiLegDifferentialPrice | N | Only when MultiLegReportingType(442) = 2, will show parent trade price |
WebSocket Trading
WebSocket allows Market Participants to place and interact with their orders in real-time.
WebSocket Connection Details
Environment | Endpoint | Description |
---|---|---|
UAT | wss://trade.uat.xabx.net | Trading and Market Data |
UAT | wss://report.uat.xabx.net | Reporting |
WebSocket Onboarding
Step | Env | Action | Responsible |
---|---|---|---|
1.a | UAT | Provide WebSocket credentials assigned to member | Abaxx |
1.b | Prod | Provide public IP's CIDR range for IP whitelisting | Member |
1.c | Prod | Provide WebSocket credentials (including SocketConnectHost and SocketConnectPort) assigned to member | Abaxx |
2 | UAT | Test credentials and start development | Member |
3 | Prod | Proceed on Step 1.b when ready for Prod setup | Member |
4 | Prod | Test and conclude WebSocket connectivity is LIVE | Member / Abaxx |
Contact Us
For technical exchange related queries: [email protected]
For functional exchange related queries: [email protected]
Authentication
- Request body must be a valid JSON object (non-JSON objects will be ignored).
- Exchange will ignore any additional parameters that was sent on request body but was not specified in this document.
- In case of multiple parameters sent with different values, system will always use the last value provided.
Request Parameters
// Request structure
{
"q": <QUALIFIER>,
"sid": <STREAM_IDENTIFIER>,
"d":
{
<JSON_OBJECT>
}
}
Parameter | Type | Description |
---|---|---|
q | String | Qualifier, contains the method for the specific API call. |
sid | Int | Stream Identifier, for each WebSocket connection this is a unique identifier for the API call. Please note that as long as the sid was not ended (other by exchange or by consumer) this can’t be used again on the same WebSocket connection. |
d | JSON | JSON Object, contain the request body |
Success Response
// Sample SUCCESS response
{
"sig": 1,
"q": "exchange.market/createSession",
"sid": 1
}
The response will always include the q and sid parameters from request and a d parameter with the response body.
// Sample additional response for short living stream
{
"sig": 1,
"q": "exchange.market/createSession",
"sid": 1
}
In case of short living stream (i.e. trading action), additional response will be sent upon stream closure with success, this message will include the q and sid parameters from request and sig:1.
Failure Response
// Sample FAILURE response
{
"sig": 2,
"q": "exchange.market/createSession",
"errorType": "401",
"sid": 1,
"d": {
"errorCode": 6002,
"errorMessage": "Missing fields: 'apiKey'"
}
}
The response will always include the below parameters:
Parameter | Type | Description |
---|---|---|
sig | Int | signal will be equal to 2 |
q | String | from request |
errorType | Int | internal error type that should be ignored |
sid | Int | from request |
d | JSON | data that contain errorCode and errorMessage. Those are the error code and message to consider. |
Stream Closure
// Sample stream closure request
{
"sig": 3,
"q": "exchange.market/orderBookDepth",
"sid": 100
}
In order to close active stream need to send a message with sig:3 in addition to q and sid from request.
sig Possible Values
sig | Description |
---|---|
1 | Stream closed with success |
2 | Stream closed with failure |
3 | Stream was closed due to consumer request |
createSession
qualifier: exchange.market/createSession
# Generating signature using HMAC SHA256
message='"apiKey":"1234567abcdz","timestamp":"1558941516123"'
secret='MySecretKey'
signature=$(echo -n $message | openssl dgst -sha256 -hmac $secret)
echo ${signature}
# Sample output
265cfbc40c22355d6c1ecc1f3a1e87e8c46954db9096a7bd6967241dd8bc65b6
// Sample createSession request
{
"d": {
"apiKey": "806df2ec-a2c6-46f3-98e5-1a24c86d664a",
"timestamp": 1681176543781,
"signature": "71f3a84b3a2a6af7ca0d2e73c9d839ebc50718d6f62be835acd482d7488010ce"
},
"q": "exchange.market/createSession",
"sid": 1
}
// Sample createSession SUCCESS response
{
"q": "exchange.market/createSession",
"sid": 1,
"d": {}
}
// Sample createSession FAILURE response
{
"sig": 2,
"q": "exchange.market/createSession",
"errorType": "401",
"sid": 1,
"d": {
"errorCode": 6003,
"errorMessage": "Create session failed"
}
}
The createSession API lets you authenticate to our exchange API. Prior to any exchange API call, you must create a valid session, this session remains active as long as WebSocket connection remains open.
- Any market participant connected to exchange will be provided with a set of apiKey and secret, each apiKey is assigned with the relevant permissions.
- A single WebSocket connection can have single active session at a time.
Request Parameters
Parameter | Type | Description |
---|---|---|
apiKey | String | Unique market participant API key provided by Exchange Operations Team |
timestamp | Unix Timestamp | Login timestamp in milliseconds, must be now in UTC |
signature | String | HMAC SHA256 signature computed using provided secret key and message body. |
Trading
Trading qualifiers allows market participants to place new orders and interact with their orders in real time. This includes placing, modifying and cancelling an orders.
placeOrder
qualifier: v1/exchange.market/placeOrder
// Sample placeOrder request
{
"q": "v1/exchange.market/placeOrder",
"sid": 1681226362518,
"d": {
"orderType": "Limit",
"side": "Buy",
"quantity": 10,
"price": 5.5,
"instrument": "NPAJ23",
"timeInForce": "GTC",
"mpOrderId": 1681186131308,
"parties": [
{
"id": "AC00001",
"source": "D",
"role": 38
}
],
"accountType": "Client",
"expiryDate": "1679297797"
}
}
// Sample placeOrder SUCCESS response
{
"q": "v1/exchange.market/placeOrder",
"sid": 1681226362518,
"d": {
"orderId": 1,
"orderStatus": "Pending"
}
}
// Sample placeOrder FAILURE response
{
"sig": 2,
"q": "v1/exchange.market/placeOrder",
"errorType": "500",
"sid": 1,
"d": {
"errorCode": 1010,
"errorMessage": "Instrument NPAJ22 not found"
}
}
The placeOrder API lets market participants to place a new order into exchange.
A valid order will receive a response with Pending status, which means that order was validated and accepted. The response contains the exchange orderId which should be stored and used for later status changes, notified via the orderBookDepth stream.
Non-valid order will be responded with error message.
In case that market participant system didn't get a response within the timeout schedule, the market participant should do the one of the below:
- Retry sending same order using same mpOrderId which will result:
- Rejection in case that previous order was accepted
- Success in case that previous order was not accepted
- Cancel the order using mpOrderId which will assure that order is no longer active (it might be already executed)
mpOrderId is unique identifier and should not be used for more than a single order. Note that exchange might accept already used mpOrderId after predefined period but it is not recommended to use same mpOrderId twice.
Refer to Supported Order Types and Validity for the list of OrderType and TimeInForce supported by the exchange.
Request Parameters
Parameter | Type | Description |
---|---|---|
mpOrderId | Long | Unique market participant order ID |
orderType | Enum | |
side | Enum | |
instrument | String | Instrument identifier |
quantity | Decimal | Order quantity |
price(Optional) | Decimal | For Limit order |
timeInForce(Optional) | Enum | For Limit order
|
expiryDate | UTC Time | Required only for GTD orders - expiration date in epoch timestamp. i.e. 1682352000 = 2023-04-24 16:00:00 UTC Note: In case that trading is halted or market is closed at expiry date - the order will be cancelled (even that cancelOrder requests are not allowed). |
accountType | Enum | |
parties | Object | Array of party objects, see details below. Note: Max number of parties is 20 |
Party Specification:
Parameter | Type | Description |
---|---|---|
id | String | Party ID (Max length = 20) |
source | Char | Party source |
role | Int | Party role |
Response
Parameter | Type | Description |
---|---|---|
orderId | Long | Exchange Order ID |
orderStatus | String | Order status: Pending |
canceOrder
qualifier: v1/exchange.market/cancelOrder
// Sample canceOrder request
{
"q":"v1/exchange.market/cancelOrder",
"sid": 1,
"d":{
"orderId":1681226362518,
"instrument": "NPAJ23"
}
}
// Sample canceOrder SUCCESS response
{
"q":"v1/exchange.market/cancelOrder",
"sid":1,
"d":{
"orderId":1681226362518
}
}
// Sample canceOrder FAILURE response
{
"sig": 2,
"q": "v1/exchange.market/cancelOrder",
"errorType": "500",
"sid": 1,
"d": {
"errorCode": 1100,
"errorMessage": "Order not found for that instrument"
}
}
The cancelOrder API is used to request that an order be cancelled. If you send a valid order to cancel, you should receive a response that confirms that order was cancelled. This means that remaining open quantity of the order was cancelled. Non-valid cancel order will be responded with the error message.
Request Parameters
Parameter | Type | Description |
---|---|---|
orderId(Optional) | Long | Exchange Order ID. Not mandatory if mpOrderId was sent |
mpOrderId(Optional) | Long | Market participant order ID. Not mandatory if orderId was sent |
instrument | String | Instrument identifier |
Response
Parameter | Type | Description |
---|---|---|
orderId | Long | Exchange Order ID |
massCancel
qualifier: v1/exchange.market/massCancel
// Sample massCancel request
{
"q": "v1/exchange.market/massCancel",
"sid": 1,
"d": {
"instrument": "NPAJ23"
}
}
// Sample massCancel SUCCESS response
{
"q": "v1/exchange.market/massCancel",
"sid": 1,
"d": {
"numberOfOrders": 5
}
}
// Sample massCancel FAILURE response
{
"sig": 2,
"q": "v1/exchange.market/massCancel",
"errorType": "500",
"sid": 1,
"d": {
"errorCode": 1010,
"errorMessage": "Instrument NPAJ22 not found"
}
}
The massCancel API is used to cancel all the active order for specific instrument for specific market participant. If you send a valid request, you should receive a response that confirms the number of orders that were cancelled. Non-valid cancel order will be responded with the error message.
Request Parameters
Parameter | Type | Description |
---|---|---|
instrument | String | Instrument identifier |
Response
Parameter | Type | Description |
---|---|---|
numberOfOrders | Int | Number of orders that were cancelled |
modifyOrder
qualifier: v1/exchange.market/modifyOrder
// Sample modifyOrder request
{
"q":"v1/exchange.market/modifyOrder",
"sid": 1,
"d":{
"orderId":1681186131308,
"instrument": "NPAJ23",
"quantity": 5
}
}
// Sample modifyOrder SUCCESS response
{
"q":"v1/exchange.market/modifyOrder",
"sid":1,
"d":{
"orderId":1681186131308
}
}
// Sample modifyOrder FAILURE response
{
"sig": 2,
"q": "v1/exchange.market/modifyOrder",
"errorType": "500",
"sid": 1,
"d": {
"errorCode": 1100,
"errorMessage": "Order not found for that instrument"
}
}
The modifyOrder API is used to reduce the order quantity without losing the time priority.
If you send a valid order to modify, you should receive a response that confirms that order was modified. This means that remaining open quantity of the order was reduced.
Non-valid modify order requests will be responded with the error message.
Request Parameters
Parameter | Type | Description |
---|---|---|
orderId | Long | Exchange Order ID |
instrument | String | Instrument identifier |
quantity | Decimal | New order quantity |
Response
Parameter | Type | Description |
---|---|---|
orderId | Long | Exchange Order ID |
replaceOrder
qualifier: v1/exchange.market/replaceOrder
// Sample replaceOrder request
{
"q": "v1/exchange.market/replaceOrder",
"sid": 1,
"d": {
"orderId": 1681186131308,
"instrument": "NPAJ23",
"quantity": 5,
"price": 4.5
}
}
// Sample replaceOrder SUCCESS response
{
"q": "v1/exchange.market/replaceOrder",
"sid": 1,
"d": {
"originalOrderId": 1681186131308,
"newOrderId": 1681186131321
}
}
// Sample replaceOrder FAILURE response
{
"sig": 2,
"q": "v1/exchange.market/replaceOrder",
"errorType": "500",
"sid": 1,
"d": {
"errorCode": 1100,
"errorMessage": "Order not found for that instrument"
}
}
The replaceOrder API is used to change a few of the order parameters in a single command for order which is resting on the book, this action will lose the time priority as it going to cancel the previous order and place a new one.
A valid order replace request will receive a response that confirms that order was replaced.
Non-valid replace order requests will be responded with the error message.
Request Parameters
Parameter | Type | Description |
---|---|---|
orderId | Long | Exchange Order ID |
instrument | String | Instrument identifier |
quantity | Decimal | New order quantity |
price | Decimal | New order price |
timeInForce(Optional) | eNum | New order validity |
expiryDate(Optional) | UTC Time | Required for GTD order |
Response
Parameter | Type | Description |
---|---|---|
originalOrderId | Long | Exchange Order ID of the original order |
newOrderId | Long |
Market Data
Building Book State
Using Raw Data
In order to build book state that include all the orders since first order, need to consume all orderBookDepth events per instrument and apply it on the right sequence. Consumer has the option if to subscribe to the first event (in case that need to build book state from scratch) or to subscribe from the last consumed event (in case that some events were already processed).
Using Snapshot
In order to build current book state without all the orders but only the current resting orders, need to consume orderBookState stream the provides list of all the current resting orders. By using returned lastTrackingNumberto subscribe to orderBookDepth consumer can no catch the real time order book state.
orderBookDepth
qualifier: v2/exchange.market/orderBookDepth
The orderBookDepth stream provides the full order book depth data. This stream is public and all consumers receive the messages simultaneously.
It publish only raw data without any aggregation, hence in order to determine the current state of an order, the subscriber needs to maintain the updated order state as per all the messages for that order.
Message types to get real time market data:
- Add
- Cancelled
- Executed
- Modified
- InstrumentStatus
- TradeReport
- TradeCancel
Message type to get indicative prices during auctions:
- AuctionIndicativeEP
Exchange can configure this stream to be anonymous or pseudonymous (mpId is published but not any other market participant details).
For anonymous configured streams all the mpId and mpOrderId data will not be published, except to the market participant that placed the order which will see only its own mpId and mpOrderId data.
// Sample orderBookDepth subscription request
{
"q": "v1/exchange.market/orderBookDepth",
"sid": 10,
"d": {
"trackingNumber": 100
}
}
Request Parameters
Parameter | Type | Description |
---|---|---|
trackingNumber (Optional) | Long | Determines the starting point of stream.
|
Response
// Sample orderBookDepth Add response
{
"q": "v1/exchange.market/orderBookDepth",
"sid": 1681268326731734,
"d": {
"messageType": "Add",
"eventTimestamp": 1681268421060890600,
"instrument": "NPAF24",
"eventId": 3,
"trackingNumber": 11225792,
"orderId": 2,
"mpId": 23,
"mpOrderId": 1681268421025,
"side": "Buy",
"quantity": 10,
"price": 12
}
}
Add Order Message
Add Order Message indicates that a new order has been accepted by the exchange and was added to the book.
Field | Description |
---|---|
eventId | Sequence identifier per instrument for the event |
messageType | Add |
eventTimestamp | Event timestamp (in nanoseconds) in GMT |
instrument | Instrument symbol |
orderId | Exchange order ID |
mpId | Market participant ID |
mpOrderId | Market participant order ID |
side | |
quantity | Order quantity |
price | Order price |
trackingNumber | Event tracking number |
// Sample orderBookDepth Executed response
{
"q": "v1/exchange.market/orderBookDepth",
"sid": 1681268326731734,
"d": {
"messageType": "Executed",
"eventTimestamp": 1681268567119683800,
"instrument": "GOMH24",
"eventId": 16,
"trackingNumber": 11226240,
"makerOrderId": 1,
"takerMpId": 23,
"takerMpOrderId": 1681268567078,
"takerOrderId": 10,
"matchId": 3,
"executedQuantity": 5,
"executedPrice": 5
}
}
Order Executed Message
Order Executed Message indicates that an order on the book is matched with a new coming order in whole or in part. It is possible to receive several Order Executed Messages for a single orderId.
Field | Description |
---|---|
eventId | Identifier for the event, unique per instrument |
messageType | Executed |
eventTimestamp | Event timestamp (in nanoseconds) in GMT |
instrument | Instrument symbol |
makerMpId | Resting order market participant ID |
makerMpOrderId | Resting order market participant order ID |
makerOrderId | Resting orderId |
takerMpId | Aggressive order market participant ID |
takerMpOrderId | Aggressive order market participant order ID |
takerOrderId | Aggressive order ID |
matchId | Unique ID for the match |
executedQuantity | Matched quantity |
executedPrice | Matched price (maker order price). |
trackingNumber | Event tracking number |
// Sample orderBookDepth Cancelled response
{
"q": "v1/exchange.market/orderBookDepth",
"sid": 1681268326731734,
"d": {
"messageType": "Cancelled",
"eventTimestamp": 1681268656940196000,
"instrument": "GOMH24",
"eventId": 17,
"trackingNumber": 11227008,
"orderId": 11,
"side": "Sell",
"mpId": 23,
"mpOrderId": 1681268656898,
"cancelledQuantity": 5
}
}
Order Cancel Message
Order Cancel Message indicates that an order on the book is being cancelled. This message also sent in case of market order that was not fully filled.
Field | Description |
---|---|
messageType | Cancelled |
eventId | Identifier for the event, unique per instrument |
eventTimestamp | Event timestamp (in nanoseconds) in GMT |
instrument | Instrument symbol |
side | |
orderId | Exchange order ID |
mpId | Market participant ID |
mpOrderId | Market participant order ID |
cancelledQuantity | Order cancelled quantity |
trackingNumber | Event tracking number |
// Sample orderBookDepth Modified response
{
"q": "v1/exchange.market/orderBookDepth",
"sid": 1681268326731734,
"d": {
"messageType": "Modified",
"eventTimestamp": 1681269097197066000,
"instrument": "GOMH24",
"eventId": 19,
"trackingNumber": 11228032,
"mpId": 23,
"mpOrderId": 1681268702940,
"orderId": 12,
"removedQuantity": 2,
"newQuantity": 3
}
}
Order Modify Message
Order Modify Message indicates that an order on the book is being modified and order quantity was reduced.
Field | Description |
---|---|
messageType | Modified |
eventId | Identifier for the event, unique per instrument |
eventTimestamp | Event timestamp (in nanoseconds) in GMT |
instrument | Instrument symbol |
orderId | Exchange order ID |
mpId | Market participant ID |
mpOrderId | Market participant order ID |
removedQuantity | Order quantity that was removed |
newQuantity | Remaining open quantity |
trackingNumber | Event tracking number |
// Sample orderBookDepth InstrumentStatus response
{
"q": "v2/exchange.market/orderBookState",
"sid": 1681263197035879,
"d": {
"messageType": "InstrumentStatus",
"instrument": "NPAN24",
"tradingStatus": "TRADE",
"marketStatus": "Closed",
"status": "ACTIVE"
}
}
Instrument Status Message
Instrument Status Message indicates that instrument status was changed. This message specify only the data that was actually changed, to get the snapshot of current instruments status you should use orderBookState.
Note: when creating new instrument the first message will contain tradingStatus and status, those will be followed with separate event for marketStatus
Field | Description |
---|---|
messageType | InstrumentStatus |
eventTimestamp | Event timestamp (in nanoseconds) in GMT |
instrument | Instrument symbol |
tradingStatus | |
marketStatus | |
status | |
trackingNumber | Event tracking number |
// Sample orderBookDepth AuctionIndicativeEP response
{
"q": "v1/exchange.market/orderBookDepth",
"sid": 1681268326731734,
"d": {
"messageType": "AuctionIndicativeEP",
"eventTimestamp": 1681268340023232300,
"instrument": "GOMF25",
"eventId": 453,
"indicativePrice": 0,
"pairedQuantity": 0,
"imbalanceQuantity": 0,
"imbalanceSide": "NA",
"bestBuyPrice": 0,
"bestBuyQuantity": 0,
"bestSellPrice": 0,
"bestSellQuantity": 0
}
}
Auction Indicative Equilibrium Price Message
Auction Indicative Equilibrium Price Message publish the indicative equilibrium price during an auction.
This message is sent only on real time during auctions and will not be sent if subscribing after the auction.
Field | Description |
---|---|
eventId | Sequence identifier per instrument for the event |
messageType | AuctionIndicativeEP |
eventTimestamp | Event timestamp (in nanoseconds) in GMT |
instrument | Instrument symbol |
IndicativePrice | The indicative price upon which the paired shares and the imbalance quantity are based |
pairedQuantity | The quantity to be matched at the current indicative price |
imbalanceQuantity | The absolute value of quantity that would remain unexecuted at the current indicative price. |
imbalanceSide | |
bestBuyPrice | In case of No match - the highest buy order price |
bestBuyQuantity | In case of No match - the highest buy order quantity |
bestSellPrice | In case of No match - the lowest sell order price |
bestSellQuantity | In case of No match - the lowest sell order quantity |
// Sample orderBookDepth TradeReport response
{
"q": "v1/exchange.market/orderBookDepth",
"sid": 10,
"d": {
"eventId": 29969,
"messageType": "TradeReport",
"tradeType": "Block",
"matchId": 12345,
"eventTimestamp": 1681269268498009564,
"instrument": "GOMF25",
"buyMpId": "12",
"sellMpId": "13",
"quantity": 1,
"price": 1.22,
"trackingNumber": 100
}
}
// Sample orderBookDepth TradeCancel response
{
"q": "v1/exchange.market/orderBookDepth",
"sid": 10,
"d": {
"eventId": 29969,
"messageType": "TradeCancel",
"matchId": 12345,
"eventTimestamp": 1681269282838226493,
"instrument": "GOMF25",
"buyMpId": "12",
"sellMpId": "13",
"quantity": 1,
"price": 1.22,
"trackingNumber": 100
}
}
Trade Report Message
Trade report Message indicates that Trade Entry️ was captured, it means that trade was done between market participants out of the order book.
Field | Description |
---|---|
messageType | TradeReport |
eventId | Identifier for the event, unique per instrument |
eventTimestamp | Event timestamp (in nanoseconds) in GMT |
instrument | Instrument symbol |
tradeType | |
matchId | Trade Id This will use the same sequence as order book trade |
quantity | Trade quantity |
price | Trade price |
buyMpId | Buy MP Id |
sellMpId | Sell MP Id |
trackingNumber | Event tracking number |
orderBookState
qualifier: v2/exchange.market/orderBookState
This stream provides close to real time snapshot of order book state for all traded instruments.
The result are the list of:
- All instruments and their current status
- All orders currently resting on the book, it is not aggregated by price level.
Each orderBookStatestream will be closed with lastTrackingNumber, the trackingNumberof the last event used as part of returned book state, this can be used as input in orderBookDepthto be able start consume from that point.
Request Parameters
// Sample orderBookState Subscription request
{
"q": "v2/exchange.market/orderBookState",
"sid": 100,
"d": {}
}
// Sample orderBookState Resting Orders response
{
"q": "v2/exchange.market/orderBookState",
"sid": 100,
"d": {
"messageType": "Order",
"orderId": 18,
"side": "Buy",
"instrument": "GOMM23",
"quantity": 30,
"price": 3
}
}
// Sample orderBookState Instrument Status response
{
"q": "v2/exchange.market/orderBookState",
"sid": 100,
"d": {
"messageType": "InstrumentStatus",
"instrument": "NPAM24",
"tradingStatus": "Trade",
"marketStatus": "Opened",
"status": "Active"
}
}
// Sample orderBookState lastTrackingNumber response
{
"q": "v2/exchange.market/orderBookState",
"sid": 100,
"d": {
"lastTrackingNumber": 7275136
}
}
Note: There are no request parameters.
Response
Order Message
Parameter | Type | Description |
---|---|---|
messageType | String | Order |
orderId | Long | Exchange Order ID |
side | String | |
instrument | String | Instrument identifier |
quantity | Decimal | Order quantity |
price | Decimal | Order price |
Instrument Status Message
Parameter | Description |
---|---|
messageType | InstrumentStatus |
instrument | Instrument symbol |
tradingStatus | |
marketStatus | |
status |
Private Data
Private data API enables market participants to receive additional copies of the trading activity. This interface may also be used by participants to download the current status of all their active orders.
Data Eligibility
Private data API can be consumed for single market participant (MP) or for group of MPs that are pre-configured by exchange operations team.
Note: Empty field will not be included in the message
massOrderStatus
qualifier: v1/exchange.market/massOrderStatus
Any participant can use the massOrderStatus API to retrieve the current status of all its own active orders.
Request Parameters
// Sample massOrderStatus request
{
"q": "v1/exchange.market/massOrderStatus",
"sid": 100,
"d": {}
}
// Sample massOrderStatus Active Order response
{
"q": "v1/exchange.market/massOrderStatus",
"sid": 1681197290602437,
"d": {
"messageType": "OrderStatus",
"orderId": 1,
"mpOrderId": 1681197283673,
"orderType": "Limit",
"side": "Buy",
"instrument": "NPAM24",
"quantity": 10,
"price": 5,
"timeInForce": "GTC",
"orderTimestamp": 1681197283699801000,
"filledQuantity": 0,
"remainingOpenQuantity": 10,
"removedQuantity": 0,
"filledPrice": 0,
"marketModel": "T",
"accountType": "Client",
"parties": [
{
"id": "AC00001",
"source": "D",
"role": 38
}
],
"lastEventTimestamp": 1681197283699801000,
"lastEventId": 2,
"mpId": 23,
"mpName": "MP00001"
}
}
// Sample massOrderStatus lastTrackingNumber response
{
"q": "v1/exchange.market/massOrderStatus",
"sid": 1681197290602437,
"d": {
"lastTrackingNumber": 7280352
}
}
Note: There are no request parameters.
Response
orderMassStatus response provides close to real time list of all current active orders with the entire details of those orders.
Each orderMassStatusresponse response includes includeslastTrackingNumber, the trackingNumberof the last event used to generate the orders list, this can be used as input in executionReports to be able start consume events from that point.
Field | Description |
---|---|
messageType | OrderStatus |
orderId | Exchange order ID |
mpOrderId | Same as in placeOrder request |
orderType | Same as in placeOrder request |
side | Same as in placeOrder request |
instrument | Same as in placeOrder request |
quantity | Same as in placeOrder request |
price | Same as in placeOrder request |
timeInForce | Same as in placeOrder request |
expiryDate | Same as in placeOrder request |
orderTimestamp | Order creation timestamp (in nanoseconds) in GMT |
marketModel | |
parties | Same as in placeOrder request |
accountType | Same as in placeOrder request |
filledQuantity | Total filled quantity |
filledPrice | Weighted average filled price for all fills on that order Sum(event.executedQuantity∗event.executedPrice) / Sum(event.executedQuantity) |
remainingOpenQuantity | Remaining open quantity. quantity − filledQuantity − removedQuantity |
removedQuantity | Quantity that was removed with modifyOrder request |
lastEventTimestamp | Last order event timestamp (in nanoseconds) in GMT |
lastEventId | Last event that was used to calculate order state |
mpId | MP Id |
mpName | MP name |
executionReports
qualifier: v1/exchange.market/executionReports
// Sample executionReports request
{
"q": "v1/exchange.market/executionReports",
"sid": 104,
"d": {
"trackingNumber": 34256480
}
}
// Sample executionReports Add response
{
"q": "v1/exchange.market/executionReports",
"sid": 1681199114141039,
"d": {
"messageType": "Add",
"orderId": 5,
"mpOrderId": 1681199277677,
"orderType": "Limit",
"side": "Buy",
"instrument": "NPAM24",
"quantity": 5,
"price": 4.5,
"timeInForce": "GTC",
"orderTimestamp": 1681199277696560600,
"filledQuantity": 0,
"remainingOpenQuantity": 5,
"removedQuantity": 0,
"marketModel": "T",
"accountType": "Client",
"parties": [
{
"id": "AC00001",
"source": "D",
"role": 38
}
],
"eventTimestamp": 1681199277696560600,
"eventId": 7,
"trackingNumber": 7284800,
"mpId": 23,
"mpName": "MP00001"
}
}
// Sample executionReports Cancelled response
{
"q": "v1/exchange.market/executionReports",
"sid": 1681199114141039,
"d": {
"messageType": "Cancelled",
"orderId": 4,
"mpOrderId": 1681199140375,
"orderType": "Market",
"side": "Buy",
"instrument": "NPAM24",
"quantity": 1,
"timeInForce": "IOC",
"orderTimestamp": 1681199140395915000,
"filledQuantity": 0,
"remainingOpenQuantity": 0,
"removedQuantity": 0,
"marketModel": "T",
"accountType": "Client",
"parties": [
{
"id": "AC00001",
"source": "D",
"role": 38
}
],
"eventTimestamp": 1681199140395915000,
"eventId": 6,
"cancelledQuantity": 1,
"trackingNumber": 7284544,
"mpId": 23,
"mpName": "MP00001"
}
}
// Sample executionReports Executed response
{
"q": "v1/exchange.market/executionReports",
"sid": 1681199114141039,
"d": {
"messageType": "Executed",
"orderId": 4,
"mpOrderId": 1681199484404,
"orderType": "Market",
"side": "Sell",
"instrument": "GOMH24",
"quantity": 5,
"timeInForce": "IOC",
"orderTimestamp": 1681199484424957200,
"filledQuantity": 5,
"remainingOpenQuantity": 0,
"removedQuantity": 0,
"marketModel": "T",
"accountType": "Client",
"parties": [
{
"id": "AC00001",
"source": "D",
"role": 38
}
],
"eventTimestamp": 1681199484424957200,
"eventId": 4,
"lastFilledQuantity": 5,
"lastFilledPrice": 9.35,
"matchId": 1,
"tradingMode": "CT",
"trackingNumber": 7285728,
"mpId": 23,
"mpName": "MP00001"
}
}
// Sample executionReports Modified response
{
"q": "v1/exchange.market/executionReports",
"sid": 1681201306869371,
"d": {
"messageType": "Modified",
"orderId": 9,
"mpOrderId": 1681202695548,
"orderType": "Limit",
"side": "Sell",
"instrument": "GOMH24",
"quantity": 5,
"price": 9.6,
"timeInForce": "GTC",
"orderTimestamp": 1681202695555402200,
"filledQuantity": 0,
"remainingOpenQuantity": 3,
"removedQuantity": 2,
"marketModel": "T",
"accountType": "Client",
"parties": [
{
"id": "CL00001",
"source": "D",
"role": 38
}
],
"eventTimestamp": 1681202722333444400,
"eventId": 13,
"lastRemovedQuantity": 2,
"trackingNumber": 7294720,
"mpId": 23,
"mpName": "MP00001"
}
}
// Sample executionReports TradeReport response
/*
FOR BLOCK TRADE - TO FOLLOW
*/
// Sample executionReports TradeCancel response
{
"q": "v1/exchange.market/executionReports",
"sid": 1681201306869371,
"d": {
"messageType": "Cancelled",
"orderId": 6,
"mpOrderId": 1681201519847,
"orderType": "Limit",
"side": "Sell",
"instrument": "GOMH24",
"quantity": 5,
"price": 9.6,
"timeInForce": "GTC",
"orderTimestamp": 1681201519856937000,
"filledQuantity": 0,
"remainingOpenQuantity": 0,
"removedQuantity": 0,
"marketModel": "T",
"accountType": "Client",
"parties": [
{
"id": "CL00001",
"source": "D",
"role": 38
}
],
"eventTimestamp": 1681202079298140400,
"eventId": 7,
"cancelledQuantity": 5,
"trackingNumber": 7292000,
"mpId": 23,
"mpName": "MP00001"
}
}
Request Parameters
Any participant can use the executionReports API to subscribe to its own orders and trades events.
There are few message types used in this API:
- Add
- Cancelled
- Executed
- Modified
- TradeReport
- TradeCancel
Parameter | Type | Description |
---|---|---|
trackingNumber (Optional) | Long | Determines the starting point of stream.
|
Response
Field | Message Type | Description |
---|---|---|
messageType | ||
side | Same as in placeOrder request | |
instrument | Same as in placeOrder request | |
quantity | Same as in placeOrder request | |
price | Same as in placeOrder request | |
mpId | MP Id | |
mpName | MP name | |
accountType | Same as in placeOrder request | |
parties | Same as in placeOrder request | |
eventId | Sequence identifier per instrument for the event | |
eventTimestamp | Event timestamp (in nanoseconds) in GMT | |
trackingNumber | Event tracking number | |
orderId | Exchange order ID | |
mpOrderId | Same as in placeOrder request | |
orderType | Same as in placeOrder request | |
timeInForce | Same as in placeOrder request | |
expiryDate | Same as in placeOrder request | |
orderTimestamp | Order creation timestamp (in nanoseconds) in GMT | |
marketModel | ||
filledQuantity | Total filled quantity | |
remainingOpenQuantity | Remaining open quantity. quantity − filledQuantity − removedQuantity |
|
removedQuantity | Quantity that was removed with modifyOrder request | |
lastFilledQuantity | Matched quantity | |
lastFilledPrice | Matched price (maker order price). | |
mathchId | Unique ID for the match | |
tradingMode | ||
cancelledQuantity | The cancelled quantity in the current cancelled event | |
lastRemovedQuantity | Removed quantity on current event | |
tradeType | EFRP/Block/Other On TradeCancel it will be shown only for TradeReport cancellation |
trades
qualifier: v1/exchange.market/trades
Allows to get a real time stream for all the trades data
Available messages in that API:
- MatchedTrade - for order book trade
- TradeReport - for trade entry trade
- TradeCancel - for trade cancellation (separate records will be returned for cancellation)
Request Parameters
// Sample trades request
{
"q": "v1/exchange.market/trades",
"sid": 1681269620629657,
"d": {
"trackingNumber": 7294720
}
}
// Sample trades MatchedTrade response
{
"q": "v1/exchange.market/trades",
"sid": 1681269620629657,
"d": {
"actionType": "MatchedTrade",
"timestamp": 1681268567119683800,
"trackingNumber": 11226240,
"eventId": 16,
"orderId": 10,
"mpOrderId": 1681268567078,
"mpId": 23,
"mpName": "MP00001",
"instrumentId": 21,
"instrument": "GOMH24",
"side": "Sell",
"price": 5,
"quantity": 5,
"tradeId": 3,
"tradingMode": "CT",
"accountType": "Client",
"parties": [
{
"id": "AC00001",
"source": "D",
"role": 38
}
],
"makerTaker": "Taker",
"tradeDate": "2023-04-12"
}
}
// Sample trades TradeReport response
{
"q": "v1/exchange.market/trades",
"sid": 16,
"d": {
"eventId": 27,
"timestamp": 1681269855030681261,
"actionType": "TradeReport",
"mpId": 23,
"mpName": "MP00001",
"instrumentId": 21,
"instrument": "GOMH24",
"side": "Buy",
"price": 5,
"quantity": 5,
"tradeId": 3,
"tradingMode": "ON",
"accountType": "Client",
"parties": [
{
"id": "AC00001",
"source": "D",
"role": 38
}
],
"tradeType": "Block",
"tradeDate": "2023-04-12",
"trackingNumber": 217819392
}
}
// Sample trades TradeCancel response
{
"q": "v1/exchange.market/trades",
"sid": 16,
"d": {
"eventId": 26,
"timestamp": 1681270047545166290,
"actionType": "TradeCancel",
"mpId": 23,
"mpName": "MP00001",
"instrumentId": 21,
"instrument": "GOMH24",
"side": "Buy",
"price": 6,
"quantity": 10,
"tradeId": 3,
"tradingMode": "CT",
"tradeDate": "2023-04-12",
"trackingNumber": 217818208
}
}
Parameter | Type | Description |
---|---|---|
trackingNumber(Optional) | Long | Determines the starting point of stream.
|
Response
Field | Description | Order Book | Trade Entry | Trade Cancel |
---|---|---|---|---|
eventId | Event Id | ✓ | ✓ | ✓ |
timestamp | Event timestamp (in nanoseconds) in GMT | ✓ | ✓ | ✓ |
actionType | ✓ | ✓ | ✓ | |
orderId | Order id initiated the trade | ✓ | ||
mpOrderId | From source order | ✓ | ||
mpId | MP Id | ✓ | ✓ | ✓ |
mpName | MP Name | ✓ | ✓ | ✓ |
instrumentId | Instrument id | ✓ | ✓ | ✓ |
Instrument | instrument symbol | ✓ | ✓ | ✓ |
side | ✓ | ✓ | ✓ | |
price | Trade price | ✓ | ✓ | ✓ |
quantity | Trade quantity | ✓ | ✓ | ✓ |
tradeId | matchId | ✓ | ✓ | ✓ |
tradingMode | ✓ | ✓ | ✓ | |
accountType | Optional, From source order | ✓ | ✓ | ✓ |
parties | Optional, From source order | ✓ | ✓ | Optional |
tradeType | ✓ | Optional | ||
makerTaker | ✓ | |||
tradeDate | Date of the business day of that trade Format: YYYY-MM-DD |
|||
trackingNumber | Tracking number | ✓ | ✓ | ✓ |
Strategies/ Multi Legs Handling
// Sample trades SingleSecurity response
{
"q": "v1/exchange.market/trades",
"sid": 1681269620629657,
"d": {
"actionType": "MatchedTrade",
"timestamp": 1681270147050809600,
"trackingNumber": 11251904,
"eventId": 4,
"orderId": 4,
"mpOrderId": 1681270147021,
"mpId": 23,
"mpName": "MP00001",
"instrumentId": 109,
"instrument": "GOMM23/N23",
"side": "Sell",
"price": 8.25,
"quantity": 5,
"tradeId": 1,
"tradingMode": "CT",
"accountType": "Client",
"parties": [
{
"id": "AC00001",
"source": "D",
"role": 38
}
],
"makerTaker": "Taker",
"tradeDate": "2023-04-12",
"multiLegReportingType": "SingleSecurity"
}
}
// Sample trades IndividualSecurity response
{
"q": "v1/exchange.market/trades",
"sid": 1681269620629657,
"d": {
"actionType": "MatchedTrade",
"timestamp": 1681270147050809600,
"trackingNumber": 11252160,
"mpId": 23,
"mpName": "MP00001",
"instrumentId": 13,
"instrument": "GOMM23",
"side": "Sell",
"price": 2.38,
"quantity": 5,
"tradeId": 5,
"tradingMode": "CT",
"accountType": "Client",
"parties": [
{
"id": "AC00001",
"source": "D",
"role": 38
}
],
"makerTaker": "Taker",
"tradeDate": "2023-04-12",
"multiLegReportingType": "IndividualLeg",
"tradeLegRefId": 1,
"multiLegDifferentialPrice": 8.25,
"multiLegStrategyInstrumentId": 109,
"multiLegStrategyTradeId": 1
}
}
{
"q": "v1/exchange.market/trades",
"sid": 1681269620629657,
"d": {
"actionType": "MatchedTrade",
"timestamp": 1681270147050809600,
"trackingNumber": 11252416,
"mpId": 23,
"mpName": "MP00001",
"instrumentId": 14,
"instrument": "GOMN23",
"side": "Buy",
"price": -5.87,
"quantity": 5,
"tradeId": 3,
"tradingMode": "CT",
"accountType": "Client",
"parties": [
{
"id": "AC00001",
"source": "D",
"role": 38
}
],
"makerTaker": "Taker",
"tradeDate": "2023-04-12",
"multiLegReportingType": "IndividualLeg",
"tradeLegRefId": 2,
"multiLegDifferentialPrice": 8.25,
"multiLegStrategyInstrumentId": 109,
"multiLegStrategyTradeId": 1
}
}
Strategies trades are sent on trades API by 2 models:
- Single Security: reports the strategy trade as is
- Individual leg of a multi-leg security: reports the underlying legs of the strategy
Consumers can decide how to consume strategies trades.
Each strategy related trade will be sent with the following new parameters:
Parameter | Description |
---|---|
multiLegReportingType | |
tradeLegRefId | leg index |
multiLegDifferentialPrice | Parent trade price |
multiLegStrategyInstrumentId | Parent trade instrument Id |
multiLegStrategyTradeId | Parent trade Id |
Reporting
Reporting API enables market participants to easily retrieve orders and executions data.
This API is close to real time API, allows to access historical data as well up to date data.
Data Eligibility
Reporting API can be consumed for single market participant (MP) or for group of MPs that are pre-configured by exchange operations team.
orders (Reporting)
qualifier: v1/exchange.reporting/mp/orders
Any participant can use the orders API to retrieve the full list of all its own orders.
Request Parameters
// Sample orders request
{
"q": "v1/exchange.reporting/mp/orders",
"sid": 1681271202161408,
"d": {
"dateFrom": "2023-04-11T00:00:00",
"dateTo": "2023-04-12T23:59:59",
"status": "Active",
"instrumentId": 103,
"mpId": 23
}
}
// Sample orders response
{
"q": "v1/exchange.reporting/mp/orders",
"sid": 1681271202161408,
"d": {
"orderId": 10,
"mpOrderId": 1681270979229,
"instrumentId": 103,
"instrument": "GOMJ25",
"mpId": 23,
"mpName": "MP00001",
"status": "Active",
"orderType": "Limit",
"side": "Buy",
"price": 8,
"quantity": 5,
"timeInForce": "GTC",
"createdAt": "2023-04-12T03:42:59.253147",
"filledPrice": 0,
"filledQuantity": 0,
"remainingOpenQuantity": 5,
"removedQuantity": 0,
"marketModel": "T",
"accountType": "Client",
"parties": [
{
"id": "AC00001",
"source": "D",
"role": 38
}
],
"lastUpdate": "2023-04-12T03:42:59.253147",
"lastEventId": 11
}
}
Parameter | Type | Description |
---|---|---|
dateFrom | DateTime (GMT) | Search for orders where Created At ≥ dateFrom Format: YYYY-MM-DDThh:mm:ss[.SSS] |
dateTo | DateTime (GMT) | Search for orders where Created At < dateTo Format: YYYY-MM-DDThh:mm:ss[.SSS] |
status | eNum | Empty = All status |
instruments | []String | Search for orders by symbol |
mpId | int | Search for orders by MP ID. |
orderId | int | Search for orders by order ID. |
Response
orders response provides close to real time list of all current orders for the requested period with the entire details of those orders.
Field | Description |
---|---|
orderId | Exchange order ID |
mpOrderId | Same as in placeOrder request |
instrumentId | Instrument identifier |
instrument | Same as in placeOrder request |
mpId | Market participant identifier |
mpName | Market participant name |
status | |
orderType | Same as in placeOrder request |
side | Same as in placeOrder request |
price | Same as in placeOrder request |
quantity | Same as in placeOrder request |
timeInForce | Same as in placeOrder request |
expiryDate(Optional) | Order expiry date (GMT) Format: YYYY-MM-DDThh:mm:ss |
createdAt | Order creation timestamp (in microseconds) in GMT Format: YYYY-MM-DDThh:mm:ss.SSSSSS |
filledPrice | Weighted average filled price for all fills on that order Sum(event.executedQuantity∗event.executedPrice)/Sum(event.executedQuantity) |
filledQuantity | Total filled quantity |
remainingOpenQuantity | Remaining open quantity. quantity − filledQuantity − removedQuantity |
removedQuantity | Quantity that was removed with modifyOrder request |
marketModel | |
parties | Same as in placeOrder request |
accountType | Same as in placeOrder request |
lastEventTimestamp | Last order event timestamp (in microseconds) in GMT Format: YYYY-MM-DDThh:mm:ss.SSSSSS |
lastEventId | Last event that was used to calculate order state |
trades (Reporting)
qualifier: v2/exchange.reporting/mp/trades
Any participant can use the trades API to retrieve the full list of all its own trades data.
Each execution will be represented as 2 trades.
Request Parameters
// Sample trades request
{
"q": "v2/exchange.reporting/mp/trades",
"sid": 1681271594907709,
"d": {
"dateFrom": "2023-04-11T00:00:00",
"dateTo": "2023-04-12T23:59:59",
"instruments": [
"GOMH24"
],
"mpId": 23
}
}
// Sample trades MatchedTrade response
{
"q": "v2/exchange.reporting/mp/trades",
"sid": 1681271594907709,
"d": {
"eventId": 4,
"timestamp": "2023-04-11T07:51:24.424957",
"actionType": "MatchedTrade",
"orderId": 4,
"mpOrderId": 1681199484404,
"mpId": 23,
"mpName": "MP00001",
"instrumentId": 21,
"instrument": "GOMH24",
"side": "Sell",
"price": 9.35,
"quantity": 5,
"tradeId": 1,
"tradingMode": "CT",
"accountType": "Client",
"parties": [
{
"id": "AC00001",
"source": "D",
"role": 38
}
],
"makerTaker": "Taker",
"tradeDate": "2023-04-11"
}
}
// Sample trades TradeReport response
{
"q": "v2/exchange.reporting/mp/trades",
"sid": 10,
"d": {
"eventId": 100,
"timestamp": "2023-04-11T07:51:24.424957",
"actionType": "TradeReport",
"mpId": 23,
"mpName": "MP00001",
"instrumentId": 21,
"instrument": "GOMH24",
"side": "Buy",
"price": 9.5,
"quantity": 10,
"tradeId": 2,
"tradingMode": "CT",
"accountType" : "Client",
"parties": [
{
"id": "AC00001",
"source": "D",
"role": 38
},
{
"id": "AC00002",
"source": "D",
"role": 12
}
],
"tradeType" : "Block",
"tradeDate": "2023-04-11",
"multiLegReportingType": "SingleSecurity"
}
}
// Sample trades TradeCancel response
{
"q": "v2/exchange.reporting/mp/trades",
"sid": 10,
"d": {
"eventId": 101,
"timestamp": "2023-04-11T07:55:30.012342",
"actionType": "TradeCancel",
"mpId": 23,
"mpName": "MP00001",
"instrumentId": 21,
"instrument": "GOMH24",
"side": "Buy",
"price": 9.5,
"quantity": 5,
"tradeId": 3,
"tradingMode": "CT",
"accountType" : "Client",
"parties": [
{
"id": "AC00001",
"source": "D",
"role": 38
},
{
"id": "AC00002",
"source": "D",
"role": 12
}
],
"tradeType" : "Block",
"tradeDate": "2023-04-11"
}
}
Parameter | Type | Description |
---|---|---|
dateFrom | DateTime (GMT) | Search for orders where Created At ≥ dateFrom Format: YYYY-MM-DDThh:mm:ss[.SSS] |
dateTo | DateTime (GMT) | Search for orders where Created At ≥ dateTo Format: YYYY-MM-DDThh:mm:ss[.SSS] |
instruments | []String | Search for trades by symbol |
mpId | Int | Search for trades by MP ID. |
tradeId | Int | Search for trades by tradeId. |
actionTypes | []eNum | Search for trades by actionType. Any combinations of the below values:
Empty = All |
multiLegReportingTypes | []eNum | Search for trades by multiLegReportingTypes. Any combinations of the below values:
Empty = All |
Response
trades response provides close to real time list of all trades data for the requested period with the entire details of those trades.
Each record will be one of the following actionType:
- MatchedTrade for order book trade
- TradeReport for trade entry trade
- TradeCancel for trade cancellation (separate records will be returned for cancellation)
Field | Description | Order Book | Trade Entry | Trade Cancel |
---|---|---|---|---|
eventId | Event Id | ✓ | ✓ | ✓ |
timestamp | Event timestamp (in nanoseconds) in GMT | ✓ | ✓ | ✓ |
actionType | ✓ | ✓ | ✓ | |
orderId | Order id initiated the trade | ✓ | ||
mpOrderId | From source order | ✓ | ||
mpId | MP Id | ✓ | ✓ | ✓ |
mpName | MP Name | ✓ | ✓ | ✓ |
instrumentId | Instrument id | ✓ | ✓ | ✓ |
Instrument | instrument symbol | ✓ | ✓ | ✓ |
side | ✓ | ✓ | ✓ | |
price | Trade price | ✓ | ✓ | ✓ |
quantity | Trade quantity | ✓ | ✓ | ✓ |
tradeId | matchId | ✓ | ✓ | ✓ |
tradingMode | ✓ | ✓ | ✓ | |
accountType | Optional, From source order | ✓ | ✓ | ✓ |
parties | Optional, From source order | ✓ | ✓ | Optional |
tradeType | ✓ | Optional | ||
makerTaker | ✓ | |||
tradeDate | Date of the business day of that trade Format: YYYY-MM-DD |
✓ | ✓ | ✓ |
multiLegReportingType | For strategy allocated trades & parent trades only |
✓ | ✓ | Per trade |
Strategies/ Multi Legs Handling
// Sample trades SingleSecurity response
{
"q": "v1/exchange.market/trades",
"sid": 155,
"d": {
"actionType": "TradeReport",
"timestamp": 1681272662071405000,
"trackingNumber": 999,
"eventId": 1,
"mpId": 23,
"mpName": "MP00001",
"instrumentId": 147,
"instrument": "NPAU24/V24",
"side": "Buy",
"price": 5,
"quantity": 10,
"tradeId": 1,
"tradingMode": "ON",
"accountType": "Client",
"parties": [
{
"id": "AC00001",
"source": "D",
"role": 38
}
],
"tradeType": "EFRP",
"tradeDate": "2023-04-11",
"multiLegReportingType": "SingleSecurity"
}
}
// Sample trades IndividualLeg response
{
"q": "v1/exchange.market/trades",
"sid": 155,
"d": {
"actionType": "TradeReport",
"timestamp": 1681272662071405000,
"trackingNumber": 998,
"mpId": 23,
"mpName": "MP00001",
"instrumentId": 34,
"instrument": "NPAU24",
"side": "Buy",
"price": 5,
"quantity": 10,
"tradeId": 1,
"tradingMode": "ON",
"accountType": "Client",
"parties": [
{
"id": "AC00001",
"source": "D",
"role": 38
}
],
"tradeType": "EFRP",
"tradeDate": "2023-04-11",
"multiLegReportingType": "IndividualLeg",
"tradeLegRefId": 1,
"multiLegDifferentialPrice": 3,
"multiLegStrategyInstrumentId": 147,
"multiLegStrategyTradeId": 1
}
}
See description and field details on Private Data API #Strategies/ Multi Legs Handling here
Clearing
FIXML over MQ
Abaxx Clearing provide a FIXML API (FIX 5.0 SP2) for clearing derivatives.
The purpose of this document is to provide an initial specification of the FIXML interface for an audience of ISV and member self-developed applications.
MQ Connection Details
Protocol | BrokerURL (UAT) | BrokerURL (PROD) |
---|---|---|
AMQP | amqp+ssl://mq.uat.service.xabx.net:5671 | amqp+ssl://mq.service.abaxx.exchange:5671 |
MQTT | mqtt+ssl://mq.uat.service.xabx.net:8883 | mqtt+ssl://mq.service.abaxx.exchange:8883 |
OpenWire | ssl://mq.uat.service.xabx.net:61617 | ssl://mq.service.abaxx.exchange:61617 |
STOMP | stomp+ssl://mq.uat.service.xabx.net:61614 | stomp+ssl://mq.service.abaxx.exchange:61614 |
WSS | wss://mq.uat.service.xabx.net:61619 | wss://mq.service.abaxx.exchange:61619 |
FIXML over MQ Onboarding
Step | Env | Action | Responsible |
---|---|---|---|
1.a | UAT | Provide MQ queue and credentials assigned to member | Abaxx |
1.b | Prod | Provide public IP's CIDR range for IP whitelisting | Member |
2 | Prod | Provide MQ queue, credentials, and BrokerURL assigned to member | Abaxx |
3 | UAT/Prod | Test credentials and confirm that member can subscribe to MQ queue and process FIXML messages | Member |
4.a | UAT | Sign-off UAT and set up Prod access, then proceed with Step 1.b | Abaxx |
4.b | Prod | Conclude FIXML over MQ setup is LIVE | Member / Abaxx |
Contact Us
For technical clearing related queries: [email protected]
For functional clearing related queries: [email protected]
Functionality
The FIXML processing will cover a read and write facility covering the following post trade transaction management functions:
- Trade Confirmation
- Account Transfer - account transfer in FIXML is the same as allocation in clearing
- Trade Split - allocation to more than one account
- Give-Up and Take Up
Exchange will only support T0 allocation via FIXML. While via GUI we support trade allocation up till T+2
Supported messages
Inbound application messages
- Trade Capture Report (Account transfer, trade split)
- Allocation Reports (Give-up and Take-up)
Outbound application messages
- Trade capture report
- Trade capture report Ack and Nack
- Allocation reports (Give-up and Take-up)
- Allocation report Ack and Nack
Main Blocks
Standard header
The header element is required on all FIXML messages; it contains the following attributes:
TagNb | FIXML | Req | Valid values and mapping |
---|---|---|---|
Comp | StandardHeader <BaseHeader |
Y | |
35 | @MsgTyp | Y | Values defined per message |
49 | @SID | Y | Sender ‘s BIC |
50 | @SSub | Y | =”UserName” ← Required for all inbound messages (member to CCP) |
56 | @TID | Y | Target/Reciever’s BIC |
34 | @SeqNum | Y | Per MQ-queue |
52 | @Snt | Y | ="2019-01-10T10:46:09.080+00:00"> ← Time message is sent |
Instrument
TagNb | FIXML | Req | Valid values and mapping |
---|---|---|---|
Instrument | Instrmt | ||
55 | @Sym | Y | Product Ticker |
200 |
@MMY | Y | Maturity year month Format: (YYYYMM) |
202 | @StrkPx | O | Strike Price Mandatory for options |
201 | @PutCall | O | 0=Put, 1= Call |
22 | @Src | Y | 4 = ISIN |
48 | @ID | Y | ISIN |
Comp | UndInstrmtGrp <Undly |
||
Comp | UnderlyingInstrument <Undly |
||
311 | @Sym | O | Symbol of underlying stock or index (Always present in outbound messages, optional for inbound messages) |
End Comp | |||
End Comp |
Party Block Overview
All inbound business messages are subject to CCP authorization and must therefore specify the party being responsible for the business content of the message. Whenever applicable, the party entering the transaction (if different than business responsible) must also be entered. The SenderCompID and SenderSubID are used to identify the party entering the trade (see implicit parties section below).
Party Block
This is a repeating block allowing multiple party identifiers to be set. The following fields must be set for each party:
- PartyID (448) = party identifier
- PartyRole (452) = see 3.4.4
Party identifier
The PartyID field can contain different types of identifiers. When it contains a member/participant (firm) identifier, the format is as follows:
The party identifier always consists of firm identifier.
Implicit Parties
All inbound business messages must contain:
SenderCompID (49) = party identifier of the firm entering the transaction. SenderSubID (50) = set to what the member decides, no validation in the clearing system
These fields implicitly identify the firm and individual entering the business message. For all transactions, these fields and the identifiers in Parties or Root Parties block are the same.
Available Party Roles
Business Role | PartyRole (452) | Comment | |
---|---|---|---|
Transaction owner | Firm
|
1 = Executing Firm
|
Member ID (GCM, ICM or NCM Id in the clearing system). If the transaction refers to an NCM account this should be the member ID of the NCM also if it is the GCM sending the inbound request |
Clearing Firm | Firm | 4 = Clearing Member Firm | Member ID (GCM or ICM Id in the clearing system) |
Clearing Account | Account | 83 = Clearing Account | Sub-Account max length = 20 char |
Position Account | Account | 38 = Position Account | Main-Account (member account). max length = 20 char |
Timestamps
All timestamps are expressed in local time and carry a Time Zone Designator, i.e. the offset towards UTC in hours and minutes. Note that the Exchange and CCP systems time is UTC.
The format of the timestamps is YYYY-MM-DDTHH:MM:SS.TZD, e.g. 2018-12-27T10:46:09.080+00:00.
@Snt
Standard Header contains mandatory field @Snt that will show the time when message was sent <"2018-01-10T10:46:09.080+00:00">. For inbound messages, milliseconds is not required and Z will be accepted for +00:00.
@BizDt
@BizDt contains the Clearing Date (=today). Format is YYYYMMDD.
@TrdDt
@TrdDt will normally be the original trade date. Outbound reports will contain what is received inbound from the members. Format is YYYYMMDD.
@TS
@TS contain the execution timestamp.
Transaction identifiers
@TrdID
An increasing exchange sequence number assigned to each trade. Trade number is unique within an Instrument (per ISIN) and day. For inbound messages, this field will not be validated by the CCP. If the member inserts another value than an exchange trade-id it will be accepted by the CCP. Max length is 13 characters.
@TrdID2
@TrdID2 assigned by member. Must be unique across business days. If a split, a suffix will be added on the outbound reports. Max length is 35 characters.
@OrigTrdID
For a cancel trade, this field references trade number of the original trade. Some marketplaces might use the same TrdId for a trade cancel as for the original trade. In such cases TrdId = OrigTrdId in the trade cancel message
@OrignTrdID2
For a reverse, this field references TrdID2 assigned by the member.
@RefID
Mandatory if this is a Cancel and has to equal @ID from the original Give-Up request (inbound)
@ID
Unique identifier for an allocation instruction message set by customer. Max length is 35 characters.
@RptID
If the clearing account is present in the trade from the exchange, or in a take up request, the CCP will in the outbound Trade Capture Report populate this tag with the reference used by the clearing system for the account transfer. Max length is 16 characters.
Trade Confirmation and Management
A trade confirmation in the form of a FIXML Trade Capture Report is sent by the CCP following the execution of a trade. The clearinghouse publishes confirmed trades to counterparties and possibly to other participants involved in the downstream processing of trades.**
In FIXML allocations are possible for account transfer and split purposes. Allocation reports can be used for the give-up take up process.
Basic Trade Confirmation – Trade Capture Report (Outbound from CCP)
Directed trade confirmation to all parties in a deal.
Trade Capture Report (CCP outbound)
TagNb | FIXML | Req | Valid values and mapping |
---|---|---|---|
Comp | Standard Header | Y | MsgType = AE |
571 | @RptID | O | Only included if clearing account is present. Will be the reference used by the clearing system for the account transfer. |
1003 | @TrdID | Y | The trade-code received from the Exchange. |
1126 | @OrigTrdID | O | Only included if this is a cancel from the Exchange. Holding the original trade-code from the Exchange |
487 | @TransTyp | Y | Valid values: 0 = New 1 = Cancel |
856 | @RptTyp | Y | Valid values: 0 = Submit |
828 | @TrdTyp | Y | 0 = regular trade |
715 | @BizDt | Y | Clearing date (always today) |
31 | @LastPx | Y | ”2.5673” max 4 decimals (will not include trailing zeros) |
32 | @LastQty | Y | ”100” |
75 | @TrdDt | Y | “20190307” |
Comp | Instrument | Y | |
55 | @Sym | Y | See section 3.2 |
End Comp | |||
Comp | TrdCapRptSideGrp <RptSide |
Y | |
54 | @Side | Y | Valid values: 1=Buy 2=Sell |
1 | @Acct | O | Will contain what the member have specified as account for the order in the trading system. This can be an internal member reference to an account, or an account in the clearing system. (Will be equal to Clearing account (Tag 1117) if an account in the clearing system) |
58 | @Txt | O | Free text |
Comp | TrdRegTs | ||
1013 | @Typ | Y | 1 = Execution Time |
1012 | @TS | Y | Execution Date and Time |
End Comp | |||
End Comp |
|||
Comp | Root Parties <Pty |
||
1117 | @ID | Y | “XLBSEC” |
1119 | @R | Y | 1 = Executing Firm |
1117 | @ID | Y | “XLBSEC” |
1119 | @R | Y | 4 = Clearing member firm |
1117 | @ID | O | “CL12345” |
1119 | @R | O | 83 = Clearing account (Only present if used in execution and the account exist) |
1117 | @ID | Y | “CL000140” |
1119 | @R | Y | 38 = Position account (Execution Account) |
End Comp |
Trade Allocations
The following allocations are supported:
- Account Transfer
- Split
Trade Capture Report (CCP inbound)
TagNb | FIXML | Req | Valid values and mapping |
---|---|---|---|
Comp | StandardHeader | Y | MsgType = AE |
1003 | @TrdID | O | Identifies the trade to be allocated (not validated by CCP). |
1040 | @TrdID2 | Y | Trade/Transaction ID as defined in Transaction Identifiers |
1127 | @OrignTrdID2 | O | Only included if this is a reverse. Holding the TrdID2 of the allocation to be reversed |
856 | @RptTyp | Y | 0 = Submit |
487 | @TransTyp | Y | TransTyp=2 (Replace) or = 4 (Reverse*) |
715 | @BizDt | Y | Clearing date (always today) |
31 | @LastPx | Y | ”2.5673” max 4 decimals (will not include trailing zeros) |
Comp | Instrument <Instrmt |
Y | |
55 | @Sym | Y | See section 3.2 |
End Comp | |||
Comp | TrdCapRptSideGrp <RptSide |
Y | |
826 | @AllocInd | Y | Valid values: 2=Account Transfer 6=Split, only for Trans-Type = 2 (Replace) Transaction type 4, Reverse of a split will have to be done leg by leg. |
54 | @Side | Y | Valid values: 1=Buy 2=Sell |
EndComp | |||
Comp | Root Parties <Pty |
||
1117 | @ID | Y | “XLBSEC” |
1119 | @R | Y | 1=Execution Firm |
1117 | @ID | Y | “XLBSEC” |
1119 | @R | Y | 4=Clearing Firm |
1117 | @ID | Y | “CL000140” |
1119 | @R | Y | 38= position account mandatory |
End Comp | |||
Comp | TrdAllocGrp <Alloc |
If a split, this group is repeated | |
79 | @Account | Y | Account the trade should be posted to (CL123456). |
80 | @Qty | Y
|
|
161 | @Txt | O | Free text field (Max 100 characters) |
End Comp |
Transaction type 4, Reverse, inbound will reverse the original account transfer and move the trade/position back to the position account. A reverse account transfer inbound will have the same values in the different tags as the Replace (the original Transfer). For a split, Reverse inbound must be sent leg by leg. The reversing trade capture report outbound will be for the clearing account and the new trade capture report outbound will be for the position account. After the Reverse is performed, a new trade capture report inbound can be sent to move the trade/position from the position account to a new clearing account.
Example of message flow where a trade has been allocation to the wrong clearing account CL123, instead of clearing account CL321.
Trade Capture Report Ack/Nack
Each leg of a split will result in ack or nack.
TagNb | FIXML | Req | Valid values and mapping |
---|---|---|---|
Comp | StandardHeader <BaseHeader |
Y | MsgType = AR |
1003 | @TrdID | O | Included if in the inbound message |
1040 | @TrdID2 | Y | Trade/Transaction ID as defined in Transaction Identifiers |
939 | @TrdRptStat | Y | Valid values: 0 = accepted (successfully processed) 1 = reject |
751 | @RejRsn | Always set to ‘99’ (Other, further info in Text field) | |
1328 | @RejTxt | ||
Comp | TrdCapRptAckSideGrp <RptSide |
||
1 | @Acct | Y | Will contain the account in Tag 79 from the inbound message. |
End Comp |
Reversing Trade Capture Report (CCP outbound)
TagNb | FIXML | Req | Valid values and mapping |
---|---|---|---|
Comp | Standard Header | Y | MsgType = AE |
1003 | @TrdID | O | Included if in the inbound message. |
1040 | @TrdID2 | Y | Trade/Transaction ID as defined in Transaction Identifiers |
1127 | @OrignTrdID2 | O | Only included if this is a reverse. Holding the TrdID2 of the allocation to be reversed |
856 | @RptTyp | Y | Valid values: 0 = Submit |
487 | @TransTyp | Y | 4 = Reverse |
828 | @TrdTyp | Y | 0 = Regular |
715 | @BizDt | Y | Clearing date |
31 | @LastPx | Y | ”2.5673” max 4 decimals (will not include trailing zeros) |
32 | @LastQty | Y | ”100” |
75 | @TrdDt | O | “20190225” (Will be today’s date) |
Comp | Instrument < Instrmt |
Y | |
---|---|---|---|
55 | @Sym | See section 3.2 | |
End Comp | |||
Comp | TrdCapRptSideGrp <RptSide |
Y | |
54 | @Side | Y | This reversing trade will have the opposite side than the original trade to net the original trade out. 1=Buy 2=Sell |
End Comp | |||
Comp | Root Parties <Pty |
||
1117 | @ID | Y | “XLBSEC” |
1119 | @R | Y | 1 = Executing Firm |
1117 | @ID | Y | “XLBSEC” |
1119 | @R | Y | 4 = Clearing member firm |
1117 | @ID | Y | “CL000140” (If transaction type 4 inbound, the account-id will be the clearing account) |
1119 | @R | Y | 38 = Position account (If transaction type 4 inbound this will be 83 = clearing account) |
End Comp | |||
1011 | @MsgEvtSrc | Y | Values= WEB or FIXML |
End Comp |
New Trade Capture Report Pursuant to Allocation
This is the new trade that should contain the new values. If trade split, each new trade will get an overtaking trade.
TagNb | FIXML | Req | Valid values and mapping |
---|---|---|---|
Comp | Standard Header | Y | MsgType = AE |
1003 | @TrdID | O | Included if in the inbound message. |
1040 | @TrdID2 | Y | Trade/Transaction ID as defined in Transaction Identifiers. Sequentially suffixed for splits |
1127 | @OrignTrdID2 | O | Only included if this is a reverse. Holding the TrdID2 of the allocation to be reversed |
856 | @RptTyp | Y | Valid values: 0 = Submit |
487 | @TransTyp | Y | 2 = Replace |
828 | @TrdTyp | Y | 0 = Regular |
715 | @BizDt | Y | Clearing date |
31 | @LastPx | Y | ”2.5673” max 4 decimals (will not include trailing zeros) |
32 | @LastQty | Y | ”100” |
75 | @TrdDt | O | “20190306” (Will be today’s date) |
Comp | Instrument | Y | |
55 | @Sym | See section 3.2 | |
End Comp | |||
Comp | TrdCapRptSideGrp <RptSide |
Y | |
54 | @Side | Y | Valid values: 1=Buy 2=Sell |
58 | @Txt | O | |
End Comp | |||
Comp | Root Parties <Pty |
||
1117 | @ID | Y | “XLBSEC” |
1119 | @R | Y | 1 = Executing Firm |
1117 | @ID | Y | “XLBSEC” |
1119 | @R | Y | 4 = Clearing member firm |
1117 | @ID | Y | “CL123456” (If transaction type 4 inbound, the account-id here will be the Position Account) |
1119 | @R | Y | 83 = Clearing account (If transaction type 4 inbound, this will be 38 = Position account) |
End Comp | |||
1011 | @MsgEvtSrc | Y | Values= WEB or FIXML |
End Comp |
Give-up & Take-up
Give-up initiated by a member:
Give-up Request/Cancel of Give-up Request (CCP inbound)
TagNb | FIXML | Req | Valid values and mapping |
---|---|---|---|
Comp | StandardHeader <BaseHeader |
Y | MsgType=J |
70 | @ID | Y | Unique identifier for this allocation instruction message set by customer. |
71 | @TransTyp | Y | For a new give-up: 0 = New 2=Cancel |
72 | @RefID | O | Mandatory if this is a Cancel and has to equal @ID from the original Give-Up request (inbound) |
626 | @Typ | Y | 17=Give Up |
75 | @TrdDt | Y | Trade date |
715 | @BizDt | Clearing date | |
53 | @Qty | Y | Total quantity of trade |
54 | @Side | Y | Valid values: 1=Buy 2=Sell |
Comp | ExecAllocGrp <AllExc |
||
1003 | @TrdID | O | Identifies the trade to give up (not validated by CCP) |
31 | @LastPx | Y | ”2.5673” max 4 decimals (will not include trailing zeros) |
End Comp | |||
Comp | Instrument <Instrmt |
Y | |
55 | @Sym | Y | See section 3.2 |
EndComp | |||
Comp | AllocGrp <Alloc |
||
161 | @Txt | O | Free text field for give-up (Max 100 characters) |
Comp | Nested Parties <Pty |
||
524 | @ID | Y | “CL000140” |
538 | @R | Y | 38 = Position account |
524 | @ID | Y | “XLBSEC” |
538 | @R | Y | 97 = Give-Up clearing firm |
524 | @ID | Y | “SELOWN” |
538 | @R | Y | 96=Take-Up trading firm |
524 | @ID | Y | “XLBSEC” |
538 | @R | Y | 95=Give-Up trading firm |
End Comp | |||
End Comp |
Give-up Ack/Nack (CCP outbound)
TagNb | FIXML | Req | Valid values and mapping |
---|---|---|---|
Comp | StandardHeader <BaseHeader |
Y | MsgType=P |
70 | @ID | Y | Unique identifier for this allocation instruction message set by Client. (@ID from Allocation Instruction). |
87 | @Stat | Y | Valid values: 0=Accepted (successfully processed) 2=Rejected (give-up rejected) |
88 | @RejCode | O | Always set to ‘7’ (Other, further info in Text field) |
58 | @Txt | O |
Allocation Report for Give-up and Take-up members (CCP outbound)
TagNb | FIXML | Req | Valid values and mapping |
---|---|---|---|
Comp | StandardHeader <BaseHeader |
Y | MsgType=AS |
70 | @ID | To the give up/take up requestor this will be set to the AllocID sent in Allocation Instruction. Will not be set for the take-up member in the first alloc report. |
|
793 | @ID2 | Y | ID allocated by the CCP |
71 | @TransTyp | Y | ‘0’ (new) |
794 | @RptTyp | Y |
Valid values: 15= Give-Up (when a give-up is performed*)* 16= Take-Up (when a give-up is accepted by take-up member): |
87 | @Stat | Y | Identifies the status off allocation. Valid values: 0 = Accepted 6 = Allocation Pending 12 = Cancelled |
1011 | @MsgEvtSrc | Y/O | Values= WEB or FIXML. This tag will not be included to the Take-Up member pursuant to a Give-Up request |
54 | @Side | Y | Valid values: 1 = Buy 2 = Sell |
53 | @Qty | Y | |
75 | @TrdDt | Y | |
715 | @BizDt | Y | Clearing date for give-up |
60 | @TxnTm | Y | Time of give up |
Comp | ExecAllocGrp <AllExc |
||
1003 | @TrdID | O | Equal to TrdID set by give up member in give up request. If no TrdID is set in give up request, a CCP assigned TrdID will be set to the take up member. |
31 | @LastPx | Y | ”2.5673” max 4 decimals (will not include trailing zeros) |
End Comp | |||
Comp | Instrument <Instrmt |
Y | |
55 | @Sym | See section 3.2 | |
EndComp | |||
Comp | AllocGrp <Alloc |
||
161 | @Txt | O | Free text field for give-up and take-up respectively |
Comp | Nested Parties <Pty |
||
524 | @ID | Y | “SELOWN” |
538 | @R | Y/O | 98 = Take-up clearing firm. Only present when reporting to the Take-Up side |
524 | @ID | Y | “CL000140” |
538 | @R | Y | 38 = Position account (Only to give-up side in the allocation reports sent prior to matching) |
524 | @ID | O | “CL123456” |
538 | @R | O | 83 = Clearing account (only to Take-up side after matching if included in the inbound message from the Take-up side) |
524 | @ID | Y | “XLBSEC” |
538 | @R | Y/O | 97 = Give-up clearing firm. Only present when reporting to the Give-Up side |
524 | @ID | Y | “SELOWN” |
538 | @R | Y | 96=Take-Up trading firm |
524 | @ID | Y | “XLBSEC” |
538 | @R | Y | 95=Give-Up trading firm |
End Comp | |||
End Comp |
Take-up Request (CCP inbound)
TagNb | FIXML | Req | Valid values and mapping |
---|---|---|---|
Comp | StandardHeader <BaseHeader |
Y | MsgType=J |
70 | @ID | Y | Unique identifier for this allocation instruction set by the Take-Up member |
793 | @ID2 | Y | ID allocated by the CCP |
71 | @TransTyp | Y | For a confirm give-up: @TransTyp=0 (new) |
626 | @Typ | Y | Valid values: 25 = Approve Take-Up |
54 | @Side | Y | Valid values: 1=Buy 2=Sell |
53 | @Qty | Y | |
75 | @TrdDt | Y | Trade Date. |
715 | @BizDt | Y | Clearing date for give-up |
Comp | Exec Alloc Grp <AllExc |
||
1003 | @TrdID | O | Identifies the trade to take up. Should be equal to TrdID received in first allocation report. |
31 | @LastPx | Y | ”2.5673” max 4 decimals (will not include trailing zeros) |
End Comp | |||
Comp | Instrument <Instrmt |
Y | |
55 | @Sym | Y | See section 3.2 |
EndComp | |||
Comp | AllocGrp <Alloc |
||
161 | @Txt | Y | Free text field for take up (Max 100 characters) |
Comp | Nested Parties < Pty | ||
524 | @ID | Y | “SELOWN” |
538 | @R | Y | 98 = Take-up clearing firm |
524 | @ID | Y | “SELOWN” |
538 | @R | Y | 96=Take-Up trading firm |
524 | @ID | Y | “XLBSEC” |
538 | @R | Y | 95=Give-Up trading firm |
524 | @ID | Y | “CL000140” Should be Main Default account |
538 | @R | Y | 38 = Position account |
524 | @ID | O | “CL123456” |
538 | @R | O | 83 = Clearing account |
End Comp | |||
End Comp |
Take-up Request Ack/Nack
TagNb | FIXML | Req | Valid values and mapping |
---|---|---|---|
Comp | StandardHeader <BaseHeader |
Y | MsgType=P |
70 | @ID | Y | Unique identifier for this allocation instruction message set by Client. (@ID from Take-Up Instruction). |
793 | @ID2 | ||
87 | @Stat | Y | Valid values: 0=Accepted (successfully processed) 2=Rejected |
88 | @RejCode | Always set to ‘7’ (Other, further info in Text field) | |
58 | @Txt | Reject message (error msg) from CCP |
Trade Confirmations Pursuant to Take-up (CCP outbound)
Reversing Trade capture report Give-up Firm
TagNb | FIXML | Req | Valid values and mapping |
---|---|---|---|
Comp | Standard Header | Y | MsgType = AE |
1003 | @TrdID | O | Equal to TrdID in give up request. |
1040 | @TrdID2 | Y | Assigned by member on give-up request in tag 70 |
487 | @TransTyp | Y | 4 = Reverse |
856 | @RptTyp | Y | Valid values: 0 = Submit |
828 | @TrdTyp | Y | 61 = Give Up Give-in trade |
715 | @BizDt | Y | Clearing date |
31 | @LastPx | Y | ”2.5673” max 4 decimals (will not include trailing zeros) |
32 | @LastQty | Y | ”100” |
75 | @TrdDt | Y | “20190306” |
Comp | Instrument <Instrmt |
Y | |
55 | @Sym | Y | See section 3.2 |
End Comp | |||
Comp | TrdCapRptSideGrp <RptSide |
Y | |
54 | @Side | Y | The reversing Give-Up will have the opposite side of the original Give-Up to net that one out.1=Buy 2=Sell |
58 | @Txt | O | |
End Comp | |||
Comp | Root Parties <Pty |
||
1117 | @ID | Y | “XLBSEC” |
1119 | @R | Y | 1 = Executing Firm |
1117 | @ID | Y | “XLBSEC” |
1119 | @R | Y | 4 = Clearing member firm |
1117 | @ID | Y | “CL000140” |
1119 | @R | Y | 38 = Position account |
1117 | @ID | Y | “SELOWN” |
1119 | @R | Y | 96=Take-Up trading firm |
1117 | @ID | Y | “XLBSEC” |
1119 | @R | Y | 95=Give-Up trading firm |
End Comp | |||
1011 | @MsgEvtSrc | Y | Values= WEB or FIXML |
End Comp |
Trade Capture report Take-up Firm (CCP outbound)
TagNb | FIXML | Req | Valid values and mapping |
---|---|---|---|
Comp | Standard Header | Y | MsgType = AE |
571 | @RptID | O | Only included if clearing account is present. Will be the reference used by the clearing system for the account transfer. |
1003 | @TrdID | O | Equal to TrdID in take-up request. |
1040 | @TrdID2 | O | Assigned by member on take-up request in tag 70 |
487 | @TransTyp | Y | 0 = New |
856 | @RptTyp | Y | Valid values: 0 = Submit |
828 | @TrdTyp | Y | 61 = Give-up Give- In trade |
715 | @BizDt | Y | Clearing date |
31 | @LastPx | Y | ”2.5673” max 4 decimals (will not include trailing zeros) |
32 | @LastQty | Y | ”100” |
75 | @TrdDt | Y | ”2015-11-06” |
Comp | Instrument <Instrmt |
Y | |
55 | @Sym | Y | See section 3.2 |
End Comp | |||
Comp | TrdCapRptSideGrp <RptSide |
Y | |
54 | @Side | Y | 1=Buy 2=Sell |
58 | @Txt | O | |
End Comp | |||
Comp | Root Parties <Pty |
||
1117 | @ID | Y | “SELOWN” |
1119 | @R | Y | 1 = Executing Firm |
1117 | @ID | Y | “SELOWN” |
1119 | @R | Y | 4 = Clearing member firm |
1117 | @ID | Y | “CL000175” |
1119 | @R | Y | 83 = Clearing account |
1117 | @ID | Y | “CL987314” |
1119 | @R | Y | 38 = Position account |
1117 | @ID | Y | “SELOWN” |
1119 | @R | Y | 96=Take-Up trading firm |
1117 | @ID | Y | “XLBSEC” |
1119 | @R | Y | 95=Give-Up trading firm |
End Comp | |||
1011 | @MsgEvtSrc | Y | Values= WEB or FIXML |
End Comp |
FIXML Outbound Examples
<!-- New TradeCaptureReport Message -->
<FIXML v="5.0 SP2">
<TrdCaptRpt RptID="ABC123" TrdID="3" TransTyp="0" RptTyp="0" TrdTyp="0" BizDt="20230419" LastPx="50" LastQty="10" TrdDt="20230419">
<BaseHeader MsgTyp="AE" SID="ACLPSGSG1" TID="TARGET_BIC_CODE" SeqNum="32" Snt="2023-04-19T05:57:01.878+00:00"/>
<Instrmt Sym="NWEG24" MMY="202401" Src="4" ID="3331"/>
<Undly>
<Undly Sym="NWE"/>
</Undly>
<RptSide Side="1" Acct="ACCOUNT">
<TrdRegTS TS="2023-04-19T05:57:00.001+00:00" Typ="1"/>
</RptSide>
<Pty ID="EXECUTING_FIRM_ID" R="1"/>
<Pty ID="CLEARING_FIRM_ID" R="4"/>
<Pty ID="POSITION_ACCOUNT_ID" R="38"/>
<Pty ID="CLEARING_ACCOUNT_ID" R="83"/>
</TrdCaptRpt>
</FIXML>
<!-- Cancel TradeCaptureReport Message -->
<FIXML v="5.0 SP2">
<TrdCaptRpt TrdID="2" OrigTrdID="2" TransTyp="1" RptTyp="0" TrdTyp="0" BizDt="20230419" LastPx="12.5" LastQty="5" TrdDt="20230419">
<BaseHeader MsgTyp="AE" SID="ACLPSGSG1" TID="TARGET_BIC_CODE" SeqNum="7" Snt="2023-04-19T06:09:28.135+00:00"/>
<Instrmt Sym="NWEH24" MMY="202402" Src="4" ID="3332"/>
<Undly>
<Undly Sym="NWE"/>
</Undly>
<RptSide Side="2" Acct="ACCOUNT">
<TrdRegTS TS="2023-04-19T06:09:28.015+00:00" Typ="1"/>
</RptSide>
<Pty ID="EXECUTING_FIRM_ID" R="1"/>
<Pty ID="CLEARING_FIRM_ID" R="4"/>
<Pty ID="POSITION_ACCOUNT_ID" R="38"/>
</TrdCaptRpt>
</FIXML>
<!-- Allocation TradeCaptureReport Message -->
<FIXML v="5.0 SP2">
<TrdCaptRpt TrdID="1" TrdID2="TC 3.10" TransTyp="2" RptTyp="0" TrdTyp="0" BizDt="20230418" LastPx="3.3" LastQty="10" TrdDt="20230418" MsgEvtSrc="WEB">
<BaseHeader MsgTyp="AE" SID="ACLPSGSG1" TID="TARGET_BIC_CODE" SeqNum="2" Snt="2023-04-19T02:03:54.771+00:00"/>
<Instrmt Sym="RD1K23" MMY="202304" Src="4" ID="4413"/>
<Undly>
<Undly Sym="RD1"/>
</Undly>
<RptSide Side="2" Txt="Post EOD"/>
<Pty ID="EXECUTING_FIRM_ID" R="1"/>
<Pty ID="CLEARING_FIRM_ID" R="4"/>
<Pty ID="CLEARING_ACCOUNT_ID" R="83"/>
</TrdCaptRpt>
</FIXML>
<!-- Reverse TradeCaptureReport Message -->
<FIXML v="5.0 SP2">
<TrdCaptRpt TrdID="1" TrdID2="TC 3.10" TransTyp="4" RptTyp="0" TrdTyp="0" BizDt="20230418" LastPx="3.3" LastQty="10" TrdDt="20230418" MsgEvtSrc="WEB">
<BaseHeader MsgTyp="AE" SID="ACLPSGSG1" TID="TARGET_BIC_CODE" SeqNum="1" Snt="2023-04-19T02:03:54.756+00:00"/>
<Instrmt Sym="RD1K23" MMY="202304" Src="4" ID="4413"/>
<Undly>
<Undly Sym="RD1"/>
</Undly>
<RptSide Side="1"/>
<Pty ID="EXECUTING_FIRM_ID" R="1"/>
<Pty ID="CLEARING_FIRM_ID" R="4"/>
<Pty ID="POSITION_ACCOUNT_ID" R="38"/>
</TrdCaptRpt>
</FIXML>
<!-- New AllocationReport Message -->
<FIXML v="5.0 SP2">
<AllocRpt TransTyp="0" ID2="20230425VPA4SR41" RptTyp="15" Stat="12" BizDt="20230424" Side="1" Qty="4" TrdDt="20230424" TxnTm="2023-04-25T00:12:50.000+00:00">
<BaseHeader MsgTyp="AS" SID="ACPLSGSGXXX" TID="STRAITS" SeqNum="2" Snt="2023-04-25T00:12:50.265+00:00"/>
<AllExc LastPx="3.89" TrdID="5M34PVPA4SR41"/>
<Instrmt Sym="GOMF24" MMY="202312" Src="4" ID="2235"/>
<Undly>
<Undly Sym="GOM"/>
</Undly>
<Alloc>
<Pty ID="GIVEUP_TRADING_FIRM" R="95"/>
<Pty ID="TAKEUP_TRADING_FIRM" R="96"/>
<Pty ID="TAKEUP_CLEARING_FIRM" R="98"/>
</Alloc>
</AllocRpt>
</FIXML>
FIXML Inbound Examples
<!-- Give Up Request Message -->
<FIXML v="5.0 SP2">
<AllocInstrctn ID="123" TransTyp="0" Typ="17" TrdDt="20230607" BizDt="20230607" Side="1" Qty="20">
<BaseHeader MsgTyp="J" SID="TESTNOK0XXX" SSub="test" TID="OSCLNOK0XXX" SeqNum="4" Snt="2023-06-07T10:18:00.481+00:00" />
<AllExc TrdID="00000004" LastPx="3" />
<Instrmt Sym="GOMQ23" MMY="202308" Src="4" ID="2230" />
<Alloc Txt="hello">
<Pty ID="CLMAIN" R="38" />
<Pty ID="ICM1" R="95" />
<Pty ID="ICM2" R="96" />
<Pty ID="ICM1" R="97" />
</Alloc>
</AllocInstrctn>
</FIXML>
<!-- Cancel Give Up Request Message -->
<FIXML v="5.0 SP2">
<AllocInstrctn ID="124" RefID="123" TransTyp="2" Typ="17" TrdDt="20230607" BizDt="20230607" Side="1" Qty="20">
<BaseHeader MsgTyp="J" SID="TESTNOK0XXX" SSub="test" TID="OSCLNOK0XXX" SeqNum="5" Snt="2023-06-07T10:34:56.481+00:00" />
<AllExc TrdID="00000004" LastPx="3" />
<Instrmt Sym="GOMQ23" MMY="202308" Src="4" ID="2230" />
<Alloc Txt="hello">
<Pty ID="CLMAIN" R="38" />
<Pty ID="ICM1" R="95" />
<Pty ID="ICM2" R="96" />
<Pty ID="ICM1" R="97" />
</Alloc>
</AllocInstrctn>
</FIXML>
<!-- Take Up Request Message -->
<FIXML v="5.0 SP2">
<AllocInstrctn ID="128" ID2="20230615VPK7SB61" TransTyp="0" Typ="25" TrdDt="20230607" BizDt="20230607" Side="1" Qty="20">
<BaseHeader MsgTyp="J" SID="TESTNOK0XXX" SSub="test" TID="OSCLNOK0XXX" SeqNum="13" Snt="2023-06-07T10:56:56.481+02:00" />
<AllExc LastPx="3" />
<Instrmt Sym="GOMQ23" MMY="202308" Src="4" ID="2230" />
<Alloc Txt="Hi">
<Pty ID="DCLICM2C" R="38" />
<Pty ID="ICM1" R="95" />
<Pty ID="ICM2" R="96" />
<Pty ID="ICM2" R="98" />
</Alloc>
</AllocInstrctn>
</FIXML>
<!-- Account Transfer Message -->
<FIXML v="5.0 SP2">
<TrdCaptRpt TrdID="00001" TrdID2="335511" RptTyp="0" TransTyp="2" BizDt="20230607" LastPx="3">
<BaseHeader MsgTyp="AE" SID="TESTNOK0XXX" SSub="test" TID="OSCLNOK0XXX" SeqNum="6" Snt="2023-06-07T08:12:19.481+00:00" />
<Instrmt Sym="GOMQ23" MMY="202308" Src="4" ID="2230" />
<RptSide Side="1" AllocInd="2" />
<Pty ID="ICM1" R="4" />
<Pty ID="ICM1" R="1" />
<Pty ID="CLMAIN" R="38" />
<Alloc Account="CL1234567" Qty="2" Txt="TEST" />
</TrdCaptRpt>
</FIXML>
<!-- Split Message -->
<FIXML v="5.0 SP2">
<TrdCaptRpt TrdID="00000001" TrdID2="34" RptTyp="0" TransTyp="2" BizDt="20230607" LastPx="1">
<BaseHeader MsgTyp="AE" SID="TESTNOK0XXX" SSub="test" TID="OSCLNOK0XXX" SeqNum="7" Snt="2023-06-07T07:52:56.481+00:00" />
<Instrmt Sym="GOMQ23" MMY="202308" Src="4" ID="2230" />
<RptSide Side="1" AllocInd="6" />
<Pty ID="ICM1" R="4" />
<Pty ID="ICM1" R="1" />
<Pty ID="CLMAIN" R="38" />
<Alloc Account="CL1234567" Qty="1" Txt="Test1" />
<Alloc Account="CL9632478" Qty="2" Txt="Test2" />
</TrdCaptRpt>
</FIXML>
Secure File Transfer
Abaxx provide the following CSV files to clearing members via SFTP server as described in this document.
SFT Connection Details
Env | SFTP Host | Public Key Algorithm | Description |
---|---|---|---|
UAT | sftp.uat.service.xabx.net | ED25519 | Public key must be in ED25519 format |
PROD | sftp.service.abaxx.exchange | ED25519 | Public key must be in ED25519 format |
Upon establishing Secure File Transfer connection, participants will have access to 3 root directory below for storing and retriving clearing data.
Folder | Usage |
---|---|
in | Members to upload reports on this folder |
out | Reports |
public | General data e.g. Span file |
Secure File Transfer Onboarding
Step | Env | Action | Responsible |
---|---|---|---|
1.a | UAT | Submit ED25519 public key to Abaxx | Member |
1.b | Prod | Submit ED25519 public key to Abaxx and public IP's CIDR range for IP whitelisting | Member |
2 | UAT/Prod | Provide credentials to member | Abaxx |
3 | UAT/Prod | Test credentials and confirm that reports can be downloaded and process from outgoing folder | Member |
4.a | UAT | Sign-off UAT and setup Prod access, then proceed on Step 1.b | Abaxx |
5 | Prod | Conclude SFT setup is LIVE | Member / Abaxx |
Contact Us
For technical clearing related queries: [email protected]
For functional clearing related queries: [email protected]
Supported Transactions
- Derivative Transactions (DTx)
- Clearing Holding
- Cash Settlement Transactions
- Delivery Transactions
- Margin Data (SPAN Like Margin Model)
- Collateral Holding
- Collateral Transactions
- Instruments
- Instrument Prices
- Odd Lot Adjustment
- Fee Transactions
SPAN File is also generated by the exchange on the XML format. Please contact the exchange if you need a sample format.
Derivative Transactions (DTx)
- Clearing members own trades executed or cancelled on the trading venue.
- Clearing members take-up/give-up, int-gup/int-tup and allocations.
- NCM’s trades executed/cancelled on the trading venue. NCM’s take-up/give-up, int-gup/int-tup and allocations.
- Corresponds to Clara web menu Clearing transactions derivatives - trade view.
- File Name : "DTx_" + <OPERATOR> + "-" + <OWNER> + "_" + <YYYYMMDD> + [ "-" + <HHMM> ] + ".csv"
- Frequency : Available EOD and intraday (every 30 min). The file is cumulative.
- Sorting will be ascending. For a GCM, there will be one file per NCM.
Sample Derivative Transactions (DTx) CSV
Account type,Operator,Owner,Account,Ledger type,Currency,Instrument ID,Ticker,Product code,Contract type,Put/Call,Strike,Maturity,Open/close,Quantity,Amount,Trade price,Trade code,Transaction type,Transaction sub type,Trade date,Changed,Original CCP ID,Status,Settlement date,Counterparty,Free text
CL,OPERATOR,OWNER,CL00XYZ,CLPOS,USD,12242,GOMK23,GOM,FU,,,Apr-23,Open,215,-4192500,1.95,4802,TRADE,Block,20230313,2023-03-13T05:28:14,20230313VPFD2KA1,,20230403,,
Column | Description |
---|---|
Account type | Always CL for clearing account |
Operator | GCM or ICM as named in the clearing system |
Owner | GCM, ICM or NCM as named in the clearing system |
Account | Account-Id in the clearing system |
Ledger type | Always CLPOS (Clearing positions) |
Currency | Currency of derivative instrument |
Instrument ID | Unique identifier for an instrument. |
Ticker | Ticker symbol of derivative series |
Product code | Ticker of underlying instrument |
Contract type |
|
Put/Call |
|
Strike | Option strike price (Only applicable for contract type OP) |
Maturity | Expiration month and year, Mon-YY |
Open/Close | All new trades will have Open. Allocation, give up/take up will have close on “from account” and open on “to account” |
Quantity | Number of contracts. Negative quantity is sell. Positive quantity is buy. |
Amount | = Quantity * Trade Price * Contract Size |
Trade price | Price as given in the trade, allocation, give up/take up |
Trade code | For exchange trades this will be the trade code as received from the exchange/marketplace. For allocations and give up/take up this will be the trade code as given in the inbound message. |
Transaction type |
|
Transaction sub type | Transaction sub type can be Block, EFRP or Other. If no sub type is received for the trade from the marketplace the field will be blank. |
Trade date | Trade Date, YYYYMMDD |
Changed | Date and time when the transaction was booked in the clearing system. YYYY-MM-DDTHH:MM:SS.SSSSSS |
Original CCP ID | ID assigned by the clearing system |
Status | Will show Cancelled for cancelled transactions, blank for the rest. |
Settlement date | Expiration date of the instrument. YYYYMMDD |
Free text | Will show free text added to the order in the trading system. |
Clearing Holding
- Positions on members house, client or market maker accounts.
- Corresponds to Clara web menu Clearing holdings for transaction types OP, FU.
- If subscription is added to the CPP, the file will give positions across all members.
- File Name : "Holdings_" + <OPERATOR> + "-" + <OWNER> + "_" + <YYYYMMDD> + ".csv"
- Frequency : Available EOD
- For a GCM, there will be one file per NCM.
Sample Clearing Holding CSV
Operator,Owner,Account,Gross/net,Settlement date,Currency,Instrument ID,Ticker,Product code,Contract type,Put/Call,Strike,Maturity,Quantity,Amount,Quantity credit,Quantity debit
OPERATOR,OWNER,CL00XYZ,NET,20230403,USD,12242,GOMK23,GOM,FU,,,Apr-23,120006,-3070953540,-3070953540,0
Column | Description |
---|---|
Operator | GCM or ICM as named in the clearing system |
Owner | GCM, ICM or NCM as named in the clearing system |
Account | Account-id in the clearing system |
Gross/net | Gross/net position indicator |
Settlement date | Expiry date of the instrument, YYYYMMDD |
Currency | Currency code e.g. USD |
Instrument ID | Unique identifier for an instrument. |
Ticker | Ticker symbol |
Product code | Ticker of underlying Instrument |
Contract type |
|
Put/Call |
(Only applicable for contract type OP) |
Strike | Option strike price (Only applicable for contract type OP) |
Maturity | Expiration month and year, Mon-YY |
Quantity | Net quantity |
Amount | Net amount |
Quantity credit | Quantity of held/bought contracts |
Quantity debit | Quantity of written/sold contracts |
Cash Settlement Transactions
- Show all cash settlement for settlement date > today.
- Corresponds to Clara web menu Clearing transactions - Settlement view.
- File Name : "CashTransactions_" + <OPERATOR> + "-" + <OWNER> + "_" + <YYYYMMDD> + ".csv"
- Frequency : Available EOD
- For a GCM, there will be one file per NCM.
Sample CashTransactions CSV
Account type,Operator,Owner,Account,Ledger type,Settlement date,Instrument ID,Ticker,Open/close,Quantity,Amount,Trade price,Transaction type,Trade date,Related series,Product code,Contract type,Put/Call,Strike,Maturity,Related price,Changed,Original CCP ID,Account name,Previous CCP ID,Trade code
CL,OPERATOR,OWNER,CLOOXYZ,CLPOS,20230314,USD,USD,Open,138219970,0,,M2M,20230313,GOMK23,GOM,FU,,,Apr-23,2.559,2023-03-14T02:08:38,20230314VPC401A7,CL00ABC,20230314VPC401A7,
Column | Description |
---|---|
Account type | Always CL for Clearing account |
Operator | GCM or ICM as named in the clearing system |
Owner | GCM, ICM or NCM as named in the clearing system |
Account | Account-id in the clearing system |
Ledger type | Always CLPOS (Clearing positions) |
Settlement date | Date when the cash settlement will be debited/credited to the bank account |
Instrument ID | Currency code e.g. USD |
Ticker | Currency code e.g. USD |
Open/Close | Always Open |
Quantity | The cash amount to pay (negative quantity) or receive (positive quantity) |
Amount | As the cash amount is in “Quantity” this will always show 0.00 |
Trade price | N.A |
Transaction type | Can be the following types:
|
Trade date | Trade date, YYYYMMDD |
Related series | Ticker of the derivative series the cash settlement is related to |
Product code | Ticker of underlying instrument |
Contract type |
|
Put/Call |
(Only applicable for contract type OP) |
Strike | Option strike price (Only applicable for contract type OP) |
Maturity | Expiration month and year, Mon-YY |
Related Price | For transaction type M2M it will show fixing price for futures (the price used for M2M calculations) |
Changed | Date for when the transaction was booked, YYYY-MM-DDTHH:MM:SS |
Original CCP ID | ID assigned by the clearing system |
Account name | Name of account as in the clearing system |
Previous CCP ID | For Trans type EXP_STLM: Refers to Original CCP ID of the exercised transaction |
Trade code | N.A |
Delivery Transactions
- Physical delivery of the underlying commodity and cash payments are handled outside the clearing system. Once buyer and seller have confirmed delivery versus payment, the position on the derivative instrument will be closed in the clearing system. This message will contain the transactions created due to closing delivered positions.
- File Name : "DeliveryTransactionsCommodity_" + <OPERATOR> + "-" + <OWNER> + "_" + <YYYYMMDD> + ".csv"
- Frequency : Available EOD
- For a GCM, there will be one file per NCM.
Sample DeliveryTransactionsCommodity CSV
Operator,Owner,Account,Open/close,Ticker,Quantity,Amount,Currency,Date,Transaction type
OPERATOR,OWNER,CL00XYZ,CLOSE,NWEJ23,350,-50869000,USD,20230301,DELIVERY
Column | Description |
---|---|
Operator | GCM or ICM as named in the clearing system |
Owner | GCM, ICM or NCM as named in the clearing system |
Account | Account-id in the clearing system |
Open/close | CLOSE |
Ticker | Ticker symbol of the derivative instrument |
Quantity | Quantity closed, corresponds to the contracts delivered
|
Amount | Settlement amount |
Currency | Currency of the cash settled |
Date | Delivery date , YYYYMMDD |
Transaction type | Always DELIVERY |
Margin Data (SPAN Like Margin Model)
- Margin information on account level.
- Corresponds to Clara web menu Calculations.
- File Name : "MarginCalculations_" + <OPERATOR> + "-" + <OWNER> + "_" + <YYYYMMDD> + "-" + <HHMM> + ".csv"
- Frequency : Avaiable EOD and upon margin/cash calls
Sample MarginData CSV
Operator,Owner,Account,Initial margin,Variation margin,TBS,Add ons,Collateral,Liability,Assets,Netted,Latest cash call,Latest margin call,Calculation time
OPERATOR,OWNER,ACCOUNT,-20436489795,2152338688,0,-10000,26483689119,-20436499795,28636027807,8199528012,0,0,2023-03-09T23:45:06.641127
Column | Description |
---|---|
Operator | GCM or ICM as named in the clearing system |
Owner | GCM or ICM as named in the clearing system |
Account | Margin account-id in the clearing system |
Initial margin | Initial margin (IM) calculated |
Variation margin | Variation margin (VM) calculated |
TBS | Amount To Be Settled. This can be unsettled M2M or apending collateral release |
Add ons | Sum of all add ons for the margin account |
Collateral | Collateral value |
Liability | IM+add ons+negative VM+negative TBS |
Assets | Collateral+positive VM+positive TBS |
Netted | Assets-Liabilities |
Latest cash call | Pending cash call/Cash call not met |
Latest margin call | Pending margin call/Margin call not met |
Calculation time | The date and time of the margin calculation, YYYY-MM-DDTHH:MM:SS.SSSSSS |
Collateral Holding
- Collateral holding per collateral account per instrument.
- Corresponds to Clara menu Collateral holding.
- File Name : "CollateralHolding_" + <OPERATOR> + "-" + <OWNER> + "_" + <YYYYMMDD> + ".csv"
- Frequency : Available SOD, MOD and EOD
Sample CollateralHolding CSV
Operator,Owner,Account,Ext ID,Instrument ID,Ticker,Quantity
OPERATOR,OWNER,ACCOUNT,286549088,USD,USD,30011000000
Column | Description |
---|---|
Operator | GCM or ICM as named in the clearing system |
Owner | GCM, ICM or NCM as named in the clearing system |
Account | Account-id in the clearing system |
Ext ID | Reference to external account, e.g. bank account |
Instrument ID | For cash collateral Instrument ID=Ticker=Currency. (i.e. USD) For bond collateral it can be an ISIN code or other unique identifier for the instrument. |
Ticker | Ticker symbol |
Quantity | Collateral amount/quantity |
Collateral Transactions
- Collateral transactions per collateral account per instrument.
- Corresponds to Clara menu Collateral transactions.
- File Name : "CollateralTransactions_" + <OPERATOR> + "-" + <OWNER> + "_" + <YYYYMMDD> + ".csv"
- Frequency : Available EOD
Sample CollateralTransactions CSV
Operator,Owner,Account,Ext ID,Instrument ID,Ticker,Quantity
OPERATOR,OWNER,ACCOUNT,286549088,USD,USD,30011000000
Column | Description |
---|---|
Operator | GCM or ICM as named in the clearing system |
Owner | GCM, ICM or NCM as named in the clearing system |
Account | Collateral Account-id in the clearing system |
Ext ID | Reference to external account, e.g. bank account |
Instrument ID | For cash collateral Instrument ID=Ticker=Currency. (i.e. USD) For bond collateral it can be an ISIN code or other unique identifier for the instrument. |
Ticker | Ticker symbol |
Quantity | Collateral amount/quantity. |
Changed | Date and time the transaction was settled, YYYY-MM-DDTHH:MM:SS.SSSSSS |
Instruments
- Instrument master data
- File Name : "Instruments_" + <YYYYMMDD> + ".csv"
- Frequency : Available SOD
Sample Instruments CSV
Instrument ID,Ticker,Product code,Contract type,Put/Call,Strike,Maturity,Option style,Contract size,Currency,CFI,Dividend adjustment,Delivery type
2235,GOMF24,GOM,FU,,,Dec-23,,10000,USD,FCEPSX,,P
Column | Description |
---|---|
Instrument ID | Unique identifier for the instrument |
Ticker | Ticker symbol |
Product code | Ticker of underlying instrument in relation to derivatives |
Contract type |
|
Put/call |
(Only applicable for contract type OP) |
Strike | Option strike price (Only applicable for contract type OP) |
Maturity | Expiration month and year, Mon-YY (Only applicable for contract type FU, OP) |
Option style |
(Only applicable for contract type OP) |
Contract size | Number of underlying instruments (Only applicable for contract type OP, FU) |
Currency | Currency on instrument |
CFI | Classification of Financial Instrument |
Dividend adj |
Adjustment rules according to marketplace rulebook. |
Delivery type |
|
Instrument Prices
- Price information
- File Name : "InstrumentPrices_" + <YYYYMMDD> + ".csv"
- Frequency : Available EOD
Sample InstrumentPrices CSV
Business date,Instrument ID,Ticker,Product code,Contract type,Put/Call,Strike,Maturity,Currency,Fixing price,Closing price,Expiry date,Contract size,Market flexibility
20230313,2235,GOMF24,GOM,FU,,,Dec-23,USD,4.071,4.071,20231201,10000,STD
Column | Description |
---|---|
Business date | Trade Date, YYYYMMDD |
Instrument ID | Unique identifier for the instrument |
Ticker | Ticker symbol |
Product code | Ticker of underlying instrument in relation to derivatives |
Contract type |
|
Put/call |
(Only applicable for contract type OP) |
Strike | Option strike price (Only applicable for contract type OP) |
Maturity | Expiration month and year, Mon-YY (Only applicable for contract type FU, OP) |
Currency | Currency on instrument |
Fixing price | For contract type FU this will be the price used for M2M calculations. |
Closing price | For contract type OP, FU this will be the closing price set by the exchange. |
Expiry date | Expiry date for contract type FU and OP, YYYYMMDD |
Contract size | Number of underlying instruments (Only applicable for contract type OP, FU) |
Market flexibility |
|
Odd Lot Adjustment
- Adjustment of positions according to contracts required for physical delivery.
- Adjustments will be done EOD on expiry date to a price equal to final settlement price.
- File Name : "OddLotTransactions_" + <OPERATOR> + "-" + <OWNER> + "_" + <YYYYMMDD> + ".csv"
- Frequency : Available EOD (on expiry date)
- For a GCM, there will be one file per NCM.
Sample OddLotTransactions CSV
sample
Column | Description |
---|---|
Operator | GCM or ICM as named in the clearing system |
Owner | GCM, ICM or NCM as named in the clearing system |
Account | Account-id in the clearing system |
Open/close | Always Close |
Ticker | Ticker symbol |
Quantity | Quantity adjusted in order to have a position according to the number of contracts required for physical delivery |
Price | Final settlement price |
Amount | = Quantity * Price * No of underlying lots |
Currency | Currency of the instrument |
Date | Expiry date of the instrument, YYYYMMDD |
Transaction type | ODD_LOTS |
Fee Transactions
- Show all fee transactions for one Fee date.
- Corresponds to Clara web menu Fee-Transactions.
- If subscription is added to the CPP, the file will give fee transactions across all members
- File Name : "CsvFeeTransactions_" + <OPERATOR> + "-" + <OWNER> + "_" + <YYYYMMDD> + ".csv"
- Frequency : Available EOD
- For a GCM, there will be one file per NCM.
Sample CsvFeeTransactions CSV
Business date,Instrument ID,Ticker,Product code,Contract type,Put/Call,Strike,Maturity,Currency,Fixing price,Closing price,Expiry date,Contract size,Market flexibility
20230313,2235,GOMF24,GOM,FU,,,Dec-23,USD,4.071,4.071,20231201,10000,STD
Column | Description |
---|---|
Fee date | Trade date, YYYYMMDD |
Settlement date | Settlement date for the fee, YYYYMMDD |
Ticker | Ticker symbol |
Fee type | Applicable fee types:
|
Operator | GCM or ICM as named in the clearing system |
Owner | GCM, ICM or NCM as named in the clearing system |
Account | Account-id in the clearing system. For trade related fees it will be the clearing account, for collateral related fees it will be the |
Trading capacity | Trading capacity as defined on the clearing account,
|
Trade subtype | Blank if no subtype is given in the trade. Subtypes can be Block or ERFP |
Qty traded | Quantity in the trade. Only applicable for fees based on quantity in the trade. |
Currency | Fee currency USD |
Fee rate | The applicable fee rate |
Fee | The calculated fee amount |
GST rate | The applicable GST rate |
GST total | Fee * GST rate |
Fee total | Fee + GST total |
Fee code | Fee code as defined in the clearing system for the fee |
Appendices
Appendix A: WebSocket ErrorCodes
ErrorCode | Message |
---|---|
1 | One of:
|
2 | Stream disconnected |
1000 | Missing fields: [Fieldname] |
1001 | One of:
|
1002 | mpOrderId is already in use |
1003 | Market is closed |
1004 | Instrument trading is not allowed |
1005 | One of:
|
1006 | One of:
|
1007 | Invalid session |
1008 | This apiKey doesn’t have the right permission |
1009 | Instrument trading is halt |
1010 | Instrument [Instrument] not found |
1011 | Permission denied for this instrument |
1012 | Price breaches [FieldName] of [FieldValue] |
1013 | Maximum order value is [maxOrderValue] |
1014 | Price tick size is [tickSize] |
1015 | You are not allowed place [orderSide] orders in current auction |
1016 | [oppositeOrderSide] order was not yet placed |
1017 | This order exceeds maxDepth |
1018 | Trading is not allowed |
1030 | One of:
|
1031 | GAA is allowed only during auction |
1100 | Order not found for that instrument |
1103 | Missing fields: [FieldName] |
1104 | Please use only one from orderId or mpOrderId |
1200 | General error |
1201 | Wrong trackingNumber |
1301 | Quantity must be less than [remainaingActiveQuantity] |
6000 | Authentication failed |
6001 | Wrong timestamp |
6002 | Missing fields: [FieldName] |
6003 | Create session failed |
FAQs
How to generate self-sign certificate?
A. You can use OpenSSL to generate self-sign certificate, refer below for sample command:
openssl req -x509 -newkey rsa:4096 \
-keyout /etc/stunnel/my-key.pem \
-out /etc/stunnel/my-cert.pem \
-days 365 \
-nodes \
-subj "/C=SG/ST=Singapore/L=Singapore/O=Abaxx/OU=IT/CN=abaxx.exchange"
How to secure FIX Session with TLSv1.2?
A. There are may possible ways to securing socket connection with TLSv1.2, the most common is by using stunnel to setup a tunnel using sample basic configuration below:
output = /tmp/stunnel.log
cert = /etc/stunnel/my-cert.pem
key = /etc/stunnel/my-key.pem
pid = /tmp/stunnel.pid
debug = 7
[ABAXX]
client = yes
accept = 8888
connect = fix.uat.xabx.net:8888
sslVersion = TLSv1.2
Why I am not getting any ACK on my FIX Login(35=A) request?
A. Please ensure that you have complied with all the mandatory connectivity requirements published here. In case the issue was not due to any of these mandatory requirements, please contact Technology Operations team @ [email protected]
Disclaimer
This API specification is provided on an "as is" basis. To the extent permitted by law, Abaxx Exchange Pte Ltd and Abaxx Clearing Pte Ltd ("Abaxx") make no other representations or warranties of any kind regarding the API specification, and Abaxx disclaims all other obligations and liabilities, or express or implied warranties regarding the API specification, including implied warranties of merchantability, quality, fitness for a particular purpose, title, non-infringement, or systems integration. Abaxx makes no warranty, representation or guarantee as to the API specification accuracy, reliability or completeness, use, or that the API specification will be free from errors or defects. Abaxx and its officers, directors, employees, contractors or agents shall not be liable for any loss or damage arising in any way, including by reason of negligence or any other reason whatsoever, from or in connection with the API specification, whether a party acts or refrains to act in reliance on such API specification.