Skip to content
WxTrade
WxTrade

FIX Protocol (Financial Information eXchange) Explained for FX and CFD Brokers

Fix protocol

FIX, the Financial Information eXchange protocol, is the open messaging standard that banks, liquidity providers, trading venues and brokers use to exchange prices, orders and executions electronically. Each FIX message is a string of numbered tag=value fields, and each one travels inside a session that numbers every message, so that nothing is lost or processed twice. In an FX and CFD brokerage, FIX normally runs on the institutional side of the business: the bridge or aggregator holds a FIX session with each liquidity provider, receives streaming prices as market data messages, sends hedge orders as New Order Single messages and receives fills and rejections as Execution Reports. The standard is maintained by the FIX Trading Community, a non-profit industry body, and anyone may implement it; what a broker pays for is the engine, the network connection and the onboarding work with each counterparty.

This guide explains how a FIX message is built, how a FIX session stays in sequence, which messages a liquidity provider connection carries and what a brokerage should agree with each provider before the first logon. An interactive decoder takes a raw message apart field by field and recalculates its length and checksum.

What FIX is and who maintains it

FIX began in the early 1990s as a replacement for proprietary, point-to-point electronic trading interfaces. According to the FIX Trading Community, it was developed initially by Salomon Brothers and Fidelity Investments to standardise communications for US equities, and it was publicly released as an industry standard by 1995. The FIX Trading Community, which describes itself as an independent, non-profit standards body, now maintains the protocol through member working groups and a Global Technical Committee that reviews every change for consistency with the existing standard.

The FIX Trading Community defines FIX as an application-layer protocol: the specification fixes what a trading message means, while the network transport, the session model and the encoding may vary. Its published scope covers equities, fixed income, FX, listed and OTC derivatives and digital assets, and the same pages note that FIX is used for regulatory reporting to FINRA TRACE, the CFTC, OCC, CIRO in Canada and ASIC in Australia. For a brokerage, the practical consequence is that one order, execution and market data vocabulary applies whether the counterparty is a tier-one bank, a prime-of-prime liquidity provider or an exchange.

How a FIX message is put together

In the classic tag=value encoding, every field is a number, an equals sign and a value, and fields are separated by the non-printing SOH character (hexadecimal 0x01). The FIX 4.4 specification requires every message to open with BeginString(8), BodyLength(9) and MsgType(35), in that order, and to close with CheckSum(10). Between them sit the routing and sequencing fields that every message carries, including SenderCompID(49), TargetCompID(56), MsgSeqNum(34) and SendingTime(52), followed by the business fields of the particular message type.

Two integrity checks travel with each message. BodyLength counts the characters that follow the BodyLength field, up to and including the delimiter immediately before the CheckSum tag. CheckSum adds up the byte values of everything from the "8=" at the start to that same delimiter, takes the total modulo 256 and sends the result as three digits; the specification's own example turns a total of 274 into "10=018". Under the FIX session standard, a message that fails either check is treated as garbled: the receiver discards it without advancing the sequence number it expects next, and the gap that the following message reveals triggers recovery.

The worked example below is an illustrative FIX 4.4 New Order Single from a broker's hedging engine to a liquidity provider: sell 1,000,000 US dollars against Japanese yen at a limit of 105.92, immediate or cancel. The pipe character stands in for SOH, and the comp IDs, order reference and timestamps are placeholders.

8=FIX.4.4|9=152|35=D|49=BROKER01|56=LPDEMO|34=4|52=20261030-09:30:32.000|11=HEDGE-000123|55=USD/JPY|54=2|38=1000000|15=USD|40=2|44=105.92|59=3|60=20261030-09:30:32.000|10=164|
  • 35=D marks a New Order Single, and 11=HEDGE-000123 is the broker's own order reference (ClOrdID), which the provider echoes in every Execution Report about this order.
  • 55=USD/JPY with 15=USD follows the FIX 4.4 foreign exchange convention: the symbol names both currencies, and the quantity in 38=1000000 is denominated in the currency named by Currency(15).
  • 54=2 is a sell, 40=2 a limit order at 44=105.92, 59=3 immediate or cancel, and 60 records when the order was created, in UTC.
  • 9=152 is the count of characters from "35=D" through the delimiter before "10=", and 10=164 is the byte total of the whole message up to that point, modulo 256.

FIX 4.4 makes six things mandatory on a New Order Single: ClOrdID(11), the instrument, Side(54), TransactTime(60), the order quantity and OrdType(40). Everything else, including price and time in force, depends on the order type and on what the receiving provider accepts. The decoder below runs the same calculation in the browser; editing any field shows immediately which of the two integrity checks breaks.

Interactive decoder

Take a FIX message apart, field by field

Pick a message from a broker's liquidity provider session, or edit the raw text. The decoder names every tag, separates header, body and trailer, and recalculates BodyLength(9) and CheckSum(10) the way a receiving FIX engine does.

BodyLength (9)

152declared 152

Match

CheckSum (10)

164declared 164

Match

Message type

New Order Single

Application message

Header 73 bytesBody 95 bytesTrailer 7 bytes

New Order Single: 17 fields. BodyLength 152 matches, CheckSum 164 matches.

8BeginStringFIX.4.4Session profile and version; always the first field
9BodyLength152Characters from tag 35 to the delimiter before tag 10
35MsgTypeDNew Order Single
49SenderCompIDBROKER01Comp ID of the sending firm
56TargetCompIDLPDEMOComp ID of the receiving firm
34MsgSeqNum4Position of this message in the session sequence
52SendingTime20261030-09:30:32.000When the message was sent, in UTC
11ClOrdIDHEDGE-000123The broker's own order reference
55SymbolUSD/JPYInstrument; FX symbols take the form CCY1/CCY2
54Side2Sell
38OrderQty1000000Quantity, in the currency named in tag 15
15CurrencyUSDCurrency of the quantity, an ISO 4217 code
40OrdType2Limit
44Price105.92Limit price
59TimeInForce3Immediate or cancel
60TransactTime20261030-09:30:32.000When the order was created or executed, in UTC
10CheckSum164Byte total modulo 256, sent as three digits

Sample messages follow FIX 4.4; comp IDs, references, prices and timestamps are illustrative. The decoder names the fields an FX liquidity provider session commonly carries and marks any other tag as outside its dictionary.

How a FIX session keeps both sides in sequence

In the FIX Trading Community's definition, a FIX session is a bidirectional stream of ordered messages within one continuous sequence number series that begins at 1, and a single session can survive several disconnections and reconnections. Each side tracks the next sequence number it expects to receive. That design lets a broker and a liquidity provider recover every order and fill after a dropped line. The same design means that a sequence mismatch at logon stops trading on that connection until both sides agree how to resynchronise. The session layer uses seven administrative messages.

MsgTypeMessageWhat it does on a provider connection
ALogonFirst message on every connection; carries the agreed heartbeat interval in HeartBtInt(108) and, where both sides allow it, a sequence reset flag.
0HeartbeatSent during silence so that each side knows the other is alive; also the reply to a Test Request.
1Test RequestForces a Heartbeat when nothing has arrived within the interval; no reply means the connection is treated as failed.
2Resend RequestAsks for a range of messages after a gap; resent messages keep their numbers and carry PossDupFlag(43)=Y.
4Sequence ResetGap-fills over messages that will not be resent, such as stale heartbeats, or forces a new number in exceptional cases.
3RejectSession-level rejection of a message that broke a protocol rule, with a numeric reason code in field 373.
5LogoutEnds the connection cleanly; a disconnection without Logout is treated as an abnormal condition.

Three provisions in the June 2020 FIX session standard matter most to an execution desk. The heartbeat interval must be agreed by both sides and is the longest silence allowed between messages; once it lapses, a Test Request goes out, and the standard suggests waiting between 1.2 and 2.0 times the interval for the answer before logging out. Resetting sequence numbers at logon must also be agreed in advance, because the standard warns that operational risks such as order overfills can follow when only one side is configured for it. Finally, a FIX implementation that uses TCP/IP must use FIXS, the FIX-over-TLS specification, so that the connection is encrypted.

Session health also limits execution quality. A provider whose session is down or stuck in recovery drops out of the set of prices and venues that the smart order router can use, so the routing logic is only as good as the sessions underneath it.

The messages on a liquidity provider connection

Above the session layer, an FX liquidity provider connection uses a small part of the FIX vocabulary. Prices arrive either as a subscription to streaming market data or as quotes in answer to a request, orders go out as single orders, and results come back as Execution Reports. The message type codes below are taken from the FIX 4.4 specification.

MsgTypeMessageRole in a broker's hedging flow
VMarket Data RequestSubscribes to prices for a symbol; field 263 set to 1 asks for a snapshot followed by updates.
WMarket Data SnapshotThe full requested book: bid and offer entries with their prices and sizes.
XMarket Data Incremental RefreshChanges since the last update, each flagged as a new, changed or deleted price level.
YMarket Data Request RejectRefuses a subscription, for example for a symbol the provider does not stream.
R and SQuote Request and QuoteRequest-for-quote flow, in which the provider answers a specific request with a price.
DNew Order SingleThe hedge or cover order: symbol, side, quantity, currency, order type, price and time in force.
8Execution ReportEvery change in the order's state, from acceptance through fills to cancellation or rejection.
F and 9Order Cancel Request and Order Cancel RejectWithdraws a resting order, or reports that the withdrawal could not be made.
jBusiness Message RejectRefuses an application message the receiver cannot process, such as an unsupported message type.

The Execution Report is the message the back office ultimately depends on. ExecType(150) states what has just happened, with F for a trade and 8 for a rejection, while OrdStatus(39) gives the order's current state, with 2 for filled and 8 for rejected. LastQty(32), LastPx(31), CumQty(14), LeavesQty(151) and AvgPx(6) carry the fill arithmetic. A hedge order that a provider refuses therefore comes back as an Execution Report with OrdStatus(39)=8 and, where the provider supplies one, a reason in Text(58).

How FIX writes an FX trade

Volume 7 of the FIX 4.4 specification sets the conventions for foreign exchange. The symbol takes the form CCY1/CCY2, both parts are ISO currency codes, the rate is expressed as CCY2 per unit of CCY1, and the order quantity is denominated in whichever currency the Currency(15) field names. The specification's own example is a sale of 1,000,000 USD for JPY at 105.92, which comes to 105,920,000 JPY; a sale of 50,000,000 JPY for USD at the same rate comes to 472,054.38 USD. The ISO 4217 currency codes themselves are kept by SIX, the official maintenance agency, which publishes the code lists free of charge.

This is where FIX meets the broker's own platform. Trading platforms carry their own symbol names, digits, contract specifications and trading sessions, so each provider's "USD/JPY" has to be mapped to the platform symbol wherever the provider session terminates, typically the bridge or the liquidity aggregation engine. In WxTrade, the platform side of that mapping sits in the back office. The Symbols screen of WxTrade's WconneX CRM lists each platform symbol in its own form, such as USDJPY, with its digits, path, execution type and sector, and the platform's bulk tools apply symbol settings and trading conditions across symbols and account groups.

Where FIX sits in an FX and CFD brokerage

A retail FX and CFD brokerage typically runs two kinds of connection. Clients trade through the trading platform's own terminals and servers, while the broker's dealing side connects outwards to its liquidity providers, and FIX is the common language of that second kind. A bridge or liquidity aggregator holds one or more FIX sessions with each provider, normalises the incoming prices into the platform's book and sends A-book orders out as New Order Single messages, then turns the returning Execution Reports into platform deals and positions.

The phrase "FIX API" covers two different products. On the liquidity side it means the FIX endpoint that a bank, non-bank market maker or prime-of-prime provider opens to brokers. On the client side it means a FIX endpoint that a broker opens to professional or algorithmic clients, so that their own software can trade without the retail terminal. The second is a separate engineering commitment, because every client session needs its own comp IDs, its own sequence state and pre-trade controls in front of the book.

What to agree with a liquidity provider before the first logon

The FIX standard fixes the message format but leaves many choices to the two counterparties. The session standard calls the document that records them the rules of engagement and expects it to be agreed out of band, before any message is exchanged. The two tables below assemble those choices from three primary sources (the FIX session standard and FIX 4.4 specification, the FX Global Code, and the ISO 4217 code list) and work as an onboarding checklist for each new provider. Session terms decide whether the connection stays up; trading terms decide whether what flows over it can be booked correctly.

Session termWhat the standard fixesWhat the broker agrees
Session identityEvery message carries SenderCompID(49) and TargetCompID(56); a mismatch with the Logon values ends the connection.Comp IDs for test and production, and the IP addresses each side will accept.
HeartbeatBoth sides use the same HeartBtInt(108); silence beyond it triggers a Test Request.The interval in seconds and how long to wait before treating the provider as down.
Sequence resetsReset at logon is allowed only by agreement, and the standard names overfills as the risk.When numbers reset, for example at each weekly session start, and which side initiates.
EncryptionFIX over TCP/IP must use FIXS, the TLS profile of the 2020 session standard.TLS settings, or the private network or cross-connect the provider requires.
VersionBeginString(8) names the session profile, such as FIX.4.4 or FIXT.1.1.The version and the provider's dictionary of supported fields.
Trading termWhat the source setsWhat the broker agrees
Price flowFIX 4.4 supports streaming market data (V, W, X) and request-for-quote (R, S).Which flow the provider uses, the market depth, and the order types and time-in-force values it accepts.
Custom tagsTags 20000 to 39999 may be used between two parties without registration.The provider's list of custom tags and what each one means.
SymbolsFX symbols pair two ISO 4217 codes, and quantity follows Currency(15).A mapping from every provider symbol to the platform symbol, including metals and indices.
Last lookFX Global Code Principle 17 asks providers to disclose how price moves affect acceptance, the typical decision time and the purpose.The written disclosure, and how refusals will arrive, normally as an Execution Report with OrdStatus(39)=8.

The last row is where FIX and conduct rules meet. The FX Global Code is maintained by the Global Foreign Exchange Committee and was last updated in December 2024. It describes last look as a final opportunity for the provider to accept or reject a trade request against its quoted price, and it says the practice should be a risk control used to verify validity or price. On a FIX connection, that window sits between the broker's New Order Single and the provider's Execution Report, which is why reject rates and response times per provider belong in any comparison of providers. A wider set of selection criteria is covered in the guide to choosing a forex liquidity provider.

FIX versions and encodings a broker will meet

The FIX Trading Community recommends FIX Latest, which since 2009 has been extended through backward-compatible extension packs rather than new numbered releases, and it continues to support FIX 4.2 and FIX 4.4 for legacy implementations. FIX 5.0 separated the session layer from the application layer, so sessions now identify a session profile in BeginString(8), such as FIX.4.4 or FIXT.1.1, and may name the application version separately in DefaultApplVerID(1137) on the Logon.

The FIX Trading Community describes tag=value as the original and still most widely used encoding of FIX, but the family now includes several others. The FIX technical standards add Simple Binary Encoding (SBE) for high-performance transaction and market data messages, FAST for bandwidth-efficient market data streams, FIXML for derivatives clearing and settlement, and JSON and Google Protocol Buffers for web applications and internal messaging, together with FIXP, a lightweight session protocol for high-performance point-to-point links. Each provider's rules of engagement state which encoding and session protocol its connection uses.

Frequently asked questions

Is FIX over TCP?

Usually, but not by definition. The FIX session standard requires only a transport that delivers messages in order, without loss and in both directions at once, and it describes TCP/IP as widely used and the de facto standard transport for FIX sessions. Where TCP/IP is used, the 2020 standard requires FIXS, which wraps the session in TLS. The FIX Trading Community also lists multicast and WebSockets as transports that can carry FIX business messages.

Is FIX API free?

The protocol is open: the FIX Trading Community publishes the specifications for anyone to implement, and open-source engines exist, such as QuickFIX, which its maintainers describe as free and open source with a liberal licence, in C++, .NET, Go and Java versions. The cost of a FIX API connection sits around the standard rather than in it: the engine or bridge, hosting and network connectivity to the provider, and the provider's own onboarding and conformance testing, plus any commercial terms the provider attaches to FIX access.

What is FIX API?

"FIX API" is the commercial name for a FIX endpoint that one firm opens to another. In practice it consists of a host and port, a pair of comp IDs, a supported FIX version and a rules-of-engagement document listing the messages, fields and custom tags the endpoint accepts. The FIX session standard notes that such rules of engagement can also be published in machine-readable form using FIX Orchestra.

What are the benefits of using FIX API in the trading process?

For a brokerage, the main benefit is reuse. The FIX Trading Community argues that one standard protocol replaced custom point-to-point interfaces, which cut development time, maintenance cost and the risk of vendor lock-in. A bridge that speaks FIX to one provider can be pointed at the next with symbol mapping and custom-tag work rather than a new integration, and the guaranteed sequencing of the session layer means that orders and fills survive a dropped connection.

What is the FIX protocol standard?

It is a family of specifications rather than one document: the application messages, the tag=value encoding, the session layer and the additional encodings and session protocols. Two parts are also international standards. The FIX Trading Community lists the tag=value encoding as ISO 3531-1:2022 and the classic session layer as ISO 3531 Part 2, while Simple Binary Encoding became ISO/IEC 25390:2025. Changes start in member working groups, pass the Global Technical Committee and then go through a public review of two to four weeks before entering the standard.