FIX API Documentation

FIX 4.4/5.0
Table of Contents

FIX API — General Integration Guide

Connect your OMS/EMS to our No Dealing Desk infrastructure over secure FIX 4.4/5.0. This generalized documentation includes non-secret examples, standard flows, and best practices.

Quickstart Guide

1

Request Access

Get SenderCompID/TargetCompID, test/prod IPs, and TLS certificates via Request FIX API Access.

2

Configure FIX Initiator

Set up TLS, session times, and heartbeat intervals.

3

Establish Logon

Send Logon (35=A) with correct sequence numbers and HeartBtInt.

4

Subscribe to Market Data

Send MarketDataRequest (35=V) for snapshot plus incremental refresh.

5

Test Trading

Send test order (35=D) on UAT, receive ExecutionReports (35=8).

6

Validate Recovery

Test resend/sequence recovery and graceful Logout (35=5).

Environments, DNS & TLS

UAT Environment
Testing and integration
Host:fix-uat.ndd.example.com
Port:00000
Protocol:TLS
Production Environment
Live trading
Host:fix.ndd.example.com
Port:00000
Protocol:TLS

Supported FIX Versions

PrimaryFIX 4.4Standard implementation
On RequestFIX 5.0 SP2Compatibility layer available

Custom Tags: Reserved range 8000-8100 for NDD-specific fields.
Deliverables: Sanitized data dictionary (.xml) and message catalog PDF available on request.

Session Management

Logon (A)

Required Tags

8 - BeginString
9 - BodyLength
35=A - MsgType
34 - MsgSeqNum
49 - SenderCompID
56 - TargetCompID
52 - SendingTime (UTC)
98=0 - EncryptMethod
108=30 - HeartBtInt
141=Y - ResetSeqNumFlag (when instructed)
553 - Username (if enabled)
554 - Password (if enabled)

Example Message

8=FIX.4.4|9=000|35=A|34=1|49=YOUR_SENDER|56=NDD_TARGET|52=20250101-12:00:00.000|108=30|553=USERNAME|554=PASSWORD|10=000

Note: Pipes '|' represent SOH (Start of Header) characters

Heartbeat & Test Request

Respond immediately to Test Request (1) with Heartbeat (0) including TestReqID (112).

Resend Request & Sequence Reset

On sequence gap, issue Resend Request (2) with BeginSeqNo/EndSeqNo. We may respond with Sequence Reset (4) GapFillFlag=Y.

Logout (5)

Send reason in Text (58) field where possible. Complete bi-directional logout process.
Session Schedule: 24/5 operation. Daily maintenance windows announced via email/portal. Friday close per market hours.

Market Data

MarketDataRequest (V)

Common Fields

35=V - MsgType
262 - MDReqID
263 - SubscriptionRequestType (0=Snapshot, 1=Snapshot+Updates, 2=Disable)
264 - MarketDepth (1=Top, N=Levels)
265 - MDUpdateType (0=Full, 1=Incremental)
267 - MDEntryTypes (0=Bid, 1=Offer, 2=Trade)
146 - NoRelatedSym
55 - Symbol (EURUSD, XAUUSD, etc.)

Example: Subscribe to EURUSD

8=FIX.4.4|9=000|35=V|34=2|49=YOUR_SENDER|56=NDD_MD|52=20250101-12:00:01.000|262=REQ-1|263=1|264=1|265=1|267=2|269=0|269=1|146=1|55=EURUSD|10=000

Market Data Responses

SnapshotFullRefresh (W)
Initial market data state

Provides complete market data snapshot including current bid/offer prices and sizes.

MarketDataIncrementalRefresh (X)
Real-time updates

Incremental updates with MDEntryID (278), MDUpdateAction (279), MDEntryPx (270), MDEntrySize (271).

Trading Flow

NewOrderSingle (D)

Mandatory Fields

35=D - MsgType
11 - ClOrdID
55 - Symbol
54 - Side (1=Buy, 2=Sell)
38 - OrderQty
40 - OrdType (1=Market, 2=Limit)
59 - TimeInForce (0=Day, 3=IOC, 4=FOK)
60 - TransactTime (UTC)

Optional Fields

44 - Price (for Limit orders)
1 - Account
21 - HandlInst
207 - SecurityExchange
100 - ExDestination
15 - Currency

Example: Market Order IOC

8=FIX.4.4|9=000|35=D|34=10|49=YOUR_SENDER|56=NDD_TRADE|52=20250101-12:00:10.000|11=CL-0001|55=EURUSD|54=1|38=1000000|40=1|59=3|60=20250101-12:00:10.000|10=000

Cancel & Replace Orders

OrderCancelRequest (F)
35=F - MsgType
41 - OrigClOrdID
11 - ClOrdID
55 - Symbol
54 - Side
60 - TransactTime
OrderCancelReplaceRequest (G)
35=G - MsgType
41 - OrigClOrdID
11 - ClOrdID
44 - New Price
38 - New OrderQty
Plus standard order fields

ExecutionReport (8)

ExecType (150) Values

0 - New
1 - Partial Fill
2 - Fill
4 - Cancelled
5 - Replaced
8 - Rejected

OrdStatus (39) Values

0 - New
1 - Partially Filled
2 - Filled
4 - Cancelled
8 - Rejected

Core Fields

37 - OrderID
17 - ExecID
11 - ClOrdID
41 - OrigClOrdID
14 - CumQty
151 - LeavesQty
32 - LastQty
31 - LastPx
6 - AvgPx
58 - Text (reason)

Error Handling & Recovery

Always Handle

  • BusinessMessageReject (35=j) - Application-level issues (e.g., symbol disabled)
  • Reject (35=3) - Session-level issues (malformed messages)
  • Sequence gaps - Issue Resend Request (2)
  • Stale Logon - Coordinate sequence reset
  • MD throttling - Backoff and consolidate subscriptions

Risk Controls & Throttling

Message Rate Limits

  • • Max burst: 50 msgs/sec
  • • Sustained: 20 msgs/sec
  • • Per session basis

Market Data Limits

  • • Max subscriptions: 100 symbols
  • • Aggregate depth limits apply
  • • Throttling on excessive requests

Order Controls

  • • Price banding (dynamic limits)
  • • Max order size per instrument
  • • Notional limits per account

Fair Use Policy

  • • Abusive sessions may be throttled
  • • Contact support for limit adjustments
  • • Monitoring and alerting in place

Symbols, Price & Quantity Conventions

Symbol Formats
FX Spot: EURUSD, GBPUSD, USDJPY
Metals: XAUUSD, XAGUSD
Format: No slashes or separators
Price & Quantity
Price Precision: Up to 5 decimals for FX
Quantity: FX in units (e.g., 1,000,000)
Metals: Per contract specifications
Tick Size: Respect instrument tick size

Code Examples

Configuration
quickfix.cfg
[session]
BeginString=FIX.4.4
SenderCompID=YOUR_SENDER
TargetCompID=NDD_TARGET
SocketConnectHost=fix-uat.ndd.example.com
SocketConnectPort=00000
StartTime=00:00:00
EndTime=23:59:59
HeartBtInt=30
UseDataDictionary=Y
FileStorePath=store/
FileLogPath=log/
ValidateUserDefinedFields=N
SocketUseSSL=Y
SSLProtocols=TLSv1.2,TLSv1.3
New Order Single
Java Code
NewOrderSingle order = new NewOrderSingle();
order.set(new ClOrdID("CL-0001"));
order.set(new Symbol("EURUSD"));
order.set(new Side(Side.BUY));
order.set(new OrderQty(1000000));
order.set(new OrdType(OrdType.MARKET));
order.set(new TimeInForce(TimeInForce.IMMEDIATE_OR_CANCEL));
order.set(new TransactTime(new Date()));

Session.sendToTarget(order, sessionID);

Security & Compliance

Transport Security
  • • TLS 1.2+ only (prefer TLS 1.3)
  • • Mutual authentication where provisioned
  • • Strong cipher suites per hardening policy
  • • Certificate validation required
Access Control
  • • IP allowlisting mandatory
  • • Credentials via secure channels only
  • • No secrets in documentation
  • • Regular access reviews

Change Log & Versioning

CurrentFIX 4.4 (baseline)

Last update: 2025-01-22

Notable Changes

  • • Enhanced TLS configuration requirements
  • • Updated rate limiting guidance
  • • Improved error handling documentation

Upcoming

  • • FIX 5.0 SP2 optional support (in review)
  • • cTrader connector documentation
  • • Enhanced market data depth options

Support & Incidents

Contact Information
API Support Email:
Phone (Urgent):
Status Updates:
When Contacting Support

Please include:

  • • ClOrdID and OrderID (if applicable)
  • • Timestamps in UTC format
  • • Session logs (sanitized)
  • • Market Data ReqID (for MD issues)
  • • Error messages and codes

Glossary

BBO

Best Bid/Offer - Top of book pricing

Gap Fill

SequenceReset(4) with GapFillFlag=Y

IOC/FOK/Day

TimeInForce values for order duration

Last Look

LP right to accept/decline within hold window

Markout

Short-horizon PnL drift post execution

SOR

Smart Order Router for optimal execution

UAT

User Acceptance Testing environment

NDD

No Dealing Desk - A-book execution model

Ready to Get Started?

Request access to our FIX API and start integrating with our No Dealing Desk infrastructure.

Open Demo