100 KiB
title, source, fetched_at
| title | source | fetched_at |
|---|---|---|
| FIX API | Binance Open Platform | https://developers.binance.com/docs/binance-spot-api-docs/testnet/fix-api | 2026-02-26T10:38:09.926Z |
FIX API
[!NOTE] This API can only be used with the SPOT Exchange.
General API Information
- FIX connections require TLS encryption. Please either use native TCP+TLS connection or set up a local proxy such as stunnel to handle TLS encryption.
- APIs have a timeout of 10 seconds when processing a request. If a response from the Matching Engine takes longer than this, the API responds with "Timeout waiting for response from backend server. Send status unknown; execution status unknown." (-1007 TIMEOUT)
- This does not always mean that the request failed in the Matching Engine.
- If the status of the request has not appeared in User Data Stream, please perform an API query for its status.
- If your request contains a symbol name containing non-ASCII characters, then the response may contain non-ASCII characters encoded in UTF-8.
FIX sessions only support Ed25519 keys.
You can setup and configure your API key permissions on Spot Test Network.
FIX API Order Entry sessions
- Endpoint is:
tcp+tls://fix-oe.testnet.binance.vision:9000 - Supports placing orders, canceling orders, and querying current limit usage.
- Supports receiving all of the account's ExecutionReport
<8>and List Status<N>. - Only API keys with
FIX_APIare allowed to connect. - QuickFIX Schema can be found here.
FIX API Drop Copy sessions
- Endpoint is:
tcp+tls://fix-dc.testnet.binance.vision:9000 - Supports receiving all of the account's ExecutionReport
<8>and List Status<N>. - Only API keys with
FIX_APIorFIX_API_READ_ONLYare allowed to connect. - QuickFIX Schema can be found here.
- Data in Drop Copy sessions is delayed by 1 second.
FIX API Market Data sessions
- Endpoint is:
tcp+tls://fix-md.testnet.binance.vision:9000 - Supports market data streams and active instruments queries.
- Does not support placing or canceling orders.
- Only API keys with
FIX_APIorFIX_API_READ_ONLYare allowed to connect. - QuickFIX Schema can be found here.
FIX Connection Lifecycle
- All FIX API sessions will remain open for as long as possible, on a best-effort basis.
- There is no minimum connection time guarantee; a server can enter maintenance at any time.
- When a server enters maintenance, a News
<B>message will be sent to clients every 10 seconds for 10 minutes, prompting clients to reconnect. Upon receiving this message, a client is expected to establish a new session and close the old one. If the client does not close the old session within the time frame, the server will proceed to log it out and close the session.
- When a server enters maintenance, a News
- After connecting, the client must send a Logon
<A>request. For more information please refer to How to sign a Logon request. - The client should send a Logout
<5>message to close the session before disconnecting. Failure to send the logout message will result in the session’sSenderCompID (49)being unusable for new session establishment for a duration of 2x theHeartInt (108)interval. - The system allows negotiation of the
HeartInt (108)value during the logon process. Accepted values range between 5 and 60 seconds.- If the server has not sent any messages within a
HeartInt (108)interval, a HeartBeat<0>will be sent. - If the server has not received any messages within a
HeartInt (108)interval, a TestRequest<1>will be sent. If the server does not receive a HeartBeat<0>containing the expectedTestReqID (112)from the client withinHeartInt (108)seconds, the server will send a Logout<5>message and close the connection. - If the client has not received any messages within a
HeartInt (108)interval, the client is responsible for sending a TestRequest<1>to ensure the connection is healthy. Upon receiving such a TestRequest<1>, the server will respond with a Heartbeat<0>containing the expectedTestReqID (112). If the client does not receive the server’s response within aHeartInt (108)interval, the client should close the session and connection and establish new ones.
- If the server has not sent any messages within a
API Key Permissions
To access the FIX API order entry sessions, your API key must be configured with the FIX_API permission.
To access the FIX Drop Copy sessions, your API key must be configured with either FIX_API_READ_ONLY or FIX_API permission.
To access the FIX Market Data sessions, your API key must be configured with either FIX_API or FIX_API_READ_ONLY permission.
FIX sessions only support Ed25519 keys.
On message processing order
The MessageHandling (25035) field required in the initial Logon<A> message controls whether messages from the client may be reordered before they are processed by the Matching Engine.
Mode
Description
UNORDERED(1)
Messages from the client are allowed to be sent to the matching engine in any order.
SEQUENTIAL(2)
Messages from the client are always sent to the matching engine in MsgSeqNum (34) order.
In all modes, the client's MsgSeqNum (34) must increase monotonically, with each subsequent message having a sequence number that is exactly 1 greater than the previous message.
[!TIP]
UNORDERED(1)should offer better performance when there are multiple messages in flight from the client to the server.
Response Mode
By default, all concurrent order entry sessions receive all of the account's successful ExecutionReport<8> and ListStatus<N> messages, including those in response to orders placed from other FIX sessions and via non-FIX APIs.
Use the ResponseMode (25036) field in the initial Logon<A> message to change this behavior.
EVERYTHING(1): The default mode.ONLY_ACKS(2): Receive only ACK messages whether operation succeeded or failed. Disables ExecutionReport push.
Timing Security
- All requests require a
SendingTime(52)field which should be the current timestamp. - An additional optional field,
RecvWindow(25000), specifies for how long the request stays valid in milliseconds.RecvWindow(25000)supports up to three decimal places of precision (e.g., 6000.346) so that microseconds may be specified.- If
RecvWindow(25000)is not specified, it defaults to 5000 milliseconds only for the Logon<A>request. For other requests if unset, the RecvWindow check is not executed. - Maximum
RecvWindow(25000)is 60000 milliseconds.
- Request processing logic is as follows:
serverTime = getCurrentTime()if (SendingTime < (serverTime + 1 second) && (serverTime - SendingTime) <= RecvWindow) { // begin processing request serverTime = getCurrentTime() if (serverTime - SendingTime) <= RecvWindow { // forward request to Matching Engine } else { // reject request } // finish processing request} else { // reject request}
How to sign Logon <A> request
The Logon<A> message authenticates your connection to the FIX API. This must be the first message sent by the client.
- The
Username (553)field is required to contain the API key. - The
RawData (96)field is required to contain a valid signature made with the API key.
The signature payload is a text string constructed by concatenating the values of the following fields in this exact order, separated by the SOH character:
MsgType (35)SenderCompId (49)TargetCompId (56)MsgSeqNum (34)SendingTime (52)
Sign the payload using your private key. Encode the signature with base64. The resulting text string is the value of the RawData (96) field.
Here is a sample Python code implementing the signature algorithm:
import base64from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKeyfrom cryptography.hazmat.primitives.serialization import load_pem_private_keydef logon_raw_data(private_key: Ed25519PrivateKey, sender_comp_id: str, target_comp_id: str, msg_seq_num: str, sending_time: str): """ Computes the value of RawData (96) field in Logon<A> message. """ payload = chr(1).join([ 'A', sender_comp_id, target_comp_id, msg_seq_num, sending_time, ]) signature = private_key.sign(payload.encode('ASCII')) return base64.b64encode(signature).decode('ASCII')with open('private_key.pem', 'rb') as f: private_key = load_pem_private_key(data=f.read(), password=None)raw_data = logon_raw_data(private_key, sender_comp_id='5JQmUOsm', target_comp_id='SPOT', msg_seq_num='1', sending_time='20240612-08:52:21.613')
The values presented below can be used to validate the correctness of the signature computation implementation:
Field
Value
MsgType (35)
A
SenderCompID (49)
EXAMPLE
TargetCompID (56)
SPOT
MsgSeqNum (34)
1
SendingTime (52)
20240627-11:17:25.223
The Ed25519 private key used in the example computation is shown below:
[!CAUTION] The following secret key is provided solely for illustrative purposes. Do not use this key in any real-world application as it is not secure and may compromise your cryptographic implementation. Always generate your own unique and secure keys for actual use.
-----BEGIN PRIVATE KEY-----MC4CAQAwBQYDK2VwBCIEIIJEYWtGBrhACmb9Dvy+qa8WEf0lQOl1s4CLIAB9m89u-----END PRIVATE KEY-----
Computed signature:
4MHXelVVcpkdwuLbl6n73HQUXUf1dse2PCgT1DYqW9w8AVZ1RACFGM+5UdlGPrQHrgtS3CvsRURC1oj73j8gCA==
Resulting Logon <A> message:
8=FIX.4.4|9=247|35=A|34=1|49=EXAMPLE|52=20240627-11:17:25.223|56=SPOT|95=88|96=4MHXelVVcpkdwuLbl6n73HQUXUf1dse2PCgT1DYqW9w8AVZ1RACFGM+5UdlGPrQHrgtS3CvsRURC1oj73j8gCA==|98=0|108=30|141=Y|553=sBRXrJx2DsOraMXOaUovEhgVRcjOvCtQwnWj8VxkOh1xqboS02SPGfKi2h8spZJb|25035=2|10=227|
Limits
Message Limits
- Each connection has a limit on how many messages can be sent to the exchange.
- The message limit does not count the messages sent in response to the client.
- Breaching the message limit results in immediate Logout
<5>and disconnection. - To understand current limits and usage, please send a LimitQuery
<XLQ>message. A LimitResponse<XLR>message will be sent in response, containing information about Order Rate Limits and Message Limits. - FIX Order entry sessions have a limit of 10,000 messages every 10 seconds.
- FIX Drop Copy sessions have a limit of 60 messages every 60 seconds.
- FIX Market Data sessions have a limit of 2000 messages every 60 seconds.
Connection Limits
- Each Account has a limit on how many TCP connections can be established at the same time.
- The limit is reduced when the TCP connection is closed. If the reduction of connections is not immediate, please wait up to twice the value of
HeartBtInt (108)for the change to take effect. For example, if the current value ofHeartBtIntis 5, please wait up to 10 seconds. - Upon breaching the limit a Reject
<3>will be sent containing information about the connection limit breach and the current limit. - FIX Order Entry limits:
- 15 connection attempts within 30 seconds
- Maximum of 10 concurrent TCP connections per account
- FIX Drop Copy limits:
- 15 connection attempts within 30 seconds
- Maximum of 10 concurrent TCP connections per account
- FIX Market Data limits
- 300 connection attempts within 300 seconds
- Maximum of 100 concurrent TCP connections per account
- A single connection can listen to a maximum of 1000 streams.
Unfilled Order Count
- To understand how many orders you have placed within a certain time interval, please send a LimitQuery
<XLQ>message. A LimitResponse<XLR>message will be sent in response, containing information about Unfilled Order Count and Message Limits. - Please note that if your orders are consistently filled by trades, you can continuously place orders on the API. For more information, please see Spot Unfilled Order Count Rules.
- If you exceed the unfilled order count your message will be rejected, and information will be transferred back to you in a reject message specific to that endpoint.
- The number of unfilled orders is tracked for each account.
Error Handling
Client messages that contain syntax errors, missing required fields, or refer to unknown symbols will be rejected by the server with a Reject <3> message.
If a valid message cannot be processed and is rejected, an appropriate reject response will be sent. Please refer to the individual message documentation for possible responses.
Please refer to the Text (58) and ErrorCode (25016) fields in responses for the reject reason.
The list of error codes can be found on the Error codes page.
Types
Only printable ASCII characters and SOH are supported.
Type
Description
BOOLEAN
Enum: Y or N.
CHAR
Single character.
INT
Signed 64-bit integer.
LENGTH
Unsigned 64-bit integer.
NUMINGROUP
Unsigned 64-bit integer.
PRICE
Fixed-point number. Precision depends on the symbol definition.
QTY
Fixed-point number. Precision depends on the symbol definition.
SEQNUM
Unsigned 32-bit integer. Rolls over to 0 after reaching its maximum value of 4,294,967,295.
STRING
Sequence of printable ASCII characters.
UTCTIMESTAMP
String representing datetime in UTC.
Supported UTCTIMESTAMP formats:
20011217-09:30:47- seconds20011217-09:30:47.123- milliseconds20011217-09:30:47.123456- microseconds (always used in messages from the exchange)
Client order ID fields must conform to the regex ^[a-zA-Z0-9-_]{1,36}$:
ClOrdID (11)OrigClOrdID (41)MDReqID (262)ClListID (25014)OrigClListID (25015)CancelClOrdID (25034)
Message Components
[!NOTE] In example messages, the
|character is used to represent SOH character:
8=FIX.4.4|9=113|35=A|34=1|49=SPOT|52=20240612-08:52:21.636837|56=5JQmUOsm|98=0|108=30|25037=4392a152-3481-4499-921a-6d42c50702e2|10=051|
Header
Appears at the start of every message.
Tag
Name
Type
Required
Description
8
BeginString
STRING
Y
Always FIX.4.4.
Must be the first field the message.
9
BodyLength
LENGTH
Y
Message length in bytes.
Must be the second field in the message.
35
MsgType
STRING
Y
Must be the third field in the message.
Possible values:
0 - HEARTBEAT
1 - TEST_REQUEST
3 - REJECT
5 - LOGOUT
8 - EXECUTION_REPORT
A - LOGON
D - NEW_ORDER_SINGLE
E - NEW_ORDER_LIST
N - LIST_STATUS
XCN - ORDER_CANCEL_REQUEST_AND_NEW_ORDER_SINGLE
XLQ - LIMIT_QUERY
XLR - LIMIT_RESPONSE
B - NEWS
y - INSTRUMENT_LIST
Y - MARKET_DATA_REQUEST_REJECT
X - MARKET_DATA_INCREMENTAL_REFRESH
XAK - ORDER_AMEND_KEEP_PRIORITY_REQUEST
XAR - ORDER_AMEND_REJECT
49
SenderCompID
STRING
Y
Must be unique across an account's active sessions.
Must obey regex: ^[a-zA-Z0-9-_]{1,8}$
56
TargetCompID
STRING
Y
A string identifying this TCP connection.
On messages from client required to be set to SPOT.
Must be unique across TCP connections.
Must conform to the regex: ^[a-zA-Z0-9-_]{1,8}$
34
MsgSeqNum
SEQNUM
Y
Integer message sequence number.
Values that will cause a gap will be rejected.
52
SendingTime
UTCTIMESTAMP
Y
Time of message transmission (always expressed in UTC).
25000
RecvWindow
FLOAT
N
Number of milliseconds after SendingTime (52) the request is valid for.
Defaults to 5000 milliseconds in Logon<A> and has a max value of 60000 milliseconds.
Supports up to three decimal places of precision (e.g., 6000.346) so that microseconds may be specified.
Trailer
Appears at the end of every message.
Tag
Name
Type
Required
Description
10
CheckSum
STRING
Y
Always three-character numeric string, calculated by summing the ASCII values of each preceding character in the message, including start-of-header (SOH) characters.
The resultant sum is divided by 256, with the remainder forming the CheckSum value.
To maintain a fixed length, the CheckSum field is right-justified and zero-padded as needed.
Administrative Messages
Heartbeat <0>
Sent by the server if there is no outgoing traffic during the heartbeat interval (HeartBtInt (108) in Logon<A>).
Sent by the client to indicate that the session is healthy.
Sent by the client or the server in response to a TestRequest<1> message.
Tag
Name
Type
Required
Description
112
TestReqID
STRING
N
When Heartbeat<35> is sent in response to TestRequest<1>, must mirror the value in TestRequest<1>.
TestRequest <1>
Sent by the server if there is no incoming traffic during the heartbeat interval (HeartBtInt (108) in Logon<A>).
Sent by the client to request a Heartbeat<0> response.
[!NOTE] If the client does not respond to TestRequest
<1>with Heartbeat<0>with a correctTestReqID (112)within timeout, the connection will be dropped.
Tag
Name
Type
Required
Description
112
TestReqID
STRING
Y
Arbitrary string that must be included in the Heartbeat<0> response.
Reject <3>
Sent by the server in response to an invalid message that cannot be processed.
Sent by the server if a new connection cannot be accepted. Please refer to Connection Limits.
Please refer to the Text (58) and ErrorCode (25016) fields for the reject reason.
Tag
Name
Type
Required
Description
45
RefSeqNum
INT
N
The MsgSeqNum (34) of the rejected message that caused issuance of this Reject<3>.
371
RefTagID
INT
N
When present, identifies the field that directly caused the issuance of this Reject<3> message.
372
RefMsgType
STRING
N
The MsgType (35) of the rejected message that caused issuance of this Reject<3>.
373
SessionRejectReason
INT
N
A reason for the reject, can be one of the values below.
Usually accompanied by additional Text description
Possible values:
0- INVALID_TAG_NUMBER
1 - REQUIRED_TAG_MISSING
2 - TAG_NOT_DEFINED_FOR_THIS_MESSAGE_TYPE
3 - UNDEFINED_TAG
5 - VALUE_IS_INCORRECT
6 - INCORRECT_DATA_FORMAT_FOR_VALUE
8 - SIGNATURE_PROBLEM
10 - SENDINGTIME_ACCURACY_PROBLEM
12 - XML_VALIDATION_ERROR
13 - TAG_APPEARS_MORE_THAN_ONCE
14 - TAG_SPECIFIED_OUT_OF_REQUIRED_ORDER
15 - REPEATING_GROUP_FIELDS_OUT_OF_ORDER
16 - INCORRECT_NUMINGROUP_COUNT_FOR_REPEATING_GROUP
99 - OTHER
25016
ErrorCode
INT
N
API error code (see Error Codes).
58
Text
STRING
N
Human-readable error message.
Logon <A>
Sent by the client to authenticate the connection. Logon<A> must be the first message sent by the client.
Sent by the server in response to a successful logon.
[!NOTE] Logon
<A>can only be sent once for the entirety of the session.
Logon Request
Tag
Name
Type
Required
Description
98
EncryptMethod
INT
Y
Required to be 0.
108
HeartBtInt
INT
Y
Required to be within range [5, 60]. Heartbeat interval in seconds.
95
RawDataLength
LENGTH
Y
Length of the RawData (96) field that comes strictly after this field.
96
RawData
DATA
Y
Signature. How to sign Logon<A> request.
141
ResetSeqNumFlag
BOOLEAN
Y
Required to be Y.
553
Username
STRING
Y
API key. Only Ed25519 API keys are supported.
25035
MessageHandling
INT
Y
Possible values:
1 - UNORDERED
2 - SEQUENTIAL
Please refer to On message order processing for more information.
25036
ResponseMode
INT
N
Please refer to Response Mode.
9406
DropCopyFlag
BOOLEAN
N
Must be set to 'Y' when logging into Drop Copy sessions.
Sample message:
8=FIX.4.4|9=248|35=A|34=1|49=5JQmUOsm|52=20240612-08:52:21.613|56=SPOT|95=88|96=KhJLbZqADWknfTAcp0ZjyNz36Kxa4ffvpNf9nTIc+K5l35h+vA1vzDRvLAEQckyl6VDOwJ53NOBnmmRYxQvQBQ==|98=0|108=30|141=Y|553=W5rcOD30c0gT4jHK8oX5d5NbzWoa0k4SFVoTHIFNJVZ3NuRpYb6ZyJznj8THyx5d|25035=1|10=000|
Logon Response
Tag
Name
Type
Required
Description
98
EncryptMethod
INT
Y
Always 0.
108
HeartBtInt
INT
Y
Mirrors value from the Logon request.
25037
UUID
STRING
Y
UUID of the FIX API serving the requests.
Sample message:
8=FIX.4.4|9=113|35=A|34=1|49=SPOT|52=20240612-08:52:21.636837|56=5JQmUOsm|98=0|108=30|25037=4392a152-3481-4499-921a-6d42c50702e2|10=051|
Logout <5>
Sent to initiate the process of closing the connection, and also when responding to Logout.
Tag
Name
Type
Required
Description
58
Text
STRING
N
Sample messages:
Logout Request
8=FIX.4.4|9=55|35=5|34=3|49=GhQHzrLR|52=20240611-09:44:25.543|56=SPOT|10=249|
Logout Response
8=FIX.4.4|9=84|35=5|34=4|49=SPOT|52=20240611-09:44:25.544001|56=GhQHzrLR|58=Logout acknowledgment.|10=212|
News <B>
When the server enters maintenance, a News message will be sent to clients every 10 seconds for 10 minutes. After this period, clients will be logged out and their sessions will be closed.
Upon receiving this message, clients are expected to establish a new session and close the old one.
The countdown message sent will be:
You'll be disconnected in %d seconds. Please reconnect.
When there are 10 seconds remaining, the following message will be sent:
Your connection is about to be closed. Please reconnect.
If the client does not close the old session within 10 seconds of receiving the above message, the server will log it out and close the session.
Tag
Name
Type
Required
Description
148
Headline
STRING
Y
Sample message:
8=FIX.4.4|9=0000113|35=B|49=SPOT|56=OE|34=4|52=20240924-21:07:35.773537|148=Your connection is about to be closed. Please reconnect.|10=165|
Resend Request <2>
Resend requests are currently not supported.
Application Messages
Order Entry Messages
[!NOTE] The messages below can only be used for the FIX Order Entry and FIX Drop Copy Sessions.
NewOrderSingle <D>
Sent by the client to submit a new order for execution.
This adds 1 order to the EXCHANGE_MAX_ORDERS filter and the MAX_NUM_ORDERS filter.
Unfilled Order Count: 1
Please refer to Supported Order Types for supported field combinations.
[!NOTE] Many fields become required based on the order type. Please refer to Supported Order Types.
Tag
Name
Type
Required
Description
11
ClOrdID
STRING
Y
ClOrdID to be assigned to the order.
38
OrderQty
QTY
N
Quantity of the order
40
OrdType
CHAR
Y
See the table to understand supported order types and the required fields to use them.
Possible values:
1 - MARKET
2 - LIMIT
3 - STOP
4 - STOP_LIMIT
P- PEGGED
18
ExecInst
CHAR
N
Possible values:
6 - PARTICIPATE_DONT_INITIATE
44
Price
PRICE
N
Price of the order
54
Side
CHAR
Y
Side of the order.
Possible values:
1 - BUY
2 - SELL
55
Symbol
STRING
Y
Symbol to place the order on.
59
TimeInForce
CHAR
N
Possible values:
1 - GOOD_TILL_CANCEL
3 - IMMEDIATE_OR_CANCEL
4 - FILL_OR_KILL
111
MaxFloor
QTY
N
Used for iceberg orders, this specifies the visible quantity of the order on the book.
152
CashOrderQty
QTY
N
Quantity of the order specified in the quote asset units, for reverse market orders.
847
TargetStrategy
INT
N
The value cannot be less than 1000000.
7940
StrategyID
INT
N
25001
SelfTradePreventionMode
CHAR
N
Possible values:
1 - NONE
2 - EXPIRE_TAKER
3 - EXPIRE_MAKER
4 - EXPIRE_BOTH
5 - DECREMENT
6 - TRANSFER
211
PegOffsetValue
FLOAT
N
Amount added to the peg in the context of the PegOffsetType
1094
PegPriceType
CHAR
N
Defines the type of peg
Possible values:
4 - MARKET_PEG
5 - PRIMARY_PEG
835
PegMoveType
CHAR
N
Describes whether peg is fixed or floats. Required for Pegged Orders and must be set to 1 (FIXED)
836
PegOffsetType
CHAR
N
Type of price peg offset.
Possible values:
3 - PRICE_TIER
1100
TriggerType
CHAR
N
Possible values: 4 - PRICE_MOVEMENT
1101
TriggerAction
CHAR
N
Possible values:
1 - ACTIVATE
1102
TriggerPrice
PRICE
N
Activation price for contingent orders. See table
1107
TriggerPriceType
CHAR
N
Possible values:
2 - LAST_TRADE
1109
TriggerPriceDirection
CHAR
N
Used to differentiate between StopLoss and TakeProfit orders. See table.
Possible values:
U - TRIGGER_IF_THE_PRICE_OF_THE_SPECIFIED_TYPE_GOES_UP_TO_OR_THROUGH_THE_SPECIFIED_TRIGGER_PRICE
D - TRIGGER_IF_THE_PRICE_OF_THE_SPECIFIED_TYPE_GOES_DOWN_TO_OR_THROUGH_THE_SPECIFIED_TRIGGER_PRICE
25009
TriggerTrailingDeltaBips
INT
N
Provide to create trailing orders.
25032
SOR
BOOLEAN
N
Whether to activate SOR for this order.
Sample message:
8=FIX.4.4|9=114|35=D|34=2|49=qNXO12fH|52=20240611-09:01:46.228|56=SPOT|11=1718096506197867067|38=5|40=2|44=10|54=1|55=LTCBNB|59=4|10=016|
Response:
- ExecutionReport
<8>withExecType (150)valueNEW (0)if the order was accepted. - ExecutionReport
<8>withExecType (150)valueREJECTED (8)if the order was rejected. - Reject
<3>if the message is rejected.
Supported Order Types
Order name
Binance OrderType
Side
required field values
required fields with user values
Market order
MARKET
BUY or SELL
40=1|
Limit order
LIMIT
BUY or SELL
40=2|
Limit maker order
LIMIT_MAKER
BUY or SELL
40=2|18=6|
Buy stop loss order
STOP_LOSS
BUY
40=3|1100=4|1101=1|1107=2|1109=U|
1102
Buy trailing stop loss order
STOP_LOSS
BUY
40=3|1100=4|1101=1|1107=2|1109=U|
1102,25009
Buy stop loss limit order
STOP_LOSS_LIMIT
BUY
40=4|1100=4|1101=1|1107=2|1109=U|
1102
Buy trailing stop loss limit order
STOP_LOSS_LIMIT
BUY
40=4|1100=4|1101=1|1107=2|1109=U|
1102,25009
Sell stop loss order
STOP_LOSS
SELL
40=3|1100=4|1101=1|1107=2|1109=D|
1102
Sell trailing stop loss order
STOP_LOSS
SELL
40=3|1100=4|1101=1|1107=2|1109=D|
1102,25009
Sell stop loss limit order
STOP_LOSS_LIMIT
SELL
40=4|1100=4|1101=1|1107=2|1109=D|
1102
Sell trailing stop loss limit order
STOP_LOSS_LIMIT
SELL
40=4|1100=4|1101=1|1107=2|1109=D|
1102,25009
Buy take profit order
TAKE_PROFIT
BUY
40=3|1100=4|1101=1|1107=2|1109=D|
1102
Buy trailing take profit order
TAKE_PROFIT
BUY
40=3|1100=4|1101=1|1107=2|1109=D|
1102,25009
Buy trailing take profit order
TAKE_PROFIT
BUY
40=3|1100=4|1101=1|1107=2|
25009
Buy take profit order
TAKE_PROFIT_LIMIT
BUY
40=4|1100=4|1101=1|1107=2|1109=D|
1102
Buy trailing take profit limit order
TAKE_PROFIT_LIMIT
BUY
40=4|1100=4|1101=1|1107=2|1109=D|
1102,25009
Buy trailing take profit limit order
TAKE_PROFIT_LIMIT
BUY
40=4|1100=4|1101=1|1107=2|
25009
Sell take profit order
TAKE_PROFIT
SELL
40=3|1100=4|1101=1|1107=2|1109=U|
1102
Sell trailing take profit order
TAKE_PROFIT
SELL
40=3|1100=4|1101=1|1107=2|1109=U|
1102,25009
Sell trailing take profit order
TAKE_PROFIT
SELL
40=3|1100=4|1101=1|1107=2|
25009
Sell take profit limit order
TAKE_PROFIT_LIMIT
SELL
40=4|1100=4|1101=1|1107=2|1109=U|
1102
Sell trailing take profit limit order
TAKE_PROFIT_LIMIT
SELL
40=4|1100=4|1101=1|1107=2|1109=U|
1102,25009
Sell trailing take profit limit order
TAKE_PROFIT_LIMIT
SELL
40=4|1100=4|1101=1|1107=2|
25009
Required fields based on Binance OrderType:
Binance OrderType
Additional mandatory parameters
Additional Information
LIMIT
38, 44, 59
MARKET
38 OR 152
MARKET orders using the OrderQty (38) field specifies the amount of the base asset the user wants to buy or sell at the market price.
E.g. MARKET order on BTCUSDT will specify how much BTC the user is buying or selling.
MARKET orders using quoteOrderQty specifies the amount the user wants to spend (when buying) or receive (when selling) the quote asset; the correct quantity will be determined based on the market liquidity and quoteOrderQty.
E.g. Using the symbol BTCUSDT:
BUY side, the order will buy as many BTC as quoteOrderQty USDT can.
SELL side, the order will sell as much BTC needed to receive CashOrderQty (152) USDT.
STOP_LOSS
38, 1102 or 25009
This will execute a MARKET order when the conditions are met. (e.g. TriggerPrice (1102) is met or TriggerTrailingDeltaBips (25009) is activated)
STOP_LOSS_LIMIT
38, 44, 59, 1102 or 25009
TAKE_PROFIT
38, 1102 or 25009
This will execute a MARKET order when the conditions are met. (e.g. TriggerPrice (1102) is met or TriggerTrailingDeltaBips (25009) is activated)
TAKE_PROFIT_LIMIT
38, 44, 59, 1102 or 25009
LIMIT_MAKER
38, 44
This is a LIMIT order that will be rejected if the order immediately matches and trades as a taker.
This is also known as a POST-ONLY order.
ExecutionReport <8>
Sent by the server whenever an order state changes.
[!NOTE]
- By default, ExecutionReport
<8>is sent for all orders of an account, including those submitted in different connections. Please see Response Mode for other behavior options.- FIX API should give better performance for ExecutionReport
<8>push.
Tag
Name
Type
Required
Description
17
ExecID
STRING
N
Omitted on rejected orders.
11
ClOrdID
STRING
N
ClOrdID of the list as assigned on the request.
41
OrigClOrdID
STRING
N
Original ClOrdID of the order.
37
OrderID
INT
N
Assigned by exchange.
38
OrderQty
QTY
N
Quantity of the order.
40
OrdType
CHAR
Y
Possible values:
1 - MARKET
2 - LIMIT
3 - STOP_LOSS
4 - STOP_LIMIT
P - PEGGED
54
Side
CHAR
Y
Possible values:
1 - BUY
2 - SELL
55
Symbol
STRING
Y
Symbol of the order.
18
ExecInst
CHAR
N
Possible values:
6 - PARTICIPATE_DONT_INITIATE
44
Price
PRICE
N
Price of the order.
59
TimeInForce
CHAR
N
Possible values:
1 - GOOD_TILL_CANCEL
3 - IMMEDIATE_OR_CANCEL
4 - FILL_OR_KILL
60
TransactTime
UTCTIMESTAMP
N
Timestamp when this event occurred.
25018
OrderCreationTime
INT
N
111
MaxFloor
QTY
N
Appears on iceberg orders.
66
ListID
STRING
N
Appears on list orders.
152
CashOrderQty
QTY
N
OrderQty specified in the quote asset units.
847
TargetStrategy
INT
N
TargetStrategy (847) from the order placement request.
7940
StrategyID
INT
N
StrategyID (7940) from the order placement request.
25001
SelfTradePreventionMode
CHAR
N
Possible values:
1 - NONE
2 - EXPIRE_TAKER
3 - EXPIRE_MAKER
4 - EXPIRE_BOTH
5 - DECREMENT
6 - TRANSFER
150
ExecType
CHAR
Y
Note: Field PreventedMatchID(25024) will be present if order has expired due to SelfTradePreventionMode(25013)
Possible values:
0 - NEW
4 - CANCELED
5 - REPLACED
8 - REJECTED
F - TRADE
C - EXPIRED
14
CumQty
QTY
Y
Total number of base asset traded on this order.
151
LeavesQty
QTY
N
Quantity remaining for further execution.
25017
CumQuoteQty
QTY
N
Total number of quote asset traded on this order.
1057
AggressorIndicator
BOOLEAN
N
Appears on trade execution reports.
Indicates whether the order was a taker in the trade.
1003
TradeID
STRING
N
Appears on trade execution reports.
31
LastPx
PRICE
N
The price of the last execution.
32
LastQty
QTY
Y
The quantity of the last execution.
39
OrdStatus
CHAR
Y
Possible values:
0 - NEW
1 - PARTIALLY_FILLED
2 - FILLED
4 - CANCELED 6 - PENDING_CANCEL
8 - REJECTED
A - PENDING_NEW
C - EXPIRED
Note that FIX does not support EXPIRED_IN_MATCH status, and get converted to EXPIRED in FIX.
70
AllocID
INT
N
Allocation ID as assigned by the exchange.
574
MatchType
INT
N
Possible values:
1 - ONE_PARTY_TRADE_REPORT
4 - AUTO_MATCH
25021
WorkingFloor
INT
N
Appears for orders that potentially have allocations.
25022
TrailingTime
UTCTIMESTAMP
N
Appears only for trailing stop orders.
636
WorkingIndicator
BOOLEAN
N
Set to Y when this order enters order book.
25023
WorkingTime
UTCTIMESTAMP
N
When this order appeared on the order book.
25024
PreventedMatchID
INT
N
Appears only for orders that expired due to STP.
25025
PreventedExecutionPrice
PRICE
N
Appears only for orders that expired due to STP.
25026
PreventedExecutionQty
QTY
N
Appears only for orders that expired due to STP.
25027
TradeGroupID
INT
N
Appears only for orders that expired due to STP.
25028
CounterSymbol
STRING
N
Appears only for orders that expired due to STP.
25029
CounterOrderID
INT
N
Appears only for orders that expired due to STP.
25030
PreventedQty
QTY
N
Appears only for orders that expired due to STP.
25031
LastPreventedQty
QTY
N
Appears only for orders that expired due to STP.
25032
SOR
BOOLEAN
N
Appears for orders that used SOR.
25016
ErrorCode
INT
N
API error code (see Error Codes).
58
Text
STRING
N
Human-readable error message.
136
NoMiscFees
NUMINGROUP
N
Number of repeating groups of miscellaneous fees.
=>137
MiscFeeAmt
QTY
Y
Amount of fees denominated in MiscFeeCurr(138) asset
=>138
MiscFeeCurr
STRING
Y
Currency of miscellaneous fee.
=>139
MiscFeeType
INT
Y
Possible values:
4 - EXCHANGE_FEES
1100
TriggerType
CHAR
N
Possible values:
4 - PRICE_MOVEMENT
1101
TriggerAction
CHAR
N
Possible values:
1 - ACTIVATE
1102
TriggerPrice
PRICE
N
Activation price for contingent orders. See table
1107
TriggerPriceType
CHAR
N
Possible values:
2 - LAST_TRADE
1109
TriggerPriceDirection
CHAR
N
Used to differentiate between StopLoss and TakeProfit orders. See table.
Possible values:
U - TRIGGER_IF_THE_PRICE_OF_THE_SPECIFIED_TYPE_GOES_UP_TO_OR_THROUGH_THE_SPECIFIED_TRIGGER_PRICE
D - TRIGGER_IF_THE_PRICE_OF_THE_SPECIFIED_TYPE_GOES_DOWN_TO_OR_THROUGH_THE_SPECIFIED_TRIGGER_PRICE
25009
TriggerTrailingDeltaBips
INT
N
Appears only for trailing stop orders.
211
PegOffsetValue
FLOAT
N
Amount added to the peg in the context of the PegOffsetType
1094
PegPriceType
CHAR
N
Defines the type of peg
Possible values:
4 - MARKET_PEG
5 - PRIMARY_PEG
835
PegMoveType
CHAR
N
Describes whether peg is fixed or floats. Required for Pegged Orders and must be set to 1 (FIXED)
836
PegOffsetType
CHAR
N
Type of price peg offset.
Possible values:
3 - PRICE_TIER
839
PeggedPrice
PRICE
N
Current price the order is pegged at
Sample message:
8=FIX.4.4|9=330|35=8|34=2|49=SPOT|52=20240611-09:01:46.228950|56=qNXO12fH|11=1718096506197867067|14=0.00000000|17=144|32=0.00000000|37=76|38=5.00000000|39=0|40=2|44=10.00000000|54=1|55=LTCBNB|59=4|60=20240611-09:01:46.228000|150=0|151=5.00000000|636=Y|1057=Y|25001=1|25017=0.00000000|25018=20240611-09:01:46.228000|25023=20240611-09:01:46.228000|10=095|
OrderCancelRequest <F>
Sent by the client to cancel an order or an order list.
- To cancel an order either
OrderID (11)orOrigClOrdID (41)are required.- If both
OrderID (37)andOrigClOrdID (41)are provided, theOrderIDis searched first, then theOrigClOrdIDfrom that result is checked against that order. If both conditions are not met the request will be rejected.
- If both
- To cancel an order list either
ListID (66)orOrigClListID (25015)are required.- If both
ListID (66)andOrigClListID (25015)are provided, theListIDis searched first, then theOrigClListIDfrom that result is checked against that order. If both conditions are not met the request will be rejected.
- If both
If the canceled order is part of an order list, the entire list will be canceled.
Note:
- The performance for canceling an order (single cancel or as part of a cancel-replace) is always better when only
orderIdis sent. SendingorigClientOrderIdor bothorderId+origClientOrderIdwill be slower.
Tag
Name
Type
Required
Description
11
ClOrdID
STRING
Y
ClOrdID of this request.
41
OrigClOrdID
STRING
N
ClOrdID (11) of the order to cancel.
37
OrderID
INT
N
OrderID (37) of the order to cancel.
25015
OrigClListID
STRING
N
ClListID (25014) of the order list to cancel.
66
ListID
STRING
N
ListID (66) of the order list to cancel.
55
Symbol
STRING
Y
Symbol on which to cancel order.
25002
CancelRestrictions
INT
N
Restrictions on the cancel. Possible values:
1 - ONLY_NEW
2 - ONLY_PARTIALLY_FILLED
Sample message:
8=FIX.4.4|9=93|35=F|34=2|49=ieBwvCKy|52=20240613-01:11:13.784|56=SPOT|11=1718241073695674483|37=2|55=LTCBNB|10=210|
Response:
- ExecutionReport
<8>withExecType (150)valueCANCELED (4)for each canceled order. - ListStatus
<N>if orders in an order list were canceled. - OrderCancelReject
<9>if cancellation was rejected. - Reject
<3>if the message is rejected.
OrderCancelReject <9>
Sent by the server when OrderCancelRequest<F> has failed.
Tag
Name
Type
Required
Description
11
ClOrdID
STRING
Y
ClOrdID (11) of the cancel request.
41
OrigClOrdID
STRING
N
OrigClOrdID (41) from the cancel request.
37
OrderID
INT
N
OrderID (37) from the cancel request.
25015
OrigClListID
STRING
N
OrigClListID (25015) from the cancel request.
66
ListID
STRING
N
ListID (66) from the cancel request.
55
Symbol
STRING
Y
Symbol (55) from the cancel request.
25002
CancelRestrictions
INT
N
CancelRestrictions (25002) from the cancel request.
434
CxlRejResponseTo
CHAR
Y
Type of request that this OrderCancelReject<9> is in response to.
Possible values:
1 - ORDER_CANCEL_REQUEST
25016
ErrorCode
INT
Y
API error code (see Error Codes).
58
Text
STRING
Y
Human-readable error message.
Sample message:
8=FIX.4.4|9=137|35=9|34=2|49=SPOT|52=20240613-01:12:41.320869|56=OlZb8ht8|11=1718241161272843932|37=2|55=LTCBNB|58=Unknown order sent.|434=1|25016=-1013|10=087|
OrderCancelRequestAndNewOrderSingle <XCN>
Sent by the client to cancel an order and submit a new one for execution.
- To cancel an order either
OrderID (11)orOrigClOrdId (41)are required. - If both
OrderID (37)andOrigClOrdID (41)are provided, theOrderIDis searched first, then theOrigClOrdIDfrom that result is checked against that order. If both conditions are not met the request will be rejected.
Filters and Order Count are evaluated before the processing of the cancellation and order placement occurs.
A new order that was not attempted (i.e. when newOrderResult: NOT_ATTEMPTED), will still increase the unfilled order count by 1.
Unfilled Order Count: 1
Please refer to Supported Order Types for supported field combinations when describing the new order.
[!NOTE] Cancel is always processed first. Then immediately after that the new order is submitted.
Tag
Name
Type
Required
Description
25033
OrderCancelRequestAndNewOrderSingleMode
INT
Y
What action should be taken if cancel fails.
Possible values:
1 - STOP_ON_FAILURE
2 - ALLOW_FAILURE
25038
OrderRateLimitExceededMode
INT
N
What should be done to the cancellation request if you exceed the unfilled order rate limit.
Possible values: 1 - DO_NOTHING
2 - CANCEL_ONLY
37
OrderID
INT
N
OrderID of the order to cancel.
25034
CancelClOrdID
STRING
N
ClOrdID of the cancel.
41
OrigClOrdID
STRING
N
ClOrdID of the order to cancel.
11
ClOrdID
STRING
Y
ClOrdID to be assigned to the new order.
25002
CancelRestrictions
INT
N
Restrictions on the cancel. Possible values:
1 - ONLY_NEW
2 - ONLY_PARTIALLY_FILLED
38
OrderQty
QTY
N
Quantity of the new order
40
OrdType
CHAR
Y
See the table to understand supported order types and the required fields to use them.
Possible values:
1 - MARKET
2 - LIMIT
3 - STOP
4 - STOP_LIMIT
P - PEGGED
18
ExecInst
CHAR
N
Possible values:
6 - PARTICIPATE_DONT_INITIATE
44
Price
PRICE
N
Price of the new order
54
Side
CHAR
Y
Side of the order.
Possible values:
1 - BUY
2 - SELL
55
Symbol
STRING
Y
Symbol to cancel and place the order on.
59
TimeInForce
CHAR
N
Possible values:
1 - GOOD_TILL_CANCEL
3 - IMMEDIATE_OR_CANCEL
4 - FILL_OR_KILL
111
MaxFloor
QTY
N
Used for iceberg orders, this specifies the visible quantity of the order on the book.
152
CashOrderQty
QTY
N
Quantity of the order specified in the quote asset units, for reverse market orders.
847
TargetStrategy
INT
N
The value cannot be less than 1000000.
7940
StrategyID
INT
N
25001
SelfTradePreventionMode
CHAR
N
Possible values:
1 - NONE
2 - EXPIRE_TAKER
3 - EXPIRE_MAKER
4 - EXPIRE_BOTH
5 - DECREMENT
6 - TRANSFER
211
PegOffsetValue
FLOAT
N
Amount added to the peg in the context of the PegOffsetType
1094
PegPriceType
CHAR
N
Defines the type of peg
Possible values:
4 - MARKET_PEG
5 - PRIMARY_PEG
835
PegMoveType
CHAR
N
Describes whether peg is fixed or floats. Required for Pegged Orders and must be set to 1 (FIXED)
836
PegOffsetType
CHAR
N
Type of price peg offset.
Possible values:
3 - PRICE_TIER
1100
TriggerType
CHAR
N
Possible values: 4 - PRICE_MOVEMENT
1101
TriggerAction
CHAR
N
Possible values:
1 - ACTIVATE
1102
TriggerPrice
PRICE
N
Activation price for contingent orders. See table
1107
TriggerPriceType
CHAR
N
Possible values:
2 - LAST_TRADE
1109
TriggerPriceDirection
CHAR
N
Used to differentiate between StopLoss and TakeProfit orders. See table.
Possible values:
U - TRIGGER_IF_THE_PRICE_OF_THE_SPECIFIED_TYPE_GOES_UP_TO_OR_THROUGH_THE_SPECIFIED_TRIGGER_PRICE
D - TRIGGER_IF_THE_PRICE_OF_THE_SPECIFIED_TYPE_GOES_DOWN_TO_OR_THROUGH_THE_SPECIFIED_TRIGGER_PRICE
25009
TriggerTrailingDeltaBips
INT
N
Provide to create trailing orders.
Sample message:
8=FIX.4.4|9=160|35=XCN|34=2|49=JS8iiXK6|52=20240613-02:31:53.753|56=SPOT|11=1718245913721036458|37=8|38=5|40=2|44=4|54=1|55=LTCBNB|59=1|111=1|25033=1|25034=1718245913721036819|10=229|
Response:
- ExecutionReport
<8>withExecType (150)valueCANCELED (4)for the canceled order. - ExecutionReport
<8>withExecType (150)valueNEW (0)for the new order. - ExecutionReport
<8>withExecType (150)valueREJECTED (8)if the new order was rejected. - OrderCancelReject
<9>if the cancellation was rejected. - Reject
<3>if the message is rejected.
OrderMassCancelRequest <q>
Sent by the client to cancel all open orders on a symbol.
[!NOTE] All orders of the account will be canceled, including those placed in different connections.
Tag
Name
Type
Required
Description
11
ClOrdID
STRING
Y
ClOrdId of this mass cancel request.
55
Symbol
STRING
Y
Symbol on which to cancel orders.
530
MassCancelRequestType
CHAR
Y
Possible values:
1 - CANCEL_SYMBOL_ORDERS
Sample message:
8=FIX.4.4|9=95|35=q|34=2|49=dpYPesqv|52=20240613-01:24:36.948|56=SPOT|11=1718241876901971671|55=BTCUSDT|530=1|10=243|
Responses:
- ExecutionReport
<8>withExecType (150)valueCANCELED (4)for the every order canceled. - OrderMassCancelReport
<r>withMassCancelResponse (531)field indicating whether the message is accepted or rejected. - Reject
<3>if the message is rejected.
OrderMassCancelReport <r>
Sent by the server in response to OrderMassCancelRequest<q>.
Tag
Name
Type
Required
Description
55
Symbol
STRING
Y
Symbol (55) from the cancel request.
11
ClOrdID
STRING
Y
ClOrdID (11) of the cancel request.
530
MassCancelRequestType
CHAR
Y
MassCancelRequestType (530) from the cancel request.
531
MassCancelResponse
CHAR
Y
Possible values:
0 - CANCEL_REQUEST_REJECTED
1 - CANCEL_SYMBOL_ORDERS
532
MassCancelRejectReason
INT
N
Possible values:
99 - OTHER
533
TotalAffectedOrders
INT
N
How many orders were canceled.
25016
ErrorCode
INT
N
API error code (see Error Codes).
58
Text
STRING
N
Human-readable error message.
Sample message:
8=FIX.4.4|9=109|35=r|34=2|49=SPOT|52=20240613-01:24:36.949763|56=dpYPesqv|11=1718241876901971671|55=LTCBNB|530=1|531=1|533=5|10=083|
NewOrderList <E>
Sent by the client to submit a list of orders for execution.
- OCOs or OTOs add 2 orders to the
EXCHANGE_MAX_ORDERSfilter and theMAX_NUM_ORDERSfilter. - OTOCOs add 3 orders to the
EXCHANGE_MAX_NUM_ORDERSfilter andMAX_NUM_ORDERSfilter.
Unfilled Order Count:
- OCO: 2
- OTO: 2
- OTOCO: 3
Orders in an order list are contingent on one another. Please refer to Supported Order List Types for supported order types and triggering instructions.
Tag
Name
Type
Required
Description
25014
ClListID
STRING
Y
ClListID to be assigned to the order list.
1385
ContingencyType
INT
N
Possible values:
1 - ONE_CANCELS_THE_OTHER
2 - ONE_TRIGGERS_THE_OTHER
25046
OPO
BOOLEAN
N
Sets this order list as an OPO when set to true.
73
NoOrders
NUMINGROUP
N
The length of the array for Orders. Only 2 or 3 are allowed.
=>11
ClOrdID
STRING
Y
ClOrdID to be assigned to the order
=>38
OrderQty
QTY
N
Quantity of the order
=>40
OrdType
CHAR
Y
See the table to understand supported order types and the required fields to use them.
Possible values:
1 - MARKET
2 - LIMIT
3 - STOP
4 - STOP_LIMIT
P- PEGGED
=>18
ExecInst
CHAR
N
Possible values:
6 - PARTICIPATE_DONT_INITIATE
=>44
Price
PRICE
N
Price of the order
=>54
Side
CHAR
Y
Side of the order. Possible values:
1 - BUY
2 - SELL
=>55
Symbol
STRING
Y
Symbol to place the order on.
=>59
TimeInForce
CHAR
N
Possible values:
1 - GOOD_TILL_CANCEL
3 - IMMEDIATE_OR_CANCEL
4 - FILL_OR_KILL
=>111
MaxFloor
QTY
N
Used for iceberg orders, this specifies the visible quantity of the order on the book.
=>152
CashOrderQty
QTY
N
Quantity of the order specified in the quote asset units, for reverse market orders.
=>847
TargetStrategy
INT
N
The value cannot be less than 1000000.
=>7940
StrategyID
INT
N
=>25001
SelfTradePreventionMode
CHAR
N
Possible values:
1 - NONE
2 - EXPIRE_TAKER
3 - EXPIRE_MAKER
4 - EXPIRE_BOTH
5 - DECREMENT
6 - TRANSFER
=> 211
PegOffsetValue
FLOAT
N
Amount added to the peg in the context of the PegOffsetType
=>1094
PegPriceType
CHAR
N
Defines the type of peg
Possible values:
4 - MARKET_PEG
5 - PRIMARY_PEG
=>835
PegMoveType
CHAR
N
Describes whether peg is fixed or floats. Required for Pegged Orders and must be set to 1 (FIXED)
=>836
PegOffsetType
CHAR
N
Type of price peg offset.
Possible values:
3 - PRICE_TIER
=>1100
TriggerType
CHAR
N
Possible values:
4 - PRICE_MOVEMENT
=>1101
TriggerAction
CHAR
N
Possible values:
1 - ACTIVATE
=>1102
TriggerPrice
PRICE
N
Activation price for contingent orders. See table
=>1107
TriggerPriceType
CHAR
N
Possible values:
2 - LAST_TRADE
=>1109
TriggerPriceDirection
CHAR
N
Used to differentiate between StopLoss and TakeProfit orders. See table.
Possible values:
U - TRIGGER_IF_THE_PRICE_OF_THE_SPECIFIED_TYPE_GOES_UP_TO_OR_THROUGH_THE_SPECIFIED_TRIGGER_PRICE
D - TRIGGER_IF_THE_PRICE_OF_THE_SPECIFIED_TYPE_GOES_DOWN_TO_OR_THROUGH_THE_SPECIFIED_TRIGGER_PRICE
=>25009
TriggerTrailingDeltaBips
INT
N
Provide to create trailing orders.
=>25010
NoListTriggeringInstructions
NUMINGROUP
N
The length of the array for ListTriggeringInstructions.
==>25011
ListTriggerType
CHAR
N
What needs to happen to the order pointed to by ListTriggerTriggerIndex in order for the action to take place.
Possible values:
1 - ACTIVATED
2 - PARTIALLY_FILLED
3 - FILLED
==>25012
ListTriggerTriggerIndex
INT
N
Index of the trigger order: 0-indexed.
==>25013
ListTriggerAction
CHAR
N
Action to take place on this order after the ListTriggerType has been fulfilled.
Possible values:
1 - RELEASE
2 - CANCEL
Sample message:
8=FIX.4.4|9=236|35=E|34=2|49=Eg13pOvN|52=20240607-02:19:07.836|56=SPOT|73=2|11=w1717726747805308656|55=LTCBNB|54=2|38=1|40=2|44=0.25|59=1|11=p1717726747805308656|55=LTCBNB|54=2|38=1|40=1|25010=1|25011=3|25012=0|25013=1|1385=2|25014=1717726747805308656|10=171|
Supported Order List Types
[!NOTE] Orders must be specified in the sequence indicated in the Order Names column in the table below.
Order list name
Contingency Type (1385)
Order names
Order sides
Allowed Binance order types
List Triggering Instructions
OCO
1
1. below order
2. above order
1. below order=SELL
2. above order=SELL
1. below order=STOP_LOSS or STOP_LOSS_LIMIT
2. above order=LIMIT_MAKER
1. below order:
25010=1|25011=2|25012=1|25013=2|
2. above order:
25010=1|25011=1|25012=0|25013=2|
OCO
1
1. below order
2. above order
1. below order=BUY
2. above order=BUY
1. below order=LIMIT_MAKER
2. above order=STOP_LOSS or STOP_LOSS_LIMIT
1. below order:
25010=1|25011=1|25012=1|25013=2|
2. above order:
25010=1|25011=2|25012=0|25013=2|
OCO
1
1. below order
2. above order
1. below order=SELL
2. above order=SELL
1. below order=STOP_LOSS or STOP_LOSS_LIMIT
2. above order= TAKE_PROFIT
1. below order:
25010=1|25011=1|25012=1|25013=2|
2. above order:
25010=1|25011=1|25012=0|25013=2|
OCO
1
1. below order
2. above order
1. below order=BUY
2. above order=BUY
1. below order=TAKE_PROFIT
2. above order = STOP_LOSS or STOP_LOSS_LIMIT
1. below order:
25010=1|25011=1|25012=1|25013=2|
2. above order:
25010=1|25011=1|25012=0|25013=2|
OTO
2
1. working order
2. pending order
1. working order=SELL or BUY
2. pending order=SELL or BUY
1. working order=LIMIT or LIMIT_MAKER
2. pending order=ANY
1. working order:
NONE
2. pending order:
25010=1|25011=3|25012=0|25013=1|
OTOCO
2
1. working order
2. pending below order
3. pending above order
1. working order=SELL or BUY
2. pending below order=SELL
3. pending above order=SELL
1. working order=LIMIT or LIMIT_MAKER
2. pending below order=STOP_LOSS or STOP_LOSS_LIMIT
3. pending above order=LIMIT_MAKER
1. working order:
NONE
2. pending below order:
25010=2|25011=3|25012=0|25013=2|25011=2|25012=2|25013=2|
3. pending above order:
25010=2|25011=3|25012=0|25013=2|25011=1|25012=1|25013=2|
OTOCO
2
1. working order
2. pending below order
3. pending above order
1. working order=SELL or BUY
2. pending below order=BUY
3. pending above order=BUY
1. working order=LIMIT or LIMIT_MAKER
2. pending below order=LIMIT_MAKER
3. pending above order=STOP_LOSS or STOP_LOSS_LIMIT
1. working order:
NONE
2. pending below order:
25010=2|25011=3|25012=0|25013=2|25011=1|25012=2|25013=2|
3. pending above order:
25010=2|25011=3|25012=0|25013=2|25011=2|25012=1|25013=2|
OTOCO
2
1. working order
2. pending below order
3. pending above order
1. working order=SELL or BUY
2. pending below order=SELL
3. pending above order=SELL
1. working order=LIMIT or LIMIT_MAKER
2. pending below order=STOP_LOSS or STOP_LOSS_LIMIT
3. pending above order=TAKE_PROFIT
1. working order:
NONE
2. pending below order:
25010=2|25011=3|25012=0|25013=2|25011=1|25012=2|25013=2|
3. pending above order:
25010=2|25011=3|25012=0|25013=2|25011=1|25012=1|25013=2|
OTOCO
2
1. working order
2. pending below order
3. pending above order
1. working order=SELL or BUY
2. pending below order=BUY
3. pending above order=BUY
1. working order=LIMIT or LIMIT_MAKER
2. pending below order=TAKE_PROFIT
3. pending above order=STOP_LOSS or STOP_LOSS_LIMIT
1. working order:
NONE
2. pending below order:
25010=2|25011=3|25012=0|25013=2|25011=1|25012=2|25013=2|
3. pending above order:
25010=2|25011=3|25012=0|25013=2|25011=1|25012=1|25013=2|
OPO
2
1. working order
2. pending order
1. working order=BUY
2. pending order=SELL
1. working order=LIMIT or LIMIT_MAKER
2. pending order=ANY
1. working order:
NONE
2. pending order:
25010=1|25011=3|25012=0|25013=1|
OPOCO
2
1. working order
2. pending below order
3. pending above order
1. working order=BUY
2. pending below order=SELL
3. pending above order=SELL
1. working order=LIMIT or LIMIT_MAKER
2. pending below order=STOP_LOSS or STOP_LOSS_LIMIT
3. pending above order=LIMIT_MAKER
1. working order:
NONE
2. pending below order:
25010=2|25011=3|25012=0|25013=2|25011=2|25012=2|25013=2|
3. pending above order:
25010=2|25011=3|25012=0|25013=2|25011=1|25012=1|25013=2|
OPOCO
2
1. working order
2. pending below order
3. pending above order
1. working order=BUY
2. pending below order=SELL
3. pending above order=SELL
1. working order=LIMIT or LIMIT_MAKER
2. pending below order=STOP_LOSS or STOP_LOSS_LIMIT
3. pending above order=TAKE_PROFIT or TAKE_PROFIT_LIMIT
1. working order:
NONE
2. pending below order:
25010=2|25011=3|25012=0|25013=2|25011=1|25012=2|25013=2|
3. pending above order:
25010=2|25011=3|25012=0|25013=2|25011=1|25012=1|25013=2|
ListStatus <N>
Sent by the server whenever an order list state changes.
[!NOTE] By default, ListStatus
<N>is sent for all order lists of an account, including those submitted in different connections. Please see Response Mode for other behavior options.
Tag
Name
Type
Required
Description
55
Symbol
STRING
N
Symbol of the order list.
66
ListID
STRING
N
ListID of the list as assigned by the exchange.
25014
ClListID
STRING
N
ClListID of the list as assigned on the request.
25015
OrigClListID
STRING
N
1385
ContingencyType
INT
N
Possible values:
1 - ONE_CANCELS_THE_OTHER
2 - ONE_TRIGGERS_THE_OTHER
429
ListStatusType
INT
Y
Possible values:
2 - RESPONSE
4 - EXEC_STARTED
5 - ALL_DONE
100 - UPDATED
431
ListOrderStatus
INT
Y
Possible values:
3 - EXECUTING
6 - ALL_DONE
7 - REJECT
1386
ListRejectReason
INT
N
Possible values:
99 - OTHER
103
OrdRejReason
INT
N
Possible values:
99 - OTHER
60
TransactTime
UTCTIMESTAMP
N
Timestamp when this event occurred.
25016
ErrorCode
INT
N
API error code (see Error Codes).
58
Text
STRING
N
Human-readable error message.
73
NoOrders
NUMINGROUP
N
The length of the array for Orders.
=>55
Symbol
STRING
Y
Symbol of the order.
=>37
OrderID
INT
Y
OrderID of the order as assigned by the exchange.
=>11
ClOrdID
STRING
Y
ClOrdID of the order as assigned on the request.
=>25010
NoListTriggeringInstructions
NUMINGROUP
N
The length of the array for ListTriggeringInstructions.
==>25011
ListTriggerType
CHAR
N
Possible values:
1 - ACTIVATED
2 - PARTIALLY_FILLED
3 - FILLED
==>25012
ListTriggerTriggerIndex
INT
N
==>25013
ListTriggerAction
CHAR
N
Possible values:
1 - RELEASE
2 - CANCEL
Sample message:
8=FIX.4.4|9=293|35=N|34=2|49=SPOT|52=20240607-02:19:07.837191|56=Eg13pOvN|55=BTCUSDT|60=20240607-02:19:07.836000|66=25|73=2|55=BTCUSDT|37=52|11=w1717726747805308656|55=BTCUSDT|37=53|11=p1717726747805308656|25010=1|25011=3|25012=0|25013=1|429=4|431=3|1385=2|25014=1717726747805308656|25015=1717726747805308656|10=162|
OrderAmendKeepPriorityRequest <XAK>
Sent by the client to reduce the original quantity of their order.
This adds 0 orders to the EXCHANGE_MAX_ORDERS filter and the MAX_NUM_ORDERS filter.
Unfilled Order Count: 0
Read Order Amend Keep Priority FAQ to learn more.
Notes:
- The
ClOrdID (11)is not required to be different from theClOrdIDof the order. When theClOrdIDof the request is the same as theClOrdIDof the order being amended, theClOrdIDwill remain unchanged. - If both
OrderID (37)andOrigClOrdID (41)are provided, theOrderIDis searched first, then theOrigClOrdID (41)from that result is checked against that order. If both conditions are not met the request will be rejected.
Tag
Name
Type
Required
Description
11
ClOrdID
STRING
Y
The ClOrdID of this request.
41
OrigClOrdID
STRING
N
ClOrdID (11) of the order to amend. Either OrigClOrdID (41) or OrderId (37) have to be specified.
37
OrderID
INT
N
OrderID (37) of the order to amend. Either OrigClOrdID (41) or OrderId (37) have to be specified.
55
Symbol
STRING
Y
Symbol on which to amend the order.
38
OrderQty
QTY
N
New quantity of the order. Required to be smaller than the original OrderQty of the order.
Sample message:
8=FIX.4.4|9=103|35=XAK|34=2|49=EXAMPLE|52=20250319-12:35:21.087|56=SPOT|11=O2EIAS01742387721086|37=0|38=0.9|55=BTCUSDT|10=254|
Response:
- Reject
<3>if the incoming request is invalid either due to missing required fields, invalid fields, refers to an invalid symbol, or exceeds the message limit. - OrderAmendReject
<XAR>if failed due to insufficient order rate limits, pointing to a non-existent order, quantity is invalid, etc. - ExecutionReport
<8>if the request succeeded for amending a single order. - ExecutionReport
<8>+ ListStatus<N>if the request succeeded for amending an order which is part of an Order list.
OrderAmendReject <XAR>
Sent by the server when the OrderAmendKeepPriorityRequest <XAK> has failed.
Tag
Name
Type
Required
Description
11
ClOrdID
STRING
Y
ClOrdId of the amend request.
41
OrigClOrdID
STRING
N
OrigClOrdId (41) from the amend request.
37
OrderID
INT
N
OrderId (37) from the amend request.
55
Symbol
STRING
Y
Symbol (55) from the amend request.
38
OrderQty
QTY
Y
25016
ErrorCode
INT
Y
API error code (see Error Codes).
58
Text
STRING
Y
Human-readable error message.
Sample message:
8=FIX.4.4|9=0000176|35=XAR|49=SPOT|56=OE|34=2|52=20250319-14:27:32.751074|11=1WRGW5J1742394452749|37=0|55=BTCUSDT|38=1.000000|25016=-2038|58=The requested action would change no state; rejecting.|10=235|
Limit Messages
LimitQuery <XLQ>
Sent by the client to query current limits.
Tag
Name
Type
Required
Description
6136
ReqID
STRING
Y
ID of this request
Sample message:
8=FIX.4.4|9=82|35=XLQ|34=2|49=7buKHZxZ|52=20240614-05:35:35.357|56=SPOT|6136=1718343335357229749|10=170|
LimitResponse <XLR>
Sent by the server in response to LimitQuery<XLQ>.
Tag
Name
Type
Required
Description
6136
ReqID
STRING
Y
ReqID from the request.
25003
NoLimitIndicators
NUMINGROUP
Y
The length of the array for LimitIndicators.
=>25004
LimitType
CHAR
Y
Possible values:
1 - ORDER_LIMIT
2 - MESSAGE_LIMIT
=>25005
LimitCount
INT
Y
The current use of this limit.
=>25006
LimitMax
INT
Y
The maximum allowed for this limit.
=>25007
LimitResetInterval
INT
N
How often the limit resets.
=>25008
LimitResetIntervalResolution
CHAR
N
Time unit of LimitResetInterval. Possible values:
s - SECOND
m - MINUTE
h - HOUR
d - DAY
Sample message:
8=FIX.4.4|9=225|35=XLR|34=2|49=SPOT|52=20240614-05:42:42.724057|56=uGnG0ef8|6136=1718343762723730315|25003=3|25004=2|25005=1|25006=1000|25007=10|25008=s|25004=1|25005=0|25006=200|25007=10|25008=s|25004=1|25005=0|25006=200000|25007=1|25008=d|10=241|
Market Data Messages
[!NOTE] The messages below can only be used for the FIX Market Data.
InstrumentListRequest <x>
Sent by the client to query information about instruments.
Tag
Name
Type
Required
Description
320
InstrumentReqID
STRING
Y
ID of this request
559
InstrumentListRequestType
INT
Y
Possible values:
0 - SINGLE_INSTRUMENT
4 - ALL_INSTRUMENTS
55
Symbol
STRING
N
Required when the InstrumentListRequestType is set to SINGLE_INSTRUMENT(0)
Sample message:
8=FIX.4.4|9=92|35=x|49=BMDWATCH|56=SPOT|34=2|52=20250114-08:46:56.096691|320=BTCUSDT_INFO|559=0|55=BTCUSDT|10=164|
InstrumentList <y>
Sent by the server in a response to the InstrumentListRequest<x>.
[!NOTE] More detailed symbol information is available through the exchangeInfo endpoint.
Tag
Name
Type
Required
Description
320
InstrumentReqID
STRING
Y
InstrumentReqID from the request.
146
NoRelatedSym
NUMINGROUP
Y
Number of symbols
=>55
Symbol
STRING
Y
=>15
Currency
STRING
Y
Quote asset of this symbol
=>562
MinTradeVol
QTY
N
Corresponds to the LOT_SIZE filter
=>1140
MaxTradeVol
QTY
N
Corresponds to the LOT_SIZE filter
=>25039
MinQtyIncrement
QTY
N
Corresponds to the LOT_SIZE filter
=>25040
MarketMinTradeVol
QTY
N
Corresponds to the MARKET_LOT_SIZE filter
=>25041
MarketMaxTradeVol
QTY
N
Corresponds to the MARKET_LOT_SIZE filter
=>25042
MarketMinQtyIncrement
QTY
N
Corresponds to the MARKET_LOT_SIZE filter
=>969
MinPriceIncrement
PRICE
N
Corresponds to the PRICE filter
=>2551
StartPriceRange
PRICE
N
Corresponds to the PRICE filter
=>2552
EndPriceRange
PRICE
N
Corresponds to the PRICE filter
Sample message:
8=FIX.4.4|9=218|35=y|49=SPOT|56=BMDWATCH|34=2|52=20250114-08:46:56.100147|320=BTCUSDT_INFO|146=1|55=BTCUSDT|15=USDT|562=0.00001000|1140=9000.00000000|25039=0.00001000|25040=0.00000001|25041=76.79001236|25042=0.00000001|969=0.01000000|10=093|
MarketDataRequest <V>
Sent by the client to subscribe to or unsubscribe from market data stream.
Trade Stream
The Trade Streams push raw trade information; each trade has a unique buyer and seller.
Fields required to subscribe:
SubscriptionRequestTypepresent with valueSUBSCRIBE(1)MDEntryTypepresent with valueTRADE(2)
Update Speed: Real-time
Individual Symbol Book Ticker Stream
Pushes any update to the best bid or offers price or quantity in real-time for a specified symbol.
Fields required to subscribe:
SubscriptionRequestTypewith valueSUBSCRIBE(1)MDEntryTypewith valueBID(0)MDEntryTypewith valueOFFER(1)MarketDepthwith value1
Update Speed: Real-time
[!NOTE] In the Individual Symbol Book Ticker Stream, when
MDUpdateActionis set toCHANGE(1)in a MarketDataIncrementalRefresh<X>message sent from the server, it replaces the previous best quote.
Diff. Depth Stream
Order book price and quantity depth updates used to locally manage an order book.
Fields required to subscribe:
SubscriptionRequestTypewith valueSUBSCRIBE(1)MDEntryTypewith valueBID(0)MDEntryTypewith valueOFFER(1)MarketDepthwith a value between2and5000, which controls the size of the initial snapshot and has no effect on subsequent MarketDataIncrementalRefresh<X>messages
Update Speed: 100ms
[!NOTE] Since the MarketDataSnapshot
<W>have a limit on the number of price levels (5000 on each side maximum), you won't learn the quantities for the levels outside of the initial snapshot unless they change. So be careful when using the information for those levels, since they might not reflect the full view of the order book. However, for most use cases, seeing 5000 levels on each side is enough to understand the market and trade effectively.
Tag
Name
Type
Required
Description
262
MDReqID
STRING
Y
ID of this request
263
SubscriptionRequestType
CHAR
Y
Subscription Request Type. Possible values:
1 - SUBSCRIBE
2 - UNSUBSCRIBE
264
MarketDepth
INT
N
Subscription depth.
Possible values:
1 - Book Ticker subscription
2-5000 - Diff. Depth Stream
266
AggregatedBook
NUMINGROUP
N
Possible values:
Y - one book entry per side per price
146
NoRelatedSym
NUMINGROUP
N
Number of symbols
=>55
Symbol
STRING
Y
267
NoMDEntryTypes
NUMINGROUP
N
Number of entry types
=>269
MDEntryType
CHAR
Y
Possible values:
0 - BID
1 - OFFER
2 - TRADE
Sample message:
# Subscriptions# BOOK TICKER Stream8=FIX.4.4|9=132|35=V|49=TRADER1|56=SPOT|34=4|52=20241122-06:17:14.183428|262=BOOK_TICKER_STREAM|263=1|264=1|266=Y|146=1|55=BTCUSDT|267=2|269=0|269=1|10=010|# DEPTH Stream8=FIX.4.4|9=127|35=V|49=TRADER1|56=SPOT|34=7|52=20241122-06:17:14.443822|262=DEPTH_STREAM|263=1|264=10|266=Y|146=1|55=BTCUSDT|267=2|269=0|269=1|10=111|# TRADE Stream8=FIX.4.4|9=120|35=V|49=TRADER1|56=SPOT|34=3|52=20241122-06:34:14.775606|262=TRADE_STREAM|263=1|264=1|266=Y|146=1|55=BTCUSDT|267=1|269=2|10=040|# Unsubscription from TRADE Stream8=FIX.4.4|9=79|35=V|49=TRADER1|56=SPOT|34=7|52=20241122-06:41:56.966969|262=TRADE_STREAM|263=2|264=1|10=113|
MarketDataRequestReject <Y>
Sent by the server in a response to an invalid MarketDataRequest <V>.
Tag
Name
Type
Required
Description
262
MDReqID
STRING
Y
ID of the invalid MarketDataRequest<V>
281
MDReqRejReason
CHAR
N
Possible values:
1 - DUPLICATE_MDREQID
2 - TOO_MANY_SUBSCRIPTIONS
25016
ErrorCode
INT
N
API Error code. See Errors
58
Text
STRING
N
Human-readable error message.
Sample message:
8=FIX.4.4|9=0000218|35=Y|49=SPOT|56=EXAMPLE|34=5|52=20241019-05:39:36.688964|262=BOOK_TICKER_2|281=2|25016=-1191|58=Similar subscription is already active on this connection. Symbol='BNBBUSD', active subscription id: 'BOOK_TICKER_1'.|10=137|
MarketDataSnapshot <W>
Sent by the server in response to a MarketDataRequest<V>, activating Individual Symbol Book Ticker Stream or Diff. Depth Stream subscriptions.
Tag
Name
Type
Required
Description
262
MDReqID
STRING
Y
ID of the MarketDataRequest<V> that activated this subscription
55
Symbol
STRING
Y
25044
LastBookUpdateID
INT
N
268
NoMDEntries
NUMINGROUP
Y
Number of entries
=>269
MDEntryType
CHAR
Y
Possible values:
0 - BID
1 - OFFER
2 - TRADE
=>270
MDEntryPx
PRICE
Y
Price
=>271
MDEntrySize
QTY
Y
Quantity
Sample message:
8=FIX.4.4|9=0000107|35=W|49=SPOT|56=EXAMPLE|34=34|52=20241019-05:41:52.867164|262=BOOK_TICKER_1_2|55=BNBBUSD|25044=0|268=0|10=151|
MarketDataIncrementalRefresh <X>
Sent by the server when there is a change in a subscribed stream.
Tag
Name
Type
Required
Description
262
MDReqID
STRING
Y
ID of the MarketDataRequest<V> that activated this subscription
893
LastFragment
BOOLEAN
N
When present, this indicates that the message was fragmented. Fragmentation may occur when NoMDEntry would exceed 10000 in a single MarketDataIncrementalRefresh<X>, in order to limit it to 10000. The fragments of a fragmented message are guaranteed to be consecutive in the stream. It can only appear in the Trade Stream and Diff. Depth Stream.
268
NoMDEntries
NUMINGROUP
Y
Number of entries
=>279
MDUpdateAction
CHAR
Y
Possible values:
0 - NEW
1 - CHANGE
2 - DELETE
=>270
MDEntryPx
PRICE
Y
Price
=>271
MDEntrySize
QTY
N
Quantity
=>269
MDEntryType
CHAR
Y
Possible values:
0 - BID
1 - OFFER
2 - TRADE
=>55
Symbol
STRING
N
Market Data Entry will default to the same Symbol of the previous Market Data Entry in the same Market Data message if Symbol is not specified
=>60
TransactTime
UTCTIMESTAMP
N
=>1003
TradeID
INT
N
=>2446
AggressorSide
CHAR
N
Possible values:
1 - BUY
2 - SELL
=>25043
FirstBookUpdateID
INT
N
Only present in Diff. Depth Stream.
Market Data Entry will default to the same FirstBookUpdateID of the previous Market Data Entry in the same Market Data message if FirstBookUpdateID is not specified
=>25044
LastBookUpdateID
INT
N
Only present in Diff. Depth Stream and Individual Symbol Book Ticker Stream.
Market Data Entry will default to the same LastBookUpdateID of the previous Market Data Entry in the same Market Data message if LastBookUpdateID is not specified
Sample message:
8=FIX.4.4|9=0000313|35=X|49=SPOT|56=EXAMPLE|34=16|52=20241019-05:40:11.466313|262=TRADE_3|893=N|268=3|279=0|269=2|270=10.00000|271=0.01000|55=BNBBUSD|1003=0|60=20241019-05:40:11.464000|279=0|269=2|270=10.00000|271=0.01000|1003=1|60=20241019-05:40:11.464000|279=0|269=2|270=10.00000|271=0.01000|1003=2|60=20241019-05:40:11.464000|10=125|
Sample fragmented messages:
[!NOTE] Below are example messages, with
NoMDEntrylimited to 2, In the real streams, theNoMDEntryis limited to 10000.
8=FIX.4.4|9=237|35=X|34=114|49=SPOT|52=20250116-19:36:44.544549|56=EXAMPLE|262=id|268=2|279=0|270=240.00|271=3.00000000|269=2|55=BNBBUSD|60=20250116-19:36:44.196569|1003=67|279=0|270=238.00|271=2.00000000|269=2|60=20250116-19:36:44.196569|1003=68|893=N|10=180|8=FIX.4.4|9=163|35=X|34=115|49=SPOT|52=20250116-19:36:44.544659|56=EXAMPLE|262=id|268=1|279=0|270=233.00|271=1.00000000|269=2|55=BNBBUSD|60=20250116-19:36:44.196569|1003=69|893=Y|10=243|
8=FIX.4.4|9=156|35=X|34=12|49=SPOT|52=20250116-19:45:31.774162|56=EXAMPLE|262=id|268=2|279=2|270=362.00|269=0|55=BNBBUSD|25043=1143|25044=1145|279=2|270=313.00|269=0|893=N|10=047|8=FIX.4.4|9=171|35=X|34=13|49=SPOT|52=20250116-19:45:31.774263|56=EXAMPLE|262=id|268=2|279=2|270=284.00|269=0|55=BNBBUSD|25043=1143|25044=1145|279=1|270=264.00|271=3.00000000|269=0|893=N|10=239|8=FIX.4.4|9=149|35=X|34=14|49=SPOT|52=20250116-19:45:31.774281|56=EXAMPLE|262=id|268=1|279=1|270=395.00|271=19.00000000|269=1|55=BNBBUSD|25043=1143|25044=1145|893=Y|10=024|
FIX SBE
FIX SBE (Simple Binary Encoding) can be used instead of FIX with the spot_fix_testnet_latest.xml schema file.
SBE
Read the SBE FAQ for important information about using SBE with Binance APIs.
- Please review and understand the SBE specification before attempting to use FIX SBE
- When encoding and decoding SBE payloads, it is recommended to use code generated by
SbeToolto ensure compliance with the FIX SBE specification.
Endpoints
In addition to FIX encoding available on port 9000, two request/response encoding schemes are supported on additional TCP ports. See below endpoints for each API.
Order Entry
tcp+tls://fix-oe.testnet.binance.vision:9001: Send FIX requests; receive FIX SBE responses- FIX
SbeSchemaIdtag (=25050) must be set to the FIX SBE schema ID (=1) - The FIX
SbeSchemaVersiontag (=25051) must be set to the FIX SBE schema version (=0)
- FIX
tcp+tls://fix-oe.testnet.binance.vision:9002: Send FIX SBE requests; receive FIX SBE responses
Drop Copy
tcp+tls://fix-dc.testnet.binance.vision:9001: Send FIX requests; receive FIX SBE responses- FIX
SbeSchemaIdtag (=25050) must be set to the FIX SBE schema ID (=1) - The FIX
SbeSchemaVersiontag (=25051) must be set to the FIX SBE schema version (=0)
- FIX
tcp+tls://fix-dc.testnet.binance.vision:9002: Send FIX SBE requests; receive FIX SBE responses
Market data
tcp+tls://fix-md.testnet.binance.vision:9001: Send FIX requests; receive FIX SBE responses- FIX
SbeSchemaIdtag (=25050) must be set to the FIX SBE schema ID (=1) - The FIX
SbeSchemaVersiontag (=25051) must be set to the FIX SBE schema version (=0)
- FIX
tcp+tls://fix-md.testnet.binance.vision:9002: Send FIX SBE requests; receive FIX SBE responses
FIX SBE encoding layout
FIX SBE request/response messages always come with a SOFH (Simple Open Framing Header) and message header. A given FIX SBE message of N bytes has the following wire format:
<SOFH (6 bytes)> <message header (20 bytes)> <message (N bytes)>
SOFH: This corresponds to the "sofh" composite type in the schema file. This acts as a framing header so that the FIX SBE servers/clients can know the length of SBE messages and ensure messages have been fully received prior to deserializing them
Notes:
- The two fields within the SOFH MUST be encoded in little-endian
- The FIX servers only support
0xEB50for the encodingType field, i.e. only little-endian is supported for all fields
Message header: This corresponds to the "messageHeader" composite type in the schema file.
Logon
The logon signature (RawData) is computed as documented in the signature computation section.
Sample FIX SBE Logon request message
Please see below the hexdump of a sample FIX SBE Logon message obtained by following the above instructions.
Bytes
Description
0xd1, 0x00, 0x00, 0x00
sofh.messageLength
0x50, 0xeb
sofh.encodingType
0x0e, 0x00
messageHeader.blockLength
0x28, 0x4e
messageHeader.templateId
0x01, 0x00
messageHeader.schemaId
0x00, 0x00
messageHeader.version
0x01, 0x00, 0x00, 0x00
messageHeader.seqNum
0x58, 0x7a, 0x5f, 0x99, 0xdb, 0x1b, 0x06, 0x00
messageHeader.sendingTime
0x00
Logon.EncryptMethod
0x1e, 0x00, 0x00, 0x00
Logon.HeartBtInt
0x01
Logon.ResetSeqNumFlag
0x02
Logon.MessageHandling
0xff
Logon.ResponseMode
0xff
Logon.ExecutionReportType
0xff
Logon.DropCopyFlag
0xff, 0xff, 0xff, 0xff
Logon.RecvWindow
0x07
Logon.SenderCompId.length
0x45, 0x58, 0x41, 0x4d, 0x50, 0x4c, 0x45
Logon.SenderCompId.varData
0x04
Logon.TargetCompId.length
0x53, 0x50, 0x4f, 0x54
Logon.TargetCompId.varData
0x58, 0x00
Logon.RawData.length
0x34, 0x4d, 0x48, 0x58, 0x65, 0x6c, 0x56, 0x56
Logon.RawData.varData
0x63, 0x70, 0x6b, 0x64, 0x77, 0x75, 0x4c, 0x62
Logon.RawData.varData
0x6c, 0x36, 0x6e, 0x37, 0x33, 0x48, 0x51, 0x55
Logon.RawData.varData
0x58, 0x55, 0x66, 0x31, 0x64, 0x73, 0x65, 0x32
Logon.RawData.varData
0x50, 0x43, 0x67, 0x54, 0x31, 0x44, 0x59, 0x71
Logon.RawData.varData
0x57, 0x39, 0x77, 0x38, 0x41, 0x56, 0x5a, 0x31
Logon.RawData.varData
0x52, 0x41, 0x43, 0x46, 0x47, 0x4d, 0x2b, 0x35
Logon.RawData.varData
0x55, 0x64, 0x6c, 0x47, 0x50, 0x72, 0x51, 0x48
Logon.RawData.varData
0x72, 0x67, 0x74, 0x53, 0x33, 0x43, 0x76, 0x73
Logon.RawData.varData
0x52, 0x55, 0x52, 0x43, 0x31, 0x6f, 0x6a, 0x37
Logon.RawData.varData
0x33, 0x6a, 0x38, 0x67, 0x43, 0x41, 0x3d, 0x3d
Logon.RawData.varData
0x40, 0x00
Logon.Username.length
0x73, 0x42, 0x52, 0x58, 0x72, 0x4a, 0x78, 0x32
Logon.Username.varData
0x44, 0x73, 0x4f, 0x72, 0x61, 0x4d, 0x58, 0x4f
Logon.Username.varData
0x61, 0x55, 0x6f, 0x76, 0x45, 0x68, 0x67, 0x56
Logon.Username.varData
0x52, 0x63, 0x6a, 0x4f, 0x76, 0x43, 0x74, 0x51
Logon.Username.varData
0x77, 0x6e, 0x57, 0x6a, 0x38, 0x56, 0x78, 0x6b
Logon.Username.varData
0x4f, 0x68, 0x31, 0x78, 0x71, 0x62, 0x6f, 0x53
Logon.Username.varData
0x30, 0x32, 0x53, 0x50, 0x47, 0x66, 0x4b, 0x69
Logon.Username.varData
0x32, 0x68, 0x38, 0x73, 0x70, 0x5a, 0x4a, 0x62
Logon.Username.varData
FIX vs. FIX SBE
General:
- The
sofh.messageLengthfield must include the size of the SOFH (6 bytes) - FIX SBE has no
Checksumfield - When sending FIX SBE requests on port 9002
- All fields must be set in the payload
- Optional fields that are not present must be set to the corresponding
nullValue- The encoders generated by
SbeToolhandle this correctly - Please refer to the definition of
nullValuein the SBE specification if encoding payloads manually
- The encoders generated by
Decimal encoding:
- In request messages, the values for
PriceExponentandQtyExponentmust be no more precise than the precision of the symbol being transacted. Symbol precision can be retrieved from theInstrumentListresponse.
Logon message:
- The
SenderCompID,TargetCompIDandRecvWindowfields are provided in theLogonFIX SBE message instead of the message header- The
RecvWindowfield set in theLogonmessage applies to all trading request messages within the FIX SBE session - When set, the
RecvWindowfield is in microseconds
- The
- When the
ResponseModefield is set toOnlyAcks, theExecutionReportTypefield can be set toMinito receiveExecutionReportAckmessages instead ofExecutionReport- Note: The
ExecutionReportTypefield is only supported on port 9001 and port 9002 for the Order Entry and Drop Copy endpoints
- Note: The
MarketDataIncrementalRefresh message:
- This single message in the FIX schema is split into the following FIX SBE messages:
MarketDataIncrementalTrade,MarketDataIncrementalBookTickerandMarketDataIncrementalDepth - The
MDReqIDfield is omitted from the market data snapshot and refresh messages as these messages can be tied to the subscription request using theSymbolfield and the message's template IDMDReqIDis required in theMarketDataRequestmessage so that it may appear inMarketDataRequestReject- The value of
MDReqIDmust be unique across subscriptions
MarketDataIncrementalTrade message:
- The MDUpdateAction field available in the FIX schema is omitted in FIX SBE since the value is always
NEW.
MarketDataIncrementalBookTicker message:
- FIX SBE book ticker subscriptions use auto-culling: when the system is under high load, it may drop outdated events instead of queuing all events and delivering them with a delay.
- For example, if a best bid/ask event is generated at time T2 when there is still an undelivered event queued at time T1 (where T1 < T2), the event for T1 is dropped, and the system will deliver only the event for T2. This is done on a per-symbol basis.
- The
MDUpdateActionfield available in the FIX schema is omitted in FIX SBE as its value may be derived fromMDEntrySize.- When
MDEntrySizeis unset (NullVal),MDUpdateActionisDELETE. - When
MDEntrySizeis set,- if the price level exists in your local order book,
MDUpdateActionisCHANGE - else
MDUpdateActionisNEW.
- if the price level exists in your local order book,
- When
MarketDataIncrementalDepth message:
- FIX SBE depth update speed: 50ms
- The
MDUpdateActionfield available in the FIX schema is omitted in FIX SBE as its value may be derived fromMDEntrySize.- When
MDEntrySizeis unset (NullVal),MDUpdateActionisDELETE. - When
MDEntrySizeis set,- if the price level exists in your local order book,
MDUpdateActionisCHANGE - else
MDUpdateActionisNEW.
- if the price level exists in your local order book,
- When
Limits
Connection limits are shared between FIX and FIX SBE.
Errors
The following FIX SBE-specific errors may be returned:
Code
Message
Description
-1152
Invalid SBE message header.
Error when decoding messageHeader in FIX SBE request
-1153
Invalid SBE schema ID or version specified.
Error when parsing/decoding FIX SBE schema ID/version
-1177
Invalid encodingType.
Error when decoding encodingType field in sofh composite type
-1221
Invalid/missing field(s) in SBE message.
Invalid/missing field when decoding FIX SBE request
Note: Error codes returned for semantically equivalent FIX and FIX SBE requests may not be identical.
FAQ
See the SBE FAQ for more information on generating SBE decoders and handling schema updates.