WebSocket API General Info
- The base endpoint is:
wss://ws-fapi.binance.com/ws-fapi/v1- The base endpoint for testnet is:
wss://testnet.binancefuture.com/ws-fapi/v1
- The base endpoint for testnet is:
- A single connection to the API is only valid for 24 hours; expect to be disconnected after the 24-hour mark.
- Websocket server will send a ping frame every 3 minutes.
- If the websocket server does not receive a
pong frameback from the connection within a 10 minute period, the connection will be disconnected. - When you receive a ping, you must send a pong with a copy of ping's payload as soon as possible.
- Unsolicited pong frames are allowed, but will not prevent disconnection. It is recommended that the payload for these pong frames are empty.
- If the websocket server does not receive a
- Signature payload must be generated by taking all request params except for the signature and sorting them by name in alphabetical order.
- Lists are returned in chronological order, unless noted otherwise.
- All timestamps are in milliseconds in UTC, unless noted otherwise.
- All field names and values are case-sensitive, unless noted otherwise.
INTparameters such as timestamp are expected as JSON integers, not strings.DECIMALparameters such as price are expected as JSON strings, not floats.- User Data Stream requests - you will need to establish a separate WebSocket connection to listen to user data streams
WebSocket API Request format
Requests must be sent as JSON in text frames, one request per frame.
Example of request:
Code
Request fields:
| Name | Type | Mandatory | Â Description |
|---|---|---|---|
id | INT/STRING/null | YES | Arbitrary ID used to match responses to requests |
method | STRING | YES | Request method name |
params | OBJECT | NO | Request parameters. May be omitted if there are no parameters |
 Â
- Request
idis truly arbitrary. You can use UUIDs, sequential IDs, current timestamp, etc. The server does not interpretidin any way, simply echoing it back in the response.
You can freely reuse IDs within a session. However, be careful to not send more than one request at a time with the same ID, since otherwise it might be impossible to tell the responses apart. Â
- Request method names may be prefixed with explicit version: e.g., "
v3/order.place". - The order of
paramsis not significant.
Response format
Responses are returned as JSON in text frames, one response per frame.
Example of successful response:
Code
Example of failed response:
Code
Response fields:
| Name | Type | Mandatory | Â Description |
| :----------: | :-------------: | :-------: | ---------------------------------------------- | --- |
| id | INT/STRING/null | YES | Same as in the original request |
| status | INT | YES | Response status. See status codes |
| result | OBJECT/ARRAY | YES | Response content. Present if request succeeded |
| error | OBJECT | YES | Error description. Present if request failed |
| rateLimits | ARRAY | NO | Rate limiting status. See Rate limits | Â |
WebSocket API Rate limits
- Rate limits are the same as on REST API and are shared with REST API.
- WebSocket handshake attempt costs 5 weight.
- Rate limit for ping/pong frames: maximum 5 per second.
- Rate limit information is included in responses by default, see the
rateLimitsfield. rateLimitsfield visibility can be controlled withreturnRateLimitsboolean parameter in connection string or individual requests.- E.g., use
wss://ws-fapi.binance.com/ws-fapi/v1?returnRateLimits=falseto hiderateLimitsin responses by default. With that, you can pass extra"returnRateLimits": trueparameter in requests to show rate limit in response when it is otherwise hidden by default.
WebSocket API Authenticate after connection
You can authenticate an already established connection using session authentication requests:
session.logon- authenticate, or change the API key associated with the connectionsession.status- check connection status and the current API keysession.logout- forget the API key associated with the connection
WebSocket API API key revocation
If during an active session the API key becomes invalid for any reason (e.g. IP address is not whitelisted, API key was deleted, API key doesn't have correct permissions, etc), after the next request the session will be revoked with the following error message:
Code
WebSocket API Authorize ad hoc requests
Only one API key can be authenticated with the WebSocket connection. The authenticated API key is used by default for requests that require an apiKey parameter. However, you can always specify the apiKey and signature explicitly for individual requests, overriding the authenticated API key and using a different one to authorize a specific request.
For example, you might want to authenticate your USER_DATA key to be used by default, but specify the TRADE key with an explicit signature when placing orders.
WebSocket API Authentication request
Note:
Only Ed25519 keys are supported for this feature.
Log in with API key (SIGNED)
Request
Code
Response
Code
Authenticate WebSocket connection using the provided API key.
After calling session.logon, you can omit apiKey and signature parameters for future requests
that require them.
Note that only one API key can be authenticated. Calling session.logon multiple times changes the
current authenticated API key.
Weight: 2
Method: "session.logon"
Parameters
| Name | Type | Mandatory | Â Description |
|---|---|---|---|
apiKey | STRING | YES | |
recvWindow | INT | NO | |
signature | STRING | YES | |
timestamp | INT | YES |
Query session status
Request
Code
Response
Code
Query the status of the WebSocket connection, inspecting which API key (if any) is used to authorize requests.
Weight: 2
Method: "session.status"
Parameters: None
Log out of the session
Request
Code
Response
Code
Forget the API key previously authenticated. If the connection is not authenticated, this request does nothing.
Note that the WebSocket connection stays open after session.logout request. You can continue using
the connection, but now you will have to explicitly provide the apiKey and signature parameters
where needed.
Weight: 2
Method: "session.logout"
Parameters: None
SIGNED (TRADE and USER_DATA) Endpoint Security
SIGNED request example (Ed25519)
| Parameter | Value |
|---|---|
| symbol | BTCUSDT |
| side | SELL |
| type | LIMIT |
| timeInForce | GTC |
| quantity | 1 |
| price | 0.2 |
| timestamp | 1668481559918 |
Code
A sample code in Python to show how to sign the payload with an Ed25519 key is available on the right side.