CHANGELOG for Binance SPOT Testnet
Last Updated: 2025-10-08
Note: All features here will only apply to the SPOT Testnet. This is not always synced with the live exchange.
2025-10-08
FIX API
Notice: The following changes will be enabled at 2025-10-08 07:00 UTC
- Updated QuickFIX Schema for FIX Market Data:
- Updated RecvWindow (25000) to reflect microsecond support announced on 2025-08-05.
- Updated InstrumentList
<y>
message:- Added fields:
StartPriceRange
,EndPriceRange
. - Made the following fields optional:
MinTradeVol
,MaxTradeVol
,MinQtyIncrement
,MarketMinTradeVol
,MarketMaxTradeVol
,MarketMinQtyIncrement
,MinPriceIncrement
.
- Added fields:
- The changes to InstrumentList
<y>
are breaking changes. Please update to the new schema.
2025-10-01
Data reset
All data on the Spot Test Network will be deleted today according to the periodic reset procedure. See F.A.Q. for more details.
REST and WebSocket API:
- Reminder that SBE 2:1 schema will be retired on 2025-10-02, 6 months after being deprecated.
- The SBE lifecycle for Testnet has been updated to reflect this change.
2025-09-24
Notice: The following changes will be deployed on 2025-09-24, starting at 7:00 UTC and may take several hours to complete.
- Added an endpoint to retrieve the list of filters relevant to an account on a given symbol. This is the only endpoint that shows if an account has
MAX_ASSET
filters applied to it.- REST API:
GET /api/v3/myFilters
- WebSocket API:
myFilters
- REST API:
- Comments in SBE: schema 3:1 (spot_3_1.xml) have been added, modified, and removed. Although there is no need for users of
3:1
to update to this version of the file, we advise updating to maintain consistency. - Added documentation for filter
MAX_ASSET
.- In
Testnet
only: all accounts have aMAX_ASSET
filter for assetJPY
with value set to1000000
.
- In
2025-09-18
- Updated documentation for
recvWindow
to reflect microsecond support announced on 2025-08-05.- REST API: Timing Security
- WebSocket API: Timing Security
2025-09-12
- The QuickFix schema for FIX Order Entry has been updated to support Pegged Orders.
- Updated FIX API Documentation for
RecvWindow
in
2025-09-05
Data reset
All data on the Spot Test Network will be deleted today according to the periodic reset procedure. See F.A.Q. for more details.
2025-08-28
- Updated SBE FAQ section regarding legacy support to include more details on schema compatibility and explain
NonRepresentable
andNonRepresentableMessage
.
2025-08-26
- Updated "Request Security" documentation for REST API and WebSocket API with no functional changes.
2025-08-25
- SBE: schema 3:1 (spot_3_1.xml) will be updated on 2025-08-25 at 05:00 UTC
- The following fields have been renamed because the SbeTool code generator has been found to generate Java code that does not compile.
- Although only users impacted by this issue need to update the schema, we advise all users to upgrade to the latest version to maintain consistency.
- Message
MaxAssetFilter
- field
limitExponent
renamed toqtyExponent
- field
limit
renamed tomaxQty
- field
- The following fields have been renamed because the SbeTool code generator has been found to generate Java code that does not compile.
2025-08-19
userDataStream.subscribe
returnssubscriptionId
in the responses.
This was missed in a previous changelog entry.
2025-08-07
- Updated FIX API documentation
- FIX Market Data limits: The subscription limit has always been present but was undocumented.
- On message processing order: Reworded and reformatted.
Notice: The following will be enabled on 2025-08-08, 07:00 UTC
- Filter
MAX_NUM_ORDER_LISTS
, is enabled with the limit of 20 per symbol.
2025-08-05
Notice: The following changes will be deployed on 2025-08-06, starting 7:00 UTC and may take several hours to complete.
Please consult the Spot Test Network's homepage to be informed of the release completion.
General Changes
- The pegged order functionality is now available.
- Exchange Information requests emit the field
pegInstructionsAllowed
. - The following conditional fields
pegPriceType
,pegOffSetType
,pegOffsetValues
, andpeggedPrice
appear in responses of the following requests if the order was a pegged order:- REST API
GET /api/v3/order
GET /api/v3/orderList
GET /api/v3/openOrderList
GET /api/v3/allOrders
DELETE /api/v3/order
DELETE /api/v3/orderList
DELETE /api/v3/openOrders
PUT /api/v3/order/amend/keepPriority
- WebSocket API
order.status
orderList.status
allOrders
order.cancel
orderList.cancel
openOrders.cancelAll
order.amend.keepPriority
- REST API
- FIX API
OrdType(4)
supports new valueP(PEGGED)
- Tags
PegOffsetValue(211)
,PegPriceType(1094)
,PegMoveType(835)
, andPegOffsetType(836)
have been added to the following messages:- NewOrderSingle
<D>
- NewOrderList
<E>
- OrderCancelRequestAndNewOrderSingle
<XCN>
- When placing an order, the
ExecutionReport
<8>
message will echo backPegInstructions
, with an extra optional fieldPeggedPrice (839)
.
- NewOrderSingle
- New error messages for pegged orders are added. Please see the Errors document for more information.
- Exchange Information requests emit the field
- Changes with
recvWindow
:- A third check is made after your message leaves the message broker just before it is sent to the Matching Engine.
- This does not cover potential delays inside the Matching Engine itself.
recvWindow
supports microseconds.- The value is still specified in milliseconds, but can now take a decimal component to specify it with higher precision.
- This means that the parameter supports a maximum precision of 3 decimal places. (e.g. 6000.346)
- APIs affected:
- FIX API
- REST API
- WebSocket API
- A third check is made after your message leaves the message broker just before it is sent to the Matching Engine.
- The following requests have a new structure called
specialCommission
. See Commission Rates.- REST API
GET /api/v3/account/commission
POST /api/v3/order/test
withcomputeCommissionRates=true
POST /api/v3/sor/order/test
withcomputeCommissionRates=true
- WebSocket API
account.commission
order.test
withcomputeCommissionRates=true
sor.order.test
withcomputeCommissionRates=true
- REST API
- The new
MAX_NUM_ORDER_AMENDS
filter is enabled with a limit of 10 amendments per order. - New error codes
-1120
and1211
. See Errors for more information. - SBE: A new schema 3:1 (spot_3_1.xml) is available.
- The current schema 3:0 (spot_3_0.xml) is deprecated and will be retired in 6 months as per our schema deprecation policy.
- Changes in schema 3:1:
ExchangeInfoResponse
: new fieldpegInstructionsAllowed
ExecutionReportEvent
: new fieldspricePeg
,pricePegOffsetLevel
,peggedPrice
UserDataStreamSubscribeResponse
: new fieldsubscriptionId
- New field
subscriptionId
for all user data stream events. - Field
apiKey
renamed tologgedOnApiKey
forWebSocketSessionLogonResponse
,WebSocketSessionStatusResponse
and WebSocketSessionLogoutResponse OrderTestWithCommissionsResponse
: 2 new fieldsspecialCommissionForOrderMaker
andspecialCommissionForOrderTaker
AccountCommissionResponse
: 4 new fieldsspecialCommissionMaker
,specialCommissionTaker
,specialCommissionBuyer
andspecialCommissionSeller
- Support for
EXCHANGE_MAX_NUM_ORDER_LISTS
,MAX_NUM_ORDER_LISTS
, andMAX_NUM_ORDER_AMENDS
filters. ExecutionReportEvent
: fieldsrejectReason
andorigClientOrderId
now show their default values in SBE format to match the JSON format.NonRepresentableMessage
: New message added to represent a message that cannot be represented in this schema ID and version. Receipt of this message indicates that something should be available, but it is not representable using the SBE schema currently in use.
- Query order lists requests will first query the data in the cache, and if it cannot be found will query the database.
- REST API:
GET /api/v3/openOrderLists
- WebSocket API:
openOrderLists.status
- REST API:
- Orders with cumulative quantity of 0 in the final state
EXPIRED_IN_MATCH
(i.e. the order expired due to STP) will be archived after 90 days. - Bug fix: The Matching Engine no longer accepts order lists that exceed the order count filter limits. Affected filters:
MAX_NUM_ORDERS
MAX_ALGO_ORDERS
MAX_ICEBERG_ORDERS
EXCHANGE_MAX_NUM_ORDERS
EXCHANGE_MAX_ALGO_ORDERS
EXCHANGE_MAX_ICEBERG_ORDERS
WebSocket API
- A single WebSocket connection can subscribe to multiple User Data Streams at once.
- Only one subscription per account is allowed on a single connection.
- Method
userDataStream.subscribe.signature
has been added that allows you to subscribe to the User Data Stream without needing to login first.- This also doesn’t require an Ed25519 API Key, and can work with any API Key type.
- For SBE support you need to use schema 3:1 at least.
- Method
session.subscriptions
has been added that lists all the subscriptions active for the current session. - The meaning of the field
userDataStream
in the session requests has changed slightly.- Previously, this returned
true
if you were subscribed to the user data stream of your logged-on account. - Now it returns
true
if you have at least one active user data stream subscriptiontrue
- If there is at least one subscription activefalse
- If there are no active subscriptions
- Previously, this returned
userDataStream.unsubscribe
supports closing multiple subscriptions.- When called with no parameter, this will close all subscriptions.
- When called with
subscriptionId
, this will attempt to close the subscription matching that Id, if it exists. - The authorization for this request has been changed to
NONE
.
User Data Stream
- Field
subscriptionId
has been added to the User Data Stream events payload when listening through the WebSocket API. This will identify which subscription the event is coming from.
FIX API
- When a client sends a reject message, the FIX API will no longer send the client back a Reject
<3>
message. Error messages are clearer when a tag is invalid, missing a value, or when the field value is empty or malformed- If the tag number was invalid, you will receive the error:
{"code": -1169, "msg": "Invalid tag number."}
- If a valid tag was specified without a value, you will receive the error:
{"code": -1177, "msg": "Tag specified without a value."}
- If the field value was empty or malformed, you will still receive the error:
{"code": -1102, "msg": "Field value was empty or malformed."}
- If the tag number was invalid, you will receive the error:
2025-07-02
Data reset
All data on the Spot Test Network will be deleted today according to the periodic reset procedure. (see F.A.Q. for more details)
2025-06-04
Data reset
All data on the Spot Test Network will be deleted today according to the periodic reset procedure. (see F.A.Q. for more details)
2025-05-28
- Documented API timeout value and error under General API Information for each API:
2025-05-22
REST and WebSocket API:
- Reminder that SBE 2:0 schema will be retired on 2025-05-28, 6 months after being deprecated.
- The SBE lifecycle for Testnet has been updated to reflect this change.
2025-05-21
Notice: The following changes will happen at 2025-05-21 7:00 UTC.
- The previous behavior of
recvWindow
on FIX, REST, and WebSocket APIs will be augmented by an additional check.- To review, the existing behavior is:
- If
timestamp
is greater thanserverTime
+ 1 second at receipt of the request, the request is rejected. Rejection by this check increments message limits (FIX API) and IP limits (REST and WebSocket APIs), but not Unfilled Order Count (order placement endpoints of all APIs). - If the difference between
timestamp
andserverTime
at receipt of the request is greater thanrecvWindow
, the request is rejected. Rejection by this check increments message limits (FIX API) and IP limits (REST and WebSocket APIs) but not Unfilled Order Count (order placement endpoints of all APIs).
- If
- The additional check is:
- Just before a request is forwarded to the Matching Engine, if the difference between
timestamp
and the currentserverTime
is greater thanrecvWindow
, the request is rejected. Rejection by this check increments message limits (FIX API), IP limits (REST and WebSocket APIs), and Unfilled Order Count (order placement endpoints of all APIs).
- Just before a request is forwarded to the Matching Engine, if the difference between
- The documentation for Timing security has been updated to reflect the additional check.
- To review, the existing behavior is:
- Fixed a bug in FIX Market Data message InstrumentList
<y>
. Previously, the value ofNoRelatedSym(146)
could have been incorrect.
2025-04-29
- Features that currently require an Ed25519 API key will soon be opened up to HMAC and RSA keys.
- For example, subscribing to User Data Stream in WebSocket API will be possible with any API key type before listenKeys are removed.
- Users are still encouraged to migrate to Ed25519 API keys as they are more secure and performant on Binance Spot Trading.
- More details to come.
2025-04-25
- Notice: The following changes will happen at 2025-04-25 09:00 UTC.
- The following request weights will be increased from 1 to 4:
- REST API:
PUT /api/v3/order/amend/keepPriority
- WebSocket API:
order.amend.keepPriority
- The documentation for both REST and WebSocket API has been updated to reflect the upcoming changes.
- REST API:
- Clarified that
SEQNUM
in the FIX-API is a 32-bit unsigned integer that rolls over. This has been theSEQNUM
data type since the inception of the FIX-API.
2025-04-21
- Order Amend Keep Priority is now enabled on all symbols.
- Self-trade prevention mode
DECREMENT
is now enabled on all symbols.
2025-04-01
Notice: The following changes will be deployed tomorrow April 2, 2025 starting at 7:00 UTC and may take several hours to complete.
Please consult the Spot Test Network's homepage to be informed of the release completion.
New Features
- Order Amend Keep Priority is now available.
- FIX API: New Order Entry Messages OrderAmendKeepPriorityRequest and OrderAmendReject
- REST API:
PUT /api/v3/order/amend/keepPriority
- WebSocket API:
order.amend.keepPriority
- You can check the new
allowAmend
field in Exchange Information Requests to see if it's enabled on a given symbol:- REST API:
GET /api/v3/exchangeInfo
- WebSocket API:
exchangeInfo
- REST API:
- Self-trade prevention mode
DECREMENT
is now available.- Instead of expiring one or both orders,
DECREMENT
mode decreases the available quantity of both orders by increasing theprevented quantity
of both orders by the amount of the prevented match. - This can expire the orders if their
filled quantity
+prevented quantity
>=order quantity
. - You can check the
allowedSelfTradePreventionModes
field in Exchange Information Requests to see if this mode is enabled on a given symbol.
- Instead of expiring one or both orders,
General Changes
- Important: The following legacy URLs will be removed in May 2025. Please change to the new URLs as soon as possible:
Legacy URL | Latest URL |
---|---|
wss://testnet.binance.vision/ws-api/v3 | wss://ws-api.testnet.binance.vision/ws-api/v3 |
wss://testnet.binance.vision/ws | wss://stream.testnet.binance.vision/ws |
- Behavior when querying and/or canceling with
orderId
andorigClientOrderId/cancelOrigClientOrderId
:- The behavior when both parameters were provided was not consistent across all endpoints.
- Moving forward, when both parameters are provided, the order is first searched for using its
orderId
, and if found,origClientOrderId
/cancelOrigClientOrderId
is checked against that order. If both conditions pass, the request succeeds. If both conditions are not met the request is rejected. - Affected requests:
- REST API:
GET /api/v3/order
DELETE /api/v3/order
POST /api/v3/order/cancelReplace
- WebSocket API:
order.status
order.cancel
order.cancelReplace
- FIX API
- OrderCancelRequest
<F>
- OrderCancelRequestAndNewOrderSingle
<XCN>
- OrderCancelRequest
- REST API:
- Behavior when canceling with
listOrderId
andlistClientOrderId
:- The behavior when both parameters were provided was not consistent across all endpoints.
- Moving forward, when both parameters are passed, the order list is first searched for using its
listOrderId
, and if found,listClientOrderId
is checked against that order list. If both conditions are not met the request is rejected. - Affected requests:
- REST API
DELETE /api/v3/orderList
- WebSocket API
orderList.cancel
- REST API
- Previously, the request weight for myTrades was 20 regardless of the parameters provided. Now, if you provide
orderId
, the request weight is 5.- REST API:
GET /api/v3/myTrades
- WebSocket API:
myTrades
- REST API:
- If the unfilled order count for
intervalNum:DAY
is exceeded, the unfilled order count forintervalNum:SECOND
is no longer incremented. - Change when querying and deleting orders:
- When neither
orderId
nororigClientOrderId
are present, the request is now rejected with-1102
instead of-1128
. - Affected requests:
- REST API:
GET /api/v3/order
DELETE /api/v3/order
- WebSocket API
order.status
order.cancel
- FIX API
- OrderCancelRequest
<F>
- OrderCancelRequest
- REST API:
- When neither
- New Error code
-2038
for order amend keep priority requests that fail. - New messages for error code
-1034
.
FIX API
- The QuickFix schema for FIX OE is updated to support the Order Amend Keep Priority feature and new STP mode,
DECREMENT
. - FIX Order Entry connection limits will be a maximum of 10 concurrent connections per account.
- The connection rate limits are now enforced. Note that these limits are checked independently for both the account and the IP address.
- FIX Order Entry: 15 connection attempts within 30 seconds
- FIX Drop Copy: 15 connection attempts within 30 seconds
- FIX Market Data: 300 connection attempts within 300 seconds
- News
<B>
contains a countdown until disconnection in the Headline field.- Following the completion of this update, 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.
- Following the completion of this update, when the server enters maintenance, a
- OrderCancelRequest
<F>
and OrderCancelRequestAndNewOrderSingle<XCN>
will now allow bothorderId
andclientOrderId
. - FIX API verifies that
EncryptMethod(98)
is 0 at Logon<A>
.