Note: This API can only be used with the SPOT Exchange.
Supported endpoint to connect to FIX:
tcp+ssl://fix-oe.testnet.binance.vision:9000
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|
QuickFix schema file can be found here.
To use FIX API, your API key has to be configured with the FIX_API
permission.
Only Ed25519 keys are supported for FIX API.
You can setup and configure your API key permissions on Spot Test Network.
The MessageHandling (25035)
field required in the initial Logon<A>
message
controls whether the messages may get reordered.
UNORDERED(1)
should offer better performance, but there is a risk that messages may be processed in a different order.SEQUENTIAL(2)
guarantees that messages are processed according to theirMsgSeqNum(34)
.
FIX API allows multiple concurrent sessions for a single account (see Connection Limits).
By default, all 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; the connection receives all ExecutionReport<8>
and ListStatus<N>
messages, even those initiated from other sources.ONLY_ACKS(2)
: Receives only ACKs for operations initiated by this connection. This mode reduces bandwidth and may offer a different performance profile.
Note: ExecutionReport<8>
push messages may be sent out of order in relation to responses.
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 base64
from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey
from cryptography.hazmat.primitives.serialization import load_pem_private_key
def 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|
- 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. - When the order count exceeds the limit, your message will be rejected, and information will be transferred back to you in a reject message specific to that endpoint.
- The order rate limit is counted against each account.
- 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.
- Each Account has a limit on how many TCP connections can be established at the same time.
- The limit is decreased upon TCP connection going away, in case it is not reduced immediately, please allow up to 2x of
the value of
HeartBtInt (108)
. - Upon breaching the limit a Reject
<3>
will be sent containing information about the connection limit breach and the current limit. - The limit is 5 concurrent TCP connections per account.
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.
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 64-bit integer. |
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)
ClListID (25014)
OrigClListID (25015)
CancelClOrdID (25034)
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 9 - ORDER_CANCEL_REJECT A - LOGON D - NEW_ORDER_SINGLE E - NEW_ORDER_LIST F - ORDER_CANCEL_REQUEST N - LIST_STATUS q - ORDER_MASS_CANCEL_REQUEST r - ORDER_MASS_CANCEL_REPORT XCN - ORDER_CANCEL_REQUEST_AND_NEW_ORDER_SINGLE XLQ - LIMIT_QUERY XLR - LIMIT_RESPONSE |
49 | SenderCompID | STRING | Y | On messages from client this contains an ID of this connection. Must be unique across all TCP 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 | INT | 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. |
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. |
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> . |
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 correct TestReqID (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. |
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_GROUP99 - OTHER |
25016 | ErrorCode | INT | N | API error code (see Error Codes). |
58 | Text | STRING | N | Human-readable error message. |
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.
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. |
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|
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|
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 Message
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|
Sent by the client to submit a new order for execution.
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 to understand supported order types and the required fields to use them. Possible values: 1 - MARKET 2 - LIMIT 3 - STOP 4 - STOP_LIMIT |
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 | |
7940 | StrategyID | INT | N | The value cannot be less than 1000000 . |
25001 | SelfTradePreventionMode | CHAR | N | Possible values: 1 - NONE 2 - EXPIRE_TAKER 3 - EXPIRE_MAKER 4 - EXPIRE_BOTH |
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.
Order name | Binance OrderType | Side | required field values | required fields with user values |
---|---|---|---|---|
Marker order | MAKER |
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,1109 |
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,1109 |
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,1109 |
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,1109 |
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,1109 |
Buy trailing take profit order | TAKE_PROFIT |
BUY | 40=3|1100=4|1101=1|1107=2| |
1109 |
Buy stop 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,1109 |
Buy trailing take profit limit order | TAKE_PROFIT_LIMIT |
BUY | 40=4|1100=4|1101=1|1107=2| |
1109 |
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,1109 |
Sell trailing take profit order | TAKE_PROFIT |
SELL | 40=3|1100=4|1101=1|1107=2| |
1109 |
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,1109 |
Sell trailing take profit limit order | TAKE_PROFIT_LIMIT |
SELL | 40=4|1100=4|1101=1|1107=2| |
1109 |
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. |
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.
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 |
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 |
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 quote asset traded on this order. |
151 | LeavesQty | QTY | N | Quantity remaining for further execution. |
25017 | CumQuoteQty | QTY | N | Total number of base 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_CANCEL8 - REJECTED A - PENDING_NEW C - EXPIRED Note that FIX does not support EXPIRED_IN_MATCH status, and get converted to EXPIRED in FIX. |
25020 | AllocID | INT | N | Allocation ID as assigned by the exchange. |
25020 | MatchType | INT | N | Possible values:1 - ONE_PARTY_TRADE_REPORT4 - AUTO_MATCH |
25021 | WorkingFloor | INT | N | Appears for orders that potentially have allocations. |
25022 | TrailingTime | INT | 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. |
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|
Sent by the client to cancel an order or an order list.
- To cancel an order either
OrderID (11)
orOrigClOrdID (41)
are required. - To cancel an order list either
ListID (66)
orOrigClListID (25015)
are required.
If the canceled order is part of an order list, the entire list will be canceled.
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.
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|
Sent by the client to cancel an order and submit a new one for execution.
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 the Order Rate Limits are exceeded. 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 to understand supported order types and the required fields to use them. Possible values: 1 - MARKET 2 - LIMIT 3 - STOP 4 - STOP_LIMIT |
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 | |
7940 | StrategyID | INT | N | The value cannot be less than 1000000 . |
25001 | SelfTradePreventionMode | CHAR | N | Possible values: 1 - NONE 2 - EXPIRE_TAKER 3 - EXPIRE_MAKER 4 - EXPIRE_BOTH |
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.
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=94|35=q|34=2|49=dpYPesqv|52=20240613-01:24:36.948|56=SPOT|11=1718241876901971671|55=ABCDEF|530=1|10=110|
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.
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|
Sent by the client to submit a list of orders for execution.
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 |
73 | NoOrders | NUMINGROUP | N | How many NoOrders groups are populated. 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 to understand supported order types and the required fields to use them. Possible values: 1 - MARKET 2 - LIMIT 3 - STOP 4 - STOP_LIMIT |
=>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 | |
=>7940 | StrategyID | INT | N | The value cannot be less than 1000000 . |
=>25001 | SelfTradePreventionMode | CHAR | N | Possible values: 1 - NONE 2 - EXPIRE_TAKER 3 - EXPIRE_MAKER 4 - EXPIRE_BOTH |
=>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 | How many NoListTriggeringInstructions groups are populated. |
==>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|
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| |
OTO | 1 |
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=2|25012=0|25013=2|25011=2|25012=2|25013=2| 3. pending above order: 25010=2|25011=2|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=2|25012=0|25013=2|25011=1|25012=2|25013=2| 3. pending above order: 25010=2|25011=2|25012=0|25013=2|25011=2|25012=1|25013=2| |
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 | Y | 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 |
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 | How many NoOrders groups are populated. |
=>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 | How many NoListTriggeringInstructions groups are populated. |
==>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=290|35=N|34=2|49=SPOT|52=20240607-02:19:07.837191|56=Eg13pOvN|55=ABCDEF|60=20240607-02:19:07.836000|66=25|73=2|55=LTCBNB|37=52|11=w1717726747805308656|55=ABCDEF|37=53|11=p1717726747805308656|25010=1|25011=3|25012=0|25013=1|429=4|431=3|1385=2|25014=1717726747805308656|25015=1717726747805308656|10=019|
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|
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 | How many LimitIndicator groups are populated. |
=>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|