NAV

API Specification

Introduction

The FIX (Financial Information eXchange) protocol is a widely adopted and time-tested standard for exchanging trading-related messages in capital markets. It is used for sending buy/sell orders, receiving market data, managing executions, and more.

Flowlink builds upon the FIX 4.4 specification, with minor customizations to support efficient market data streaming and trade execution between institutional takers and liquidity providers.

For additional background on FIX, refer to the official FIX Trading Community site: https://www.fixtrading.org/

Session Types

Flowlink supports two distinct FIX sessions:

Session Type Purpose
Market Data Used to receive or stream market data, including quote requests and price updates
Trading Used for order-related communication, such as sending new orders, cancel requests, and receiving execution confirmations

Each session:

Integration Support

Flowlink provides a dedicated UAT (demo) environment for integration and testing. We also offer example code and FIX dictionaries for common engines, including:

Maintenance

To ensure low-latency performance, stability, and security, Flowlink is subject to routine maintenance and deployment procedures. These updates are carefully scheduled to minimize operational impact and improve service continuity.

Unlike traditional systems with lengthy restart windows, Flowlink upgrades are designed to complete within approximately 5 seconds. However, clients should still be prepared for brief connection interruptions during the maintenance window.

Maintenance Schedule

Datacenter Start Time (UTC) Expected Duration
LD4 (London) 02:00 UTC ~5 seconds
NY4 (New York) 08:00 UTC ~5 seconds

During this time, both Market Data and Trading sessions may briefly disconnect and reconnect automatically.

If you require coordination for specific maintenance events, please contact the support team in advance.

Naming Convention

Axon Trade uses the following standardized naming rules to maintain consistency across its trading infrastructure.

Instrument Type Symbol Format CFICode (Symbol) Base Asset CFICode Quote Asset CFICode Example Symbol
Crypto Spot BASE/QUOTE DCTXXX DCTXXX DCTXXX or DSTXXX BTC/USDT, ETH/USDC
Crypto–Fiat Spot BASE/QUOTE DCTXXX DCTXXX FCFXXX BTC/USD, ETH/EUR
FX BASE/QUOTE FCFXXX FCFXXX FCFXXX EUR/USD, JPY/CHF
Perpetual Swaps PERP:BASE-PERP:QUOTE DFPXXX DFPXXX DCTXXX PERP:BTC-PERP:BTC
Futures Contracts FUT:EXPIRY:QUOTE DFXXXX DFXXXX DCTXXX FUT:MAR22:BTC
Options OPT:EXPIRY_STRIKE:QUOTE DOCXXX DOCXXX DCTXXX or DSTXXX OPT:JUL21P40000:USDT
Stocks TICKER ESXXXX ESXXXX FCFXXX AAPL, GOOGL, TSLA

Notes:
- Symbol CFICode is based on the nature of the base asset, except for futures/options where a contract CFICode is used.
- Stablecoins (e.g., USDT, USDC) use DSTXXX.
- Fiat currencies use FCFXXX.
- Crypto tokens use DCTXXX.
- CFICodes are used both for individual assets and entire trading symbols, enabling easier classification and filtering.

Market Data Session

The Market Data session in Flowlink is used to transmit pricing information and quotes from liquidity providers to Flowlink in response to quote requests.

Unlike systems that stream incremental order book updates, Flowlink uses full snapshots to represent pricing. These are delivered using the MarketDataSnapshotFullRefresh (MsgType = W) message format.

Message Format

Each MarketDataSnapshotFullRefresh message must include a complete snapshot of active price levels (bid and/or ask). This approach ensures downstream systems receive consistent and self-contained pricing data without needing to track incremental changes.

Behavior and Expectations

Message Structure

Flowlink uses a slightly customized implementation of FIX 4.4 for both market data and trading sessions. All messages follow the standard FIX envelope format, which includes a header, body, and footer.

Header Fields

Tag Field Name Required Description
8 BeginString Yes Identifies the start of the FIX message and specifies the protocol version. Always set to FIX.4.4.
9 BodyLength Yes Byte length of the message body, calculated from tag 35 to tag 10 (exclusive).
35 MsgType Yes Identifies the type of message (e.g., A for Logon, W for MarketDataSnapshotFullRefresh).
49 SenderCompID Yes Assigned identifier of the message sender.
56 TargetCompID Yes Assigned identifier of the message receiver. Flowlink sessions use values like FLOWLINK-MD-NY4-1 or FLOWLINK-MD-LD4-1.
34 MsgSeqNum Yes Sequential number of the message within a session.
52 SendingTime Yes Time the message was sent, in UTC, using the YYYY-MM-DDThh:mm:ss.SSS format.
Tag Field Name Required Description
10 CheckSum Yes Simple three-byte checksum of all bytes in the message prior to this tag, used for message integrity validation.

Messages

This section outlines the core FIX messages used by Flowlink for session management and market data delivery.

Logon

(MsgType = A)

Direction: IN / OUT
Purpose: Initiates a FIX session and performs authentication.

The Logon message must be the first message sent after establishing a TCP connection. Upon successful authentication, Flowlink will respond with a Logon message.

Required Fields:

Tag Field Name Required Comments
98 EncryptMethod Yes Must be 0 (None).
108 HeartBtInt Yes Requested heartbeat interval in seconds (recommended: 5).
141 ResetSeqNumFlag No Indicates sequence number reset on both sides. Must be set to Y for Market Data sessions.
553 Username Yes* Username for authentication. Required in incoming Logon only.
554 Password Yes* Password for authentication. Required in incoming Logon only.

Logout

(MsgType = 5)

Direction: IN / OUT
Purpose: Closes a FIX session or provides context for disconnection.

Logout messages are used to terminate a session or signal session-level issues. Either side may initiate a logout.

Optional Fields:

Tag Field Name Required Comments
58 Text No Human-readable disconnection reason (e.g., authentication failure). This field may be omitted.

SecurityListRequest

(MsgType = x)

Direction: OUT
Purpose: Used to request the list of all tradable instruments on a specific exchange.

This message allows a counterparty to query Flowlink for available instruments by specifying the target exchange. Flowlink will respond with a corresponding SecurityList (MsgType = y) message.

Required Fields:

Tag Field Name Required Comments
320 SecurityReqID Yes Unique identifier for the request. Must be echoed in the response.
559 SecurityListRequestType Yes Type of security list being requested. Only supported value: 4 (All Securities).
207 SecurityExchange Yes Identifier of the exchange whose instrument list is being requested.

SecurityList

(MsgType = y)

Direction: IN
Purpose: Returns a list of tradable instruments matching the criteria specified in a prior SecurityListRequest.

Because the list of instruments can be large, Flowlink returns one instrument per message. The combination of TotNoRelatedSym and LastFragment can be used to determine when the full transmission is complete.

Required and Conditional Fields:

Tag Field Name Required Comments
320 SecurityReqID Yes Echoes the SecurityReqID from the initiating request.
322 SecurityResponseID Yes Unique identifier for this response message.
560 SecurityRequestResult Yes Indicates the result of the request.
Supported values:
0 – Valid request
1 – Invalid or unsupported request
2 – No instruments matched
3 – Not authorized
393 TotNoRelatedSym No Total number of instruments matching the criteria. Used for fragmentation tracking.
893 LastFragment No Indicates whether this is the final message in the sequence (Y = yes, N = no).
58 Text Conditional Optional human-readable error message. Only included when applicable.

Instrument Block

(NoRelatedSym)

Tag Field Name Required Comments
146 NoRelatedSym Conditional Always 1 if the request was successful (one instrument per message).

Inside Instrument Block:

Tag Field Name Required Comments
55 Symbol Conditional Instrument symbol, e.g. ETH/BTC.
207 SecurityExchange Conditional Exchange identifier for the instrument.
5001 Price Precision Conditional Number of decimal places supported in price.
5002 Size Precision Conditional Number of decimal places supported in order size.
562 MinTradeVol Conditional Minimum trading volume allowed for the symbol.

Underlying Instruments

(NoUnderlyings Group)

Tag Field Name Required Comments
711 NoUnderlyings Conditional Always 2 for composite/derivative instruments.

Inside Each Underlying:

Tag Field Name Required Comments
311 UnderlyingSymbol Conditional Symbol of the underlying asset.
463 UnderlyingCFICode Conditional CFICode of the underlying asset.
Examples:
FCFXXX – Fiat (USD, EUR)
DCTXXX – Crypto tokens (BTC, ETH)
DSTXXX – Stablecoins (USDT, USDC)
DFPXXX – Perpetual futures
DFXXXX – Futures
ESXXXX – Stocks
DOCXXX – Options
5002 Size Precision Conditional Number of decimal places allowed for the underlying's order size.

MarketDataRequest

(MsgType = V)

Role Direction
Taker OUT
Maker IN

Purpose: Initiates a subscription to market data snapshots for one or more symbols on specified exchanges.
Flowlink responds to valid requests with MarketDataSnapshotFullRefresh messages.

Unsubscribing:

To unsubscribe, send a MarketDataRequest with SubscriptionRequestType = 2 (Disable). All required fields must be present.
Only full unsubscription is supported (Symbol = ALL). Partial unsubscription is not available.

Required Fields:

Tag Field Name Required Comments
262 MDReqID Yes Unique request ID. Echoed in responses.
263 SubscriptionRequestType Yes 1 – Subscribe
2 – Unsubscribe
264 MarketDepth Yes 0 – Full book
265 MDUpdateType Yes 0 – Full Refresh
267 NoMDEntryTypes Yes Must include two entries: Bid (0) and Offer (1)
↳ 269 MDEntryType Yes Entry type: 0 – Bid, 1 – Offer
146 NoRelatedSym Yes One or more instruments to subscribe to
↳ 55 Symbol Yes Instrument symbol (e.g. ETH/BTC)
↳ 207 SecurityExchange Yes Exchange identifier (e.g. FLOWTRADERS)

MarketDataRequestReject

(MsgType = Y)

Role Direction
Taker IN
Maker OUT

Purpose: Sent in response to a failed MarketDataRequest. This message provides details about the rejection reason.

If a MarketDataRequest included multiple instruments and one or more were invalid, the rejection will reference the first error encountered only.

Required Fields:

Tag Field Name Required Comments
262 MDReqID Yes Request ID of the original MarketDataRequest.
281 MDReqRejReason Yes Rejection reason:
0 – Unknown symbol
1 – Duplicated MDReqID
3 – Insufficient permissions
D – Unknown MDReqID
E – Unknown SecurityExchange
F – Quote provider is offline
58 Text Yes Human-readable explanation of the rejection reason.

MarketDataSnapshotFullRefresh

(MsgType = W)

Role Direction
Taker IN
Maker OUT

Purpose: Delivers a full snapshot of the order book for a specific instrument on a specific exchange, in response to a MarketDataRequest with MDUpdateType = 0 (Full Refresh).

The number of entries included depends on the MarketDepth value specified in the original request.

Book Reset Events

In the case of a book reset (e.g. when a quote is withdrawn or conditions change), Flowlink sends a special MarketDataSnapshotFullRefresh message containing two entries:

In both entries:

This serves as an instruction to the receiver to invalidate all current price levels for the instrument. There is no need to re-subscribe; updates will resume automatically when available.

Required Fields:

Tag Field Name Required Comments
262 MDReqID Yes Request ID being responded to.
55 Symbol Yes Name of the instrument (e.g. ETH/BTC).
207 SecurityExchange Yes Exchange identifier.
83 RptSeq Yes Incremental sequence number (can be used to track update ordering).
268 NoMDEntries Yes Number of entries in the snapshot. Typically one per price level.

Inside MDEntries Group:

Tag Field Name Required Comments
269 MDEntryType Yes 0 – Bid, 1 – Offer
270 MDEntryPx Yes Price at this level
271 MDEntrySize Yes Quantity available at this price
299 QuoteEntryID Conditional Included when the entry corresponds to a firm quote
272 MDEntryDate Yes Last update date (UTC, ISO 8601 format)
273 MDEntryTime Yes Last update time (UTC)

Trading Session

The Trading session is used to send orders to liquidity providers and to receive execution feedback via asynchronous ExecutionReport messages.

Flowlink FIX sessions operate as fully asynchronous communication channels — clients do not need to poll for updates. Any changes to an order’s status (e.g., accepted, filled, canceled) are pushed automatically in real time.

By default, a single trading session can route orders across multiple exchanges or venues, simplifying integration. For more advanced use cases, access control rules can be applied to control routing behavior.

Order Lifecycle

Once an order is submitted (NewOrderSingle), the client will receive an ExecutionReport in response with one of the following initial statuses (OrdStatus):

If accepted (PENDING_NEW), the order may proceed through the following states:

Dictionaries

CFICode (Classification of Financial Instruments)

CFICode Description
FCFXXX Fiat currencies (e.g., USD, EUR, JPY)
DCTXXX Crypto tokens (e.g., BTC, ETH, SOL)
DSTXXX Stablecoins (e.g., USDT, USDC)
DFPXXX Perpetual futures contracts (e.g., BTC-PERP)
DFXXXX Standard futures contracts
ESXXXX Stocks
DOCXXX Options

Order Types

(OrdType)

Flowlink supports the following order types:

Type Description
1 Market — No price required. Executes at best available price.
2 Limit — Requires Price (44) to be set.
D Previously Quoted — Used for RFQ-based IOC/FOK orders that refer to a quote via QuoteID.

Order Sides

(Side)

Only two sides are supported:

Time in Force

(TimeInForce)

Flowlink supports the following values:

Type Description
3 Immediate Or Cancel (IOC) — Executes partially or fully immediately; unfilled portion is canceled
4 Fill Or Kill (FOK) — Must be fully filled immediately or canceled entirely

Messages

Logon

(MsgType = A)

Purpose: Initiates the FIX session and performs authentication.
This must be the first message sent after establishing the TCP connection. Upon successful authentication, Flowlink responds with a corresponding Logon message.

Required Fields:

Tag Field Name Required Comments
98 EncryptMethod Yes Always set to 0 (None)
108 HeartBtInt Yes Heartbeat interval (always 30)
553 Username Yes Session username
554 Password Yes Session password

Logout

(MsgType = 5)

Role Direction
Client IN/OUT
Server IN/OUT

Purpose: Terminates the session or communicates a session-level error. Can be initiated by either party.

Optional Fields:

Tag Field Name Required Comments
58 Text No Human-readable explanation for the disconnection. May be omitted.

NewOrderSingle

(MsgType = D)

Role Direction
Taker OUT
Maker IN

Purpose: Used to submit a new order for execution.
This includes market, limit, or previously quoted (RFQ-based) orders.
The message must specify the symbol, side, venue, and order parameters.

Required & Conditional Fields:

Tag Field Name Required Comments
11 ClOrdID Yes Unique client-assigned order ID (max 50 characters)
38 OrderQty Yes Total order quantity
40 OrdType Yes Order type:
1 – Market
2 – Limit
D – Previously Quoted
44 Price Cond. Required for Limit orders (OrdType =)
54 Side Yes Order side:
1 – Buy
2 – Sell
55 Symbol Yes Instrument symbol (e.g., ETH/BTC)
59 TimeInForce Yes Only supported values:
3 – IOC
4 – FOK
60 TransactTime Yes Timestamp of order submission (UTC, with milliseconds)
100 ExDestination Yes Target exchange or ECN identifier
461 CFICode Yes Classification of financial instrument:
DCTXXX – Crypto spot
DFPXXX – Perpetual swap
FCFXXX – Fiat FX
DFXXXX – Futures
117 QuoteID Cond. Required if OrdType = D (Previously Quoted)

ExecutionReport

(MsgType = 8)

Role Direction
Taker IN
Maker OUT

Purpose: Reports the status of an order — such as acknowledgment, fill, cancellation, or rejection.
This message is sent by the liquidity provider (maker) to Flowlink and forwarded to the taker.
It is also used internally by Flowlink to reflect lifecycle transitions.

Required & Conditional Fields:

Tag Field Name Required Comments
11 ClOrdID Yes Client-assigned order ID
37 OrderID Yes Internal Flowlink-assigned order ID
17 ExecID Yes Unique ID for this execution report
40 OrdType Yes Order type:
1 – Market
2 – Limit
D – Previously Quoted
44 Price Cond. Present for Limit orders
54 Side Yes 1 – Buy
2 – Sell
55 Symbol Yes Instrument symbol
59 TimeInForce Yes Only supported values:
3 – IOC
4 – FOK
39 OrdStatus Yes Current order state:
A – Pending New
0 – New
1 – Partially Filled
2 – Filled
4 – Canceled
8 – Rejected
150 ExecType Yes Type of execution report:
0 – New
F – Trade
4 – Canceled
8 – Rejected
6 AvgPx Yes Average price across all fills
31 LastPx Cond. Price of the last fill (if applicable)
32 LastQty Cond. Quantity of the last fill (if applicable)
14 CumQty Yes Total filled quantity
151 LeavesQty Yes Remaining quantity (unfilled portion)
58 Text Cond. Optional free-text reason or explanation (e.g., rejection details)
60 TransactTime Yes Timestamp of this report (UTC with milliseconds)
100 ExDestination Yes Execution venue (exchange/ECN identifier)
103 OrdRejReason Cond. Present when OrdStatus = 8 (Rejected). Supported values:
0 – Broker option
1 – Unknown symbol
2 – Exchange closed
3 – Exceeds limits
4 – Too late to enter
5 – Unknown order
6 – Duplicate order ID
11 – Unsupported characteristics
13 – Incorrect quantity
15 – Unknown account
50 – Too many requests
99 – Other
461 CFICode Yes Instrument classification:
DCTXXX – Crypto spot
DFPXXX – Perpetual swap
FCFXXX – Fiat FX
DFXXXX – Futures
12 Commission Cond. Execution commission (only present for orders in PARTIALLY_FILLED or FILLED)
13 CommissionType Cond. Must be 3 – Absolute (only for filled/partially filled orders)
479 CommissionCurrency Cond. Currency in which commission was charged (e.g., USD, USDT)

OrderCancelRequest

(MsgType = F)

Role Direction
Taker OUT
Maker IN

Purpose: Used to cancel an existing order.
Only orders in NEW or PARTIALLY_FILLED status are eligible for cancellation.
If you intend to change the remaining quantity or price, use Order Cancel/Replace Request instead.

Required Fields:

Tag Field Name Required Comments
11 ClOrdID Yes Client-generated ID for this cancel request (max 50 characters)
37 OrderID Yes Flowlink-assigned ID of the order to be canceled
41 OrigClOrdID Yes Original client order ID of the order being canceled
54 Side Yes Order side:
1 – Buy
2 – Sell
55 Symbol Yes Instrument symbol (e.g. ETH/USD)
60 TransactTime Yes Timestamp of cancel request (UTC with milliseconds)

OrderCancelReject

(MsgType = F)

Role Direction
Taker IN
Maker OUT

Purpose: Sent by the server (or maker) in response to a failed Order Cancel Request.
Contains details about the reason the cancellation could not be processed.

Fields:

Tag Field Name Required Comments
11 ClOrdID Conditional ID of the cancel request sent by the client (max 50 characters)
41 OrigClOrdID Conditional Original client order ID of the order being canceled
37 OrderID Conditional Internal order ID from prior ExecutionReport
102 CxlRejReason Yes Reason the cancel was rejected:
0 – Too late to cancel
1 – Unknown order
2 – Broker/Exchange option
4 – Unable to process
99 – Other
434 CxlRejResponseTo Yes Always 1 – Response to Order Cancel Request
58 Text Optional Human-readable description of the failure
60 TransactTime Yes UTC timestamp with milliseconds of the rejection

TradingSessionStatusRequest

(MsgType = g)

Role Direction
Taker OUT
Maker IN

Purpose: Sent by the client to query and subscribe to updates on the status of all outbound trading connections.

Fields:

Tag Field Name Required Comments
335 TradSesReqID Yes Unique ID for this request
263 SubscriptionRequestType Yes 1 – Snapshot plus Updates

TradingSessionStatus

(MsgType = h)

Role Direction
Taker IN
Maker OUT

Purpose: Sent by the server in response to a TradingSessionStatusRequest, or asynchronously whenever the connectivity status of any trading destination changes.

Fields:

Tag Field Name Required Comments
335 TradSesReqID Yes Copied from the original request
336 TradingSessionID Yes Name of the trading destination (e.g., DERIBIT)
325 UnsolicitedIndicator Yes N – response to request (snapshot)
Y – real-time update
340 TradSesStatus Yes 2 – OPEN
3 – CLOSED
6 – REQUEST REJECTED
58 Text Optional Error message or additional details