Programming Guide
Copyright © 2025
Introduction
The FIX API for Market Data is based on version 4.3 of the FIX protocol. The API is used to receive a real-time market data feed of instruments available for trading on our system. Throughout this document, it is assumed that the client has a general understanding and knowledge of the FIX protocol version 4.3.
NOTE: The FIX Server also supports FIX versions greater than 4.3. In case of version mismatch problems at the client side, please contact us for appropriate configuration so that we may be able to support your specific conditions.
Technical Support
For all kinds of technical support and troubleshooting inquiries, please contact devcenter@koala.markets.
General Considerations
Time Zone
The system uses Coordinated Universal Time (UTC). Clients should handle any time zone conversions that may be required on their side.
Payload Security
The host communicates using SSL-encrypted TCP sockets. No special SSL certificates are needed for now. Clients can use an SSL-enabled FIX initiator/client or use SSL tunneling. The SSL-tunneling functionality is provided by freely available open-source products. In case of additional support or consultancy regarding SSL tunneling, you can contact our technical support team.
IP Filtering
Clients are identified by their IP addresses in the system. To connect, the following prerequisites should be met:
- The static IP set of the client should be cleared at the host.
- The client should use the provided host address and port.
Credentials
To connect to the FIX API host, the client must obtain the following:
- TargetCompId
- SenderCompId
- User Name
- Password
- Price Feed URL (or IP) and Port
- Trading URL (or IP) and Port
Instrument Identification
The system supports the following for identifying an instrument between the client and the host:
- Tag 55 – Symbol: Common, "human understood" representation of the security. If you use "Tag 48 – SecurityID + Tag 22 – SecurityIDSource," then please provide "[N/A]" as the value for Tag 55.
- Tag 48 – SecurityID + Tag 22 - SecurityIDSource: International Securities Identification Number (ISIN) that uniquely identifies a security. Its structure is defined in ISO 6166.
Please contact our technical support team for the latest list of instruments available for trading.
Multi Session
The FIX API is configured to provide two sessions per client, one for price feed and a separate one for order management. Both sessions should be configured to reset sequence numbers on login. Additionally, for price feed sessions, FIX messages should not be persisted to facilitate maximum throughput.
Trading and Price Feed Session Times
Currently, the system provides securities only from Börse Düsseldorf (Quotrix). Börse Düsseldorf working hours for price feeds and trading sessions are as follows:
Price Feed Sessions:
Monday – Friday: 07:00 – 22:05 Germany Time
Trading Sessions:
Monday – Friday: 08:00 – 22:00 Germany Time
Session Administration Messages
Login
The Login message is sent by a client to initiate a FIX session. The Login messages establish the communication session, authenticate the connecting client, and initialize the message sequence numbers. The FIX session login message type "A" should be the first message sent by the FIX API client to the server after establishing a network connection. Note that the password in the client's login message should match the expected value; otherwise, the session will be terminated. The Login message is needed for both Data feed session and trading session.
| Tag | Field Name | Required | Comments |
|---|---|---|---|
| Standard Header | Y | MsgType = Login (A) | |
| 98 | Encrypt Method | Y | Always unencrypted |
| 108 | HeartBtInt | Y | Heartbeat interval in seconds |
| 141 | ResetSeqNumFlag | N | Set to 'Y' to indicate both sides of a FIX session should reset sequence numbers. Must be 'Y' on pricing feed sessions. |
| 553 | Username | Y | |
| 554 | Password | Y | |
| Standard Trailer | Y |
Example Login
8=FIX.4.3 9=133 35=A 34=1 49=TRADE-DEV-DESKTOP-CLIENT 52=20220412-09:54:08.496 56=TRADE 98=0 108=30 141=Y 553=username 554=password 10=215
Heartbeat
Message sent during quiet intervals on the connection to ensure that the connection is still alive.
| Tag | Field Name | Required | Comments |
|---|---|---|---|
| Standard Header | Y | MsgType = Heartbeat (0) | |
| 112 | TestReqId | C | Required when the heartbeat is the result of a test request message |
| Standard Trailer | Y |
Logout
Message used to terminate a FIX connection. Can be sent by the client or the host.
| Tag | Field Name | Required | Comments |
|---|---|---|---|
| Standard Header | Y | MsgType = Logout (5) | |
| 58 | Text | N | |
| Standard Trailer | Y |
Remark: Either a logout message followed by a disconnection, or a disconnection will suffice for logout.
Price Feed Message Types
Session Flow
- API Client submits a Market Data Request
- API will respond initially with Market Data Snapshot
- If a subscription request is supplied, a stream of market data refresh updates will be initiated.
- API Client can cancel an existing subscription by sending another Market Data Request or via termination of the pricing session.
Market Data Request
| Tag | Field Name | Required | Repeat | Comments |
|---|---|---|---|---|
| Standard Header | Y | MsgType = Market Data Request (V) | ||
| 262 | MDReqID | Y | For SubscriptionRequestType = 1, must be a unique ID per subscription. For SubscriptionRequestType = 2, specifies the MDReqID of the previous Market Data Request to disable | |
| 263 | SubscriptionRequestType | Y | Snapshot + Updates (1) Cancel subscription (2) | |
| 264 | MarketDepth | N | Top of Book (1) | |
| 267 | NoMDEntryTypes | Y | Number of MDEntryTypes for the repeating group | |
| 269 | MDEntryType | Y | Repeats | Bid (0) Offer (1) (Both should be specified) |
| 146 | NoRelatedSym | Y | Number of symbols (instruments) requested. One symbol per MarketDataRequest is recommended. | |
| 55 | Symbol | C | Repeats | Either Tag 55 or Tag 48 & 22 should be sent |
| 48 | SecurityID | C | Repeats | Either Tag 55 or Tag 48 & 22 should be sent |
| 22 | SecurityIDSource | C | Repeats | ISIN number (4) Either Tag 55 or Tag 48 & 22 should be sent |
| Standard Trailer | Y |
Market Data Request Reject
| Tag | Field Name | Required | Repeat | Comments |
|---|---|---|---|---|
| Standard Header | Y | MsgType = MarketDataRequestReject (Y) | ||
| 262 | MDReqID | Y | Refers to MDReqID specified on Market Data Request | |
| 281 | MDReqRejReason | Y | Unknown symbol (0) Duplicate MDReqID (1) | |
| 58 | Text | N | Reason of Reject | |
| Standard Trailer | Y |
Market Data Snapshot / Full Refresh
| Tag | Field Name | Required | Repeat | Comments |
|---|---|---|---|---|
| Standard Header | Y | MsgType = MarketDataSnapshotFullRefresh (W) | ||
| 262 | MDReqID | Y | Refers to MDReqID from request | |
| 55 | Symbol | C | Either Tag 55 or Tag 48 & 22 will be sent based on how market data is requested initially. | |
| 48 | SecurityID | C | Either Tag 55 or Tag 48 & 22 will be sent based on how market data is requested initially. | |
| 22 | SecurityIDSource | C | ISIN number (4) Either Tag 55 or Tag 48 & 22 will be sent based on how market data is requested initially. | |
| 268 | NoMDEntries | Y | Number of MDEntries for the repeating group | |
| 269 | MDEntryType | Y | Repeats | Bid (0) Offer (1) |
| 270 | MDEntryPx | Y | Repeats | Number of MDEntryPx for the repeating group |
| 271 | MDEntrySize | N | Repeats | Represents the maximum size available to order at corresponding price. |
| 299 | QuoteEntryID | N | Repeats | Specified for top-of-book only |
| 290 | MDEntryPositionNo | C | Repeats | Specified for Professional variant only (where market depth is supported) |
| Standard Trailer | Y |
Examples
MarketDataRequest – Symbol as Short Code PAH3.DU example - subscribing
Sent to FIX API
MDReqID=262=1649834547887
SubscriptionType=263=1 (Snapshot + Updates subscription)
MarketDepth=264=1 (Top of Book)
Symbol=55=PAH3.DU (Short Code and .DU for the instrument)
NoMDEntryTypes=267=2
There are 2 MDEntryType tags, 269=0 and 269=1 (both)
8=FIX.4.3 9=150 35=V 34=27 49=FXC-CLIENT 52=20220413-07:22:27.901 56=PRICE-FEED 262=1649834547887 263=1 264=1 265=0 266=N 146=1 55=PAH3.DU 267=2 269=0 269=1 10=086
Received from FIX API
Market data will be delivered to client with subsequent messages. Such as:
8=FIX.4.3 9=216 35=W 34=27 49=PRICE-FEED 52=20220413-07:22:34.088 56=FXC-CLIENT 55=PAH3.DU 262=1649834547887 268=2 269=0 270=80.76 271=130 272=20220413273=07:22:30.284 269=1 270=80.78 271=130 272=20220413 273=07:22:30.284 10=247
8=FIX.4.3 9=216 35=W 34=28 49=PRICE-FEED 52=20220413-07:22:34.370 56=FXC-CLIENT 55=PAH3.DU 262=1649834547887 268=2 269=0 270=80.36 271=130 272=20220413273=07:22:32.792 269=1 270=81.18 271=130 272=20220413 273=07:22:32.792 10=245
8=FIX.4.3 9=216 35=W 34=29 49=PRICE-FEED 52=20220413-07:22:36.927 56=FXC-CLIENT 55=PAH3.DU 262=1649834547887 268=2 269=0 270=80.72 271=130 272=20220413273=07:22:35.289 269=1 270=80.74 271=130 272=20220413 273=07:22:35.289 10=009
MarketDataRequest – Short Code PAH3.DU example – canceling subscription
Sent to FIX API
MDReqID=262=1649834547887
SubscriptionType=263=2 (cancel subscription)
MarketDepth=264=1 (Top of Book)
Symbol=55=PAH3.DU (Short Code and .DU for the instrument)
NoMDEntryTypes=267=2
There are 2 MDEntryType tags, 269=0 and 269=1 (both)
8=FIX.4.3 9=150 35=V 34=27 49=FXC-CLIENT 52=20220413-07:40:37.801 56=PRICE-FEED 262=1649834547887 263=2 264=1 265=0 266=N 146=1 55=PAH3.DU 267=2 269=0 269=1 10=086