CHANGELOG for Binance SPOT Testnet
Last Updated: 2025-04-01
Note: All features here will only apply to the SPOT Testnet. This is not always synced with the live exchange.
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
. - The connection rate limits have been updated. Note that these limits are checked independently for both the API key and the IP address.
- FIX Order Entry:
- 15 connection attempts within 30 seconds
- maximum 10 concurrent connections per account
- FIX Drop Copy: 15 connection attempts within 30 seconds
- FIX Market Data: 300 connection attempts within 300 seconds
- FIX Order Entry:
- News
<B>
contains a countdown until disconnection in the Headline field.- Following the completion of this update, when you receive a News message, please establish a new connection within 10 minutes.
- The server will send a News message every 10 seconds until the old connection is closed.
- OrderCancelRequest
<F>
and OrderCancelRequestAndNewOrderSingle<XCN>
will now allow bothorderId
andclientOrderId
. - FIX API verifies that
EncryptMethod(98)
is 0 at Logon<A>
.
User Data Streams
- Receiving user data streams on stream.testnet.binance.vision using a
listenKey
is now deprecated.- This feature will be removed from our systems at a later date.
- Instead, you should get user data updates by subscribing to the User Data Stream on the WebSocket API.
- This should offer slightly better performance (lower latency).
- This requires the use of an Ed25519 API Key.
- In a future update, information about the base WebSocket endpoint for the User Data Streams will be removed.
- In a future update, the following requests will be removed from the documentation:
POST /api/v3/userDataStream
PUT /api/v3/userDataStream
DELETE /api/v3/userDataStream
userDataStream.start
userDataStream.ping
userDataStream.stop
- The User Data Stream documentation will remain as reference for the payloads you can receive.
SBE
- A new schema 3:0 (spot_3_0.xml) is now available.
- The current schema 2:1 (spot_2_1.xml) is now deprecated and will be retired in 6 months as per our schema deprecation policy.
- Note that trying to use schema 3:0 before it is released will result in an error.
- Changes in schema 3:0:
- Support for Order Amend Keep Priority:
- Added field
amendAllowed
to ExchangeInfoResponse. - New Messages
OrderAmendmentsResponse
andOrderAmendKeepPriorityResponse
- Added field
- Breaking changes:
- All enums now have a
NON_REPRESENTABLE
variant. This will be used to encode new enum values in the future, which would be incompatible with 3:0. - New enum variant
DECREMENT
forselfTradePreventionMode
andallowedSelfTradePreventionModes
symbolStatus
enum valuesAUCTION_MATCH
,PRE_TRADING
andPOST_TRADING
have been removed.- Fields
usedSor
,orderCapacity
,workingFloor
,preventedQuantity
, andmatchType
are no longer optional. - Field
orderCreationTime
inExecutionReportEvent
is now optional.
- All enums now have a
- Support for Order Amend Keep Priority:
- When using deprecated schema 2:1 on the WebSocket API to listen to the User Data Stream:
ListStatusEvent
fieldlistStatusType
will be rendered asExecStarted
when it should have beenUpdated
. Upgrade to schema 3:0 to get the correct value.ExecutionReportEvent
fieldselfTradePreventionMode
will be rendered asNone
when it should have beenDecrement
. This only happens whenexecutionType
isTradePrevention
.ExecutionReportEvent
fieldorderCreationTime
will be rendered as -1 when it has no value.
- All schemas below 3:0 are unable to represent responses for Order Amend Keep Priority requests and any response that could contain the STP mode
DECREMENT
(e.g. Exchange Information, order placement, order cancelation, or querying the status of your order). When a response cannot be represented in the requested schema, an error is returned.
2025-03-31
- Added a clarification on the performance of canceling an order.
2025-03-13
- Notice: The following changes will happen on March 13,2025 at 05:00 UTC:
- FIX Drop Copy sessions will have a limit of 60 messages per minute.
- FIX Market Data sessions will have a limit of 2000 messages per minute.
- The FIX API documentation has been updated to reflect the upcoming changes.
2025-03-05
- Notice: This is in the process of being deployed. Please consult the Spot Test Network's homepage to be informed of the release completion.
The following request weights will be increased from 2 to 4:- REST API:
GET /api/v3/aggTrade
- WebSocket API:
trades.aggregate
- REST API:
- The documentation for both REST and WebSocket API has been updated to reflect the upcoming changes.
2025-02-28
- SBE Market Data Streams are now available. These streams offer a smaller payload and should offer better latency than the equivalent JSON streams for a subset of latency-sensitive market data streams.
- Streams available in SBE format:
- Real-time: trade stream
- Real-time: best bid/ask
- Every 100 ms: diff. depth
- Every 100 ms: partial book depth
- For more information please refer to the SBE Market Data Streams.
2025-02-05
- Notice: These changes will be deployed starting at 7:00 UTC, and may take several hours to complete.
The following changes will apply to WebSocket Market Data Streams, User Data Streams, and the WebSocket API:
- Our WebSocket services will send a ping frame every 20 seconds instead of 3 minutes.
- The allowed pong delay will be 1 minute instead of 10 minutes.
- The documentation for these services have been updated to reflect the change.
AggressorSide (2446)
is now rendered in the FIX Market Data Trade Stream. The QuickFIX schema file has also been updated. Please download the latest schema before the Spot Testnet upgrade is completed.
2024-12-17
- FIX Market Data is now available. The FIX API documentation for SPOT Testnet has been updated regarding this feature.
- Please refer to this link for the QuickFIX Schema for FIX Market Data.
2024-11-27
Note: These changes will be deployed live starting 2024-11-28 and may take several hours for all features to work as intended.
New Feature: Microsecond support:
The system now supports microseconds in all related time and/or timestamp fields. Microsecond support is opt-in, by default the requests and responses still use milliseconds.
Examples in documentation are also using milliseconds for the foreseeable future.
WebSocket Streams
- A new optional parameter
timeUnit
can be used in the connection URL to select the time unit.- For example:
/stream?streams=btcusdt@trade&timeUnit=millisecond
- Supported values are:
MILLISECOND
millisecond
MICROSECOND
microsecond
- If the time unit is not selected, milliseconds will be used by default.
- For example:
REST API
- A new optional header
X-MBX-TIME-UNIT
can be sent in the request to select the time unit.- Supported values:
MILLISECOND
millisecond
MICROSECOND
microsecond
- The time unit affects time-related parameters in requests (e.g,
startTime
,endTime
,timestamp
). - The time unit affects timestamp fields in responses (e.g.,
time
,transactTime
). - If the time unit is not selected, milliseconds will be used by default.
- Supported values:
WebSocket API
- A new optional parameter
timeUnit
can be used in the connection URL to select the time unit.- Supported values:
MILLISECOND
millisecond
MICROSECOND
microsecond
- The time unit affects time-related parameters in requests (e.g,
startTime
,endTime
,timestamp
). - The time unit affects timestamp fields in responses (e.g.,
time
,transactTime
). - If the time unit is not selected, milliseconds will be used by default.
- Supported values:
User Data Streams
- A new optional parameter
timeUnit
can be used in the connection URL to select the time unit.- Supported values
MILLISECOND
MICROSECOND
.microsecond
millisecond
- Supported values
General Changes:
-
Fixed a bug that prevented orders from being placed when submitting OCOs on the
BUY
side without providing astopPrice
. -
TAKE_PROFIT
andTAKE_PROFIT_LIMIT
support has been added for OCOs.- Previously OCOs could only be composed by the following order types:
LIMIT_MAKER
+STOP_LOSS
LIMIT_MAKER
+STOP_LOSS_LIMIT
- Now OCOs can be composed of the following order types:
LIMIT_MAKER
+STOP_LOSS
LIMIT_MAKER
+STOP_LOSS_LIMIT
TAKE_PROFIT
+STOP_LOSS
TAKE_PROFIT
+STOP_LOSS_LIMIT
TAKE_PROFIT_LIMIT
+STOP_LOSS
TAKE_PROFIT_LIMIT
+STOP_LOSS_LIMIT
- This is supported by the following requests:
POST /api/v3/orderList/oco
POST /api/v3/orderList/otoco
orderList.place.oco
orderList.place.otoco
NewOrderList<E>
- Error code
-1167
will be obsolete after this update and will be removed from the documentation in a later update.
- Previously OCOs could only be composed by the following order types:
-
Timestamp parameters now reject values too far into the past or the future. To be specific, the parameter will be rejected if:
timestamp
before 2017-01-01 (less than 1483228800000)timestamp
is more than 10 seconds after the current time (e.g., if current time is 1729745280000 then it is an error to use 1729745291000 or greater)
-
If
startTime
and/orendTime
values are outside of range, the values will be adjusted to fit the correct range. -
The field for quote order quantity (
origQuoteOrderQty
) has been added to responses that previously did not have it. Note that for order placement endpoints the field will only appear for requests withnewOrderRespType
set toRESULT
orFULL
.- Please refer to the table for requests with
origQuoteOrderQty
:
Service Request REST POST /api/v3/order
POST /api/v3/sor/order
POST /api/v3/order/oco
POST /api/v3/orderList/oco
POST /api/v3/orderList/oto
POST /api/v3/orderList/otoco
DELETE /api/v3/order
DELETE /api/v3/orderList
POST /api/v3/order/cancelReplace
WebSocket API order.place
sor.order.place
orderList.place
orderList.place.oco
orderList.place.oto
orderList.place.otoco
order.cancel
orderList.cancel
order.cancelReplace
- Please refer to the table for requests with
SBE
- A new schema 2:1 spot_2_1.xml has been released. The current schema 2:0 spot_2_0.xml will thus be deprecated, and retired from the API in 6 months as per our schema deprecation policy.
- Schema 2:1 is a backward compatible update of schema 2:0. You will always receive payloads in 2:1 format when you request either schema 2:0 or 2:1.
- Changes in SBE schema 2:1:
- New field
origQuoteOrderQty
in order placement/cancellation responses (Note: Decoders generated using the 2:0 schema will skip this field.):NewOrderResultResponse
NewOrderFullResponse
CancelOrderResponse
NewOrderListResultResponse
NewOrderListFullResponse
CancelOrderListResponse
- WebSocket API only: New field
userDataStream
in session status responses:WebSocketSessionLogonResponse
WebSocketSessionStatusResponse
WebSocketSessionLogoutResponse
- WebSocket API only: New messages for User Data Stream support:
UserDataStreamSubscribeResponse
UserDataStreamUnsubscribeResponse
BalanceUpdateEvent
EventStreamTerminatedEvent
ExecutionReportEvent
ExternalLockUpdateEvent
ListStatusEvent
OutboundAccountPositionEvent
- New field
WebSocket API
- You can now subscribe to User Data Stream events through your WebSocket API connection.
- Note: This feature is only available for users of Ed25519 API keys.
- Note: New SBE schema 2:1 is required for User Data Stream subscriptions in SBE format.
- New requests:
userDataStream.subscribe
userDataStream.unsubscribe
- Changes to
session.logon
,session.status
, andsession.logout
- Added a new field
userDataStream
indicating if the user data stream subscription is active.
- Added a new field
- Fixed a bug where you wouldn't receive a new listenKey using
userDataStream.start
aftersession.logon
User Data Stream
- WebSocket API only: New event
eventStreamTerminated
is emitted when you either logout from your websocket session or you have unsubscribed from the user data stream. - New event
externalLockUpdate
is sent when your spot wallet balance is locked/unlocked by an external system.
FIX API
- The schema has been updated with a new Administrative message News <B>, which can be used for all FIX services. Receiving this message indicates that your connection is about to be closed.
- Note: This message will be available in the live exchange at a later date.
2024-11-05
Note: This is in the process of being deployed. Please consult the Spot Test Network's homepage to be informed of the release completion.
Changes to Exchange Information (i.e. GET /api/v3/exchangeInfo
from REST and exchangeInfo
for WebSocket API).
- A new optional parameter
showPermissionSets
can be used to hide the permissions frompermissionsSets
; This can be used for a reduced payload size. - A new optional parameter
symbolStatus
can now be used to only show symbols with the specified status. (e.g.TRADING
,HALT
,BREAK
)
2024-10-02
REST and WebSocket API:
- Reminder that SBE 1:0 schema will be disabled on 2024-10-04, 6 months after being deprecated, as per our SBE policy.
- The SBE lifecycle for Testnet has been updated to reflect this change.
2024-09-04
- Spot Testnet now supports Unfilled Order Count. Please refer to this page on how you can decrement your unfilled order count when placing orders.
- The documentation has been updated to reflect the wording.
2024-08-16
General Changes:
- New error messages have been added when quote quantity market orders (aka reverse market orders) are rejected in low-liquidity situations.
2024-08-07
- The QuickFIX schema has been modified.
2024-07-23
Note: This will be deployed starting around 7am UTC. Please consult the Spot Test Network's homepage to be informed of the release completion.
- FIX Drop Copy sessions are now supported on the Spot Test Network.
- New API Key permission
FIX_API_READ_ONLY
has been introduced.
2024-07-17
General changes:
- Fixed a bug where klines had incorrect timestamps.
- REST API:
GET /api/v3/klines
andGET /api/v3/uiKlines
withtimeZone
parameter - WebSocket API:
klines
anduiKlines
withtimeZone
parameter - WebSocket Streams:
<symbol>@kline_<interval>@+08:00
streams
- REST API:
2024-06-21
- FIX API will be available today (2024-06-21) on the Spot Test Network. Please consult the Spot Test Network's homepage to be informed of the release completion.
- Using the FIX API requires an Ed25519 API Key with the
FIX_API
permission. - The release date on the live exchange has not been determined.
- Using the FIX API requires an Ed25519 API Key with the
2024-06-05
WebSocket Streams
- Buyer order ID (
b
) and Seller order ID (a
) have been removed from the Trade streams. (i.e.<symbol>@trade
) - To monitor if your order was part of a trade, please listen to the User Data Streams.
2024-05-30
WebSocket API
wss://ws-api.testnet.binance.vision/ws-api/v3
is now the primary URL for the Spot Testnet WebSocket API. Other URLs will be phased out over time.
WebSocket Streams
wss://stream.testnet.binance.vision/ws
andwss://stream.testnet.binance.vision/stream
are now the primary URLs for the Spot Testnet WebSocket Streams. Other URLs will be phased out over time.
2024-05-23
REST API
orderRateLimitExceededMode
has been added toPOST /api/v3/order/cancelReplace
WebSocket API
orderRateLimitExceededMode
has been added toorder.cancelReplace
WebSocket Streams
- Kline/Candlestick streams can now support a UTC+8:00 timezone offset. (e.g.
btcusdt@kline_1d@+08:00
)
2024-05-02
- One-Triggers-the-Other (OTO) orders and One-Triggers-a-One-Cancels-The-Other (OTOCO) orders are now enabled.
- New requests have been added:
- REST API:
POST /api/v3/orderList/oto
POST /api/v3/orderList/otoco
- WebSocket API:
orderList.place.oto
orderList.place.otoco
- REST API:
2024-04-04
General changes:
- Symbol permission information in Exchange Information responses has moved from field
permissions
to fieldpermissionSets
. - Field
permissions
will be empty and will be removed in a future release. - Previously,
"permissions":["SPOT","MARGIN"]
meant that you could place an order on the symbol if your account hadSPOT
orMARGIN
permissions. The equivalent is"permissionSets":[["SPOT","MARGIN"]]
. (Note the extra set of square brackets.) Each array of permissions inside thepermissionSets
array is called a "permission set". - Symbol permissions can now be more complex.
"permissionSets":[["SPOT","MARGIN"],["TRD_GRP_004","TRD_GRP_005"]]
means that you may place an order on the symbol if your account has SPOT or MARGIN permissions andTRD_GRP_004
orTRD_GRP_005
permissions. There may be an arbitrary number of permission sets in a symbol'spermissionSets
. - The weight of the following requests has increased from 10 to 25:
GET /api/v3/trades
GET /api/v3/historicalTrades
trades.recent
trades.historical
REST API
- The
POST /api/v3/order/oco
endpoint is now deprecated on the REST API. You should use the newPOST /api/v3/orderList/oco
endpoint instead. Note that this new endpoint uses different parameters. POST /api/v3/order/oco
has been removed from the Rest API documentation for SPOT Testnet.otoAllowed
will now appear onGET /api/v3/exchangeInfo
, that indicates if One-Triggers-the-Other (OTO) orders are supported on that symbol.
WebSocket API
- The
orderList.place
request is now deprecated on the WebSocket API. You should now use the neworderList.place.oco
request instead. Note that this new request uses different parameters. orderList.place
has been removed from the WebSocket API documentation for SPOT Testnet.otoAllowed
will now appear onexchangeInfo
, that indicates if One-Triggers-the-Other (OTO) orders are supported on that symbol.
SBE
- A new schema 2:0 spot_2_0.xml has been released for SPOT Testnet. The current schema, 1:0 spot_1_0.xml, will thus be deprecated and retired from the Testnet APIs in 6 months as per our schema deprecation policy.
- When using schema 1:0 on REST API or WebSocket API, group "permissions" in message "ExchangeInfoResponse" will always be empty. Upgrade to schema 2:0 to find permission information in group "permissionSets". See General changes above for more details.
- Responses for deprecated OCO requests are supported by both schema 1:0 and 2:0
2024-03-13
General changes:
GET /api/v3/account
has a new optional parameteromitZeroBalances
, allowing to hide all zero balancesaccount.status
has a new optional parameteromitZeroBalances
allowing to hide all zero balances.
User Data Stream:
- New event
listenKeyExpired
is now emitted when alistenKey
expires.