FIX Straight Through Processing (STP) offers a streamlined path to the Zero Hash Settlement Service. Platform Operators can use our FIX STP Gateway to stream trade updates in the FIX protocol for settlement on-chain via zerohash.
FIX Connection Workflow
FIX API sessions are designed for maximum uptime and remain open on a reliable basis. However, there is no minimum connection time guarantee, as the server may undergo maintenance without notice.
To establish a connection, clients must initiate communication with a Logon <A> request. They must also send a Logout <5> message before disconnecting to properly conclude the session.
Reach out to a zerohash representative to obtain FIX connection details.
Messages
Reach out to a zerohash representative to obtain the FIX Data Dictionary.
Supported Messages
- TradeCaptureReportRequest (AD)
- TradeCaptureReportRequestAck (AQ)
- TradeCaptureReport (AE)
- TradeCaptureReportAck (AR)
- SettlementStatusRequest (EC)
- SettlementStatusRequestAck (ED)
- SettlementStatusReport (EE)
- SettlementStatusReportAck (EF)
TradeCaptureReportRequest (AD)
Used by the client to request and subscribe trade data from our system. We will process the request and reply with TradeCaptureReportRequestAck (AQ) to confirm receipt or report an error and TradeCaptureReport (AE) containing the trade details.
| Tag | Field Name | Data Type | Required | Description | 
|---|---|---|---|---|
| 568 | TradeRequestID | String | Y | Trade Capture Report Request ID | 
| 569 | TradeRequestType | Char | Y | Type of Trade Capture Report. 0 (ALL_TRADES) → All Trades | 
| 263 | SubscriptionRequestType | Char | Y | Subscription Request Type 1 (SNAPSHOT_PLUS_UPDATES) → Snapshot + Updates (Subscribe) 2 (DISABLE_PREVIOUS_SNAPSHOT_PLUS_UPDATE_REQUEST) → Disable previous Snapshot + Update Request (Unsubscribe) | 
TradeCaptureReportRequestAck (AQ)
Sent by our system to the client to acknowledge the receipt and processing status of a previously submitted TradeCaptureReportRequest (AD). This confirms whether the request was accepted, rejected, or is pending resolution.
| Tag | Field Name | Data Type | Required | Description | 
|---|---|---|---|---|
| 568 | TradeRequestID | String | Y | Trade Capture Report Request ID | 
| 750 | TradeRequestStatus | String | Y | Status of Trade Request 0 (ACCEPTED) → Accepted 1 (COMPLETED) → Completed 2 (REJECTED) → Rejected | 
TradeCaptureReport (AE)
Used by our system to provide full details of executed trades to the client.
| Tag | Field Name | Data Type | Required | Description | 
|---|---|---|---|---|
| 571 | TradeReportID | String | N | Unique identifier of trade capture report | 
| 568 | TradeRequestID | String | N | Trade Capture Report Request ID | 
| 820 | TradeLinkID | String | N | Used to link a group of trades together | 
| Instrument | Component | Y | Component | |
| 32 | LastQty | Qty | N | Trade quantity | 
| 31 | LastPx | Price | N | Trade price | 
| 60 | TransactTime | UTC Timestamp | N | Timestamp when the business transaction represented by the message occurred | 
| TrdCapRptSideGrp | Component | Y | Component | |
| 1003 | TradeID | String | N | Trade ID | 
| 1041 | FirmTradeID | String | N | Client trade ID | 
TradeCaptureReportAck (AR)
This message is received by our system from the client. It serves as the client's confirmation, acknowledging the successful receipt and processing status of a TradeCaptureReport (AE).
The client must send a TradeCaptureReportAck (AR) message within 50 seconds of receiving the TradeCaptureReport (AE). Failure to acknowledge the message within this period will result in our system assuming the message was lost or unprocessed, triggering the redelivery of the original TradeCaptureReport (AE) message.
| Tag | Field Name | Data Type | Required | Description | 
|---|---|---|---|---|
| 571 | TradeReportID | String | Y | Unique identifier of trade capture report | 
SettlementStatusRequest (EC)
Used by the client to inquire about the current settlement status of trades.
| Tag | Field Name | Data Type | Required | Description | 
|---|---|---|---|---|
| 2965 | SettlStatusRequestID | String | Y | Unique identifier of the SettlementStatusRequest(35=EC) | 
| 263 | SubscriptionRequestType | Char | Y | Subscription Request Type 1 (SNAPSHOT_PLUS_UPDATES) → Snapshot + Updates (Subscribe) 2 (DISABLE_PREVIOUS_SNAPSHOT_PLUS_UPDATE_REQUEST) → Disable previous Snapshot + Update Request (Unsubscribe) | 
SettlementStatusRequestAck (ED)
Sent by our system to the client to acknowledge the receipt and processing status of a previously submitted SettlementStatusRequest (EC).
| Tag | Field Name | Data Type | Required | Description | 
|---|---|---|---|---|
| 2965 | SettlStatusRequestID | String | Y | Unique identifier of the SettlementStatusRequest(35=EC) | 
| 2966 | SettlStatusRequestStatus | Int | Y | Status of the SettlementStatusRequest(35=EC) message being responded to. 1 (ACCEPTED) → Accepted 2 (REJECTED) → Rejected | 
SettlementStatusReport (EE)
Used by our system to provide current settlement status updates to the client.
| Tag | Field Name | Data Type | Required | Description | 
|---|---|---|---|---|
| 2967 | SettlStatusReportID | String | Y | Unique identifier of the SettlementStatusReport(35=EE) | 
| 2965 | SettlStatusRequestID | String | Y | Unique identifier of the SettlementStatusRequest(35=EC) | 
| 2968 | SettlStatus | String | Y | Trade state: - accepted - terminated | 
| 60 | TransactTime | UTC Timestamp | Y | Timestamp when the business transaction represented by the message occurred | 
| RegulatoryTradeIDGrp | Component | Y | Component | 
SettlementStatusReportAck (EF)
This message is received by our system from the client. It acknowledges the successful receipt and processing status of a SettlementStatusReport (EE) that our system previously sent to them.
The client must send a SettlementStatusReportAck (EF) message within 50 seconds of receiving the SettlementStatusReport (EE). Failure to acknowledge the message within this period will result in our system assuming the message was lost or unprocessed, triggering the redelivery of the original SettlementStatusReport (EE) message.
| Tag | Field Name | Data Type | Required | Description | 
|---|---|---|---|---|
| 2967 | SettlStatusReportID | String | Y | Unique identifier of the SettlementStatusReport(35=EE) | 
Components
Instrument
| Tag | Field Name | Data Type | Required | Description | 
|---|---|---|---|---|
| 55 | Symbol | String | N | Ticker symbol. Common, human understood representation of the security | 
| 48 | SecurityID | String | N | Security identifier value | 
TrdCapRptSideGrp
Repeating group
| Tag | Field Name | Data Type | Required | Description | 
|---|---|---|---|---|
| 552 | NoSides | NumInGroup (Repeating group) | Y | Number of Side repeating group instances. 0 (ONE_SIDE) → One Side 1 (BOTH_SIDES) → Both Sides | 
| 54 | Side | Char | Y | Side of order. 1 (BUY) → Buy 2 (SELL) → Sell | 
| Parties | Component | N | Component | |
| 1 | Account | String | N | Account details CUST01/PLAT01/label ( {participant_code}/{account_group}/{account_label}) | 
| 119 | SettlCurrAmt | Amt | N | Total amount due expressed in settlement currency | 
| MiscFeesGrp | Component | N | Component | |
| 1154 | SideCurrency | Currency | N | Used to identify the trading currency on the Trade Capture Report Side | 
| TradeReportOrderDetail | Component | N | Component | |
| 1427 | SideExecID | String | N | When reporting trades, used to reference the identifier of the execution (ExecID) being reported if different ExecIDs were assigned to each side of the trade | 
Parties
Repeating Group
| Tag | Field Name | Data Type | Required | Description | 
|---|---|---|---|---|
| 453 | NoPartyIDs | Numingroup | N | Number of PartyID (448) | 
| 448 | PartyID | String | N | Party identifier/code | 
| 447 | PartyIDSource | Char | N | Identifies class or source of the PartyID (448) value C (GENERALLY_ACCEPTED_MARKET_PARTICIPANT_IDENTIFIER) → Generally accepted market participant identifier (e.g. NASD mnemonic) | 
| 452 | PartyRole | Int | N | 3 (CLIENT_ID) → Client ID | 
MiscFeesGrp
Repeating group
| Tag | Field Name | Data Type | Required | Description | 
|---|---|---|---|---|
| 136 | NoMiscFees | Numingroup | N | Number of repeating groups of miscellaneous fees | 
| 137 | MiscFeeAmt | Amt | N | Trade fee amount | 
| 138 | MiscFeeCurr | Currency | N | Trade fee currency | 
| 139 | MiscFeeType | String | N | Indicates type of miscellaneous fee 7 (OTHER) → Other | 
| 891 | MiscFeeBasis | Int | N | Defines the unit for a miscellaneous fee. 0 (ABSOLUTE) → Absolute 1 (PER_UNIT) → Per Unit 2 (PERCENTAGE) → Percentage | 
| 2713 | MiscFeeDesc | String | N | Trade fee name | 
TradeReportOrderDetail
| Tag | Field Name | Data Type | Required | Description | 
|---|---|---|---|---|
| 37 | OrderID | String | N | Unique identifier for Order as assigned by sell-side | 
| 11 | ClOrdID | String | N | Unique identifier for Order as assigned by the buy-side | 
RegulatoryTradeIDGrp
Repeating group
| Tag | Field Name | Data Type | Required | Description | 
|---|---|---|---|---|
| 1907 | NoRegulatoryTradeIDs | Numingroup | Y | Number of regulatory IDs in the repeating group | 
| 1903 | RegulatoryTradeID | String | Y | Client trade ID | 
| 1905 | RegulatoryTradeIDSource | String | Y | Identifies the reporting entity that originated the value in RegulatoryTradeID(1903) 1 (UNIQUE_TRANSACTION_IDENTIFIER) → Unique Transaction Identifier | 
| 1906 | RegulatoryTradeIDType | Int | Y | Specifies the type of trade identifier provided in RegulatoryTradeID(1903). 5 (TRADING_VENUE_TRANSACTION_IDENTIFIER) → Trading Venue Transaction Identifier | 
| 2397 | RegulatoryTradeIDScope | Int | Y | Specifies the scope to which the RegulatoryTradeID(1903) applies. 2 (CLIENT) → Client | 
API Integration Workflow
Trade Capture Report
To start receiving trade updates through the FIX protocol, the platform should follow this flow:
1. Initiator sends TradeCaptureReportRequest (35=AD)
Sample Message
8=FIXT.1.1|9=119|35=AD|34=2|49=STP-PLAT01-1|52=20251022-20:44:37.098|56=ZERO|369=0|263=1|568=b5a83f29-f6ee-4f48-afbe-1734f4c07caa|569=0|10=118|
2. Acceptor sends TradeCaptureReportRequestAck (35=AQ)
Sample Message
8=FIXT.1.1|9=113|35=AQ|34=2|49=ZERO|52=20251020-20:09:43.531|56=STP-PLAT01-1|369=1|568=57e7ed51-4e73-4920-8ff2-0e0865475838|750=0|10=196|
3. Acceptor starts streaming trade updates using TradeCaptureReport (35=AE)
Sample Message
8=FIXT.1.1|9=651|35=AE|34=3|49=ZERO|52=20251020-20:09:43.857|56=STP-PLAT01-1|369=1|31=111714.6565399221266164|32=0.00041606|48=BTC/USD|55=BTC/USD|60=20251020-20:09:31.000|552=2|54=1|453=1|448=PLAT01|447=C|452=3|1=PLAT01/PLAT01/general|119=0.00041606|136=3|137=1.11|138=USD|139=7|891=0|2713=fee1|137=2.22|138=USD|139=7|891=0|2713=fee2|137=3.33|138=USD|139=7|891=0|2713=fee3|1154=BTC|54=2|453=1|448=00SCXM|447=C|452=3|1=00SCXM/00SCXM/inventory|119=46.48|1154=USD|568=57e7ed51-4e73-4920-8ff2-0e0865475838|571=92c5d28c-e4c6-5c3d-8215-14fec631918f|820=f1cfc6a7-bf85-4e3a-bf86-29ae62745770|1003=60441cac-f515-4b35-9293-542201ca9816|1041=f1cfc6a7-bf85-4e3a-bf86-29ae62745770|10=052|
4. For each trade update received, the initiator acknowledges the message using TradeCaptureReportAck (35=AR)
Sample Message
8=FIXT.1.1|9=107|35=AR|34=4|49=STP-PLAT01-1|52=20251020-20:09:45.907|56=ZERO|369=2|571=92c5d28c-e4c6-5c3d-8215-14fec631918f|10=116|
Settlement Status Report
To start receiving trade state updates through the FIX protocol, the platform should follow this flow:
1. Client sends SettlementStatusRequest (35=EC)
Sample Message
8=FIXT.1.1|9=114|35=EC|34=3|49=STP-PLAT01-1|52=20251020-20:09:42.132|56=ZERO|369=0|263=1|2965=3132cc1b-6fef-4471-a5bb-10fd286f4d9f|10=027|
2. Acceptor sends SettlementStatusRequestAck (35=ED)
Sample Message
8=FIXT.1.1|9=115|35=ED|34=5|49=ZERO|52=20251022-20:44:40.329|56=STP-PLAT01-1|369=2|2965=06f29329-efae-44df-8870-96683c38d364|2966=1|10=151|
3. Acceptor starts streaming trade state updates using SettlementStatusReport (35=EE)
Sample Message
8=FIXT.1.1|9=259|35=EE|34=6|49=ZERO|52=20251022-20:44:40.663|56=STP-PLAT01-1|369=2|60=20251022-18:15:05.000|1907=1|1903=d14081e4-83c8-4ede-a11c-1c4d0a5686ab|1905=1|1906=5|2397=2|2965=06f29329-efae-44df-8870-96683c38d364|2967=a833cb75-dcf5-512a-af6c-a3c43086f4ca|2968=accepted|10=040|
4. For each trade state update received, the client acknowledges the message using SettlementStatusReportAck (35=EF)
Sample Message
8=FIXT.1.1|9=108|35=EF|34=6|49=STP-PLAT01-1|52=20251020-20:08:16.163|56=ZERO|369=5|2967=a275eef8-c158-53e0-936f-dc278ba0befe|10=100|
Support
For assistance with integrating your trading systems with the FIX STP Gateway or any questions related to the API documentation, please contact our support team at [email protected]. We're here to help you streamline your settlement process and optimize your trading operations with FIX STP integration.
