See the complete V3 prompt endpoint table for chart/research requests, conversation history, connection settings and restricted worker operations.
Manage persistent limits, stops, trailing orders, TWAP, VWAP, participation and linked OCO, OTO and OTOCO orders directly through the API. An LLM is not required.
The new reference covers REST and WebSocket signing, decimal precision, the $15 opening-notional minimum, cancellation and bounded, newest-first managed-order history.
Available on deployments that enable advanced orders for eligible accounts and markets. Single-order creation continues to use the existing order endpoint; V3 adds linked-order and managed-history routes.
Introduction
Non-rehypothecation and collateral coverage: V6's non-upgradeable code restricts supported ERC-20 collateral to registered-wallet withdrawals that pass its release controls. It provides no general-purpose lending, third-party spending-approval, or arbitrary-transfer path.
To verify backing, reconcile published positions with published funding balances, then compare actual funding-contract assets with aggregate positive user liabilities at a matching, completed snapshot. Assets greater than those published liabilities establish a surplus at that snapshot. See the verification reference for addresses, scales, snapshot checks, and formulas.
API Key Setup
Some endpoints will require an API Key. Please register here to obtain an API key.
Never share your API key or secret key with anyone.
Quote.Trade /api/v2 provides Binance-v3-style regular order flow. Compatibility is endpoint-specific: signing, instrument symbols, execution behavior and response fields have documented differences. Quote.Trade /api/v3 is reserved for advanced-order and prompt extensions; changing only the hostname is not sufficient for every Binance client.
After an API key is created, its default restriction is Enable Reading.
To enable withdrawals via API, any identity verification requested by Quote.Trade must be completed, and the API key
restriction needs to
be modified by the admin.
For questions about a sudden drop in API or WebSocket performance.
For questions about your API or WebSocket implementation.
For any general questions about the API not covered in the documentation.
For cases such as missing funds, help with 2FA, etc.
General Info
General API Information
The base endpoint is: https://app.quote.trade/api
All HTTP POST and PUT endpoints expect minified JSON. ({} if there
is no data to send.)
For GET endpoints, parameters must be sent in the query string.
For POST and PUT endpoints, the parameters must be sent
as the
request body with content type
application/json.
All HTTP endpoints return either a minified JSON object or a minified JSON array.
HTTP Return Codes
HTTP 200 return code is used for success or business rejection responses.
HTTP 4XX return codes are used for malformed requests;
the issue is on the sender's side.
HTTP 403 return code is used when the WAF Limit (Web Application Firewall) has been
violated.
HTTP 409 return code is used when a cancelReplace order partially succeeds. (e.g. if the
cancellation of the order fails but the new order placement succeeds.)
HTTP 429 return code is used when breaking a request rate limit.
HTTP 418 return code is used when an IP has been auto-banned for continuing to send
requests after receiving 429 codes.
HTTP 5XX return codes are used for internal errors; the issue is on
quote.trade's side.
It is important to NOT treat this as a failed operation; the execution status is
UNKNOWN and the operation may have succeeded.
Error Codes and Messages
If an error occurs, the API returns an error message explaining the reason.
The API error payload is as follows:
{"error":"Invalid symbol."}
LIMITS
IP Limits
Each route has a weight which determines how many requests each endpoint counts toward the limit. Heavier endpoints and endpoints that do operations on multiple symbols will have a heavier
weight.
When you receive a 429 response, your API client must back off before sending more requests.
Repeatedly violating rate limits and/or failing to back off after receiving 429s will result in
an automated IP ban (HTTP status 418).
IP bans are tracked and scale in duration for repeat offenders, from 2 minutes
to 3 days.
A Retry-After header is sent with a 418 or 429 response and will give the number
of seconds required to wait, in the case of a 429, to prevent a ban, or, in the case of a 418,
until the ban is over.
The limits on the API are based on the IPs, not the API keys.
WebSocket Limits
WebSocket connections have a limit of 5 incoming messages per second. A message is considered:
A PING frame
A PONG frame
A JSON control message (e.g. subscribe, unsubscribe)
A connection that goes beyond the limit will be disconnected; IPs that are repeatedly disconnected may
be banned.
A single connection can listen to a maximum of 1024 streams.
API Limit Introduction
The /api/* endpoints adopt either of two access limiting rules, IP
limits or UID (account) limits.
Endpoints related to /api/*:
IP limits and UID (account) limits are independent.
Endpoints share the 1200 per minute limit based on IP.
Data Sources
The API system is asynchronous, so some delay in the response is normal and expected.
Each endpoint has a data source indicating where the data is being retrieved, and thus which endpoints
have the most up-to-date response.
These are the three sources, ordered from the most up-to-date to the one with potential update delays.
Matching Engine - the data is from the matching engine
Memory - the data is from a server's local or external memory
Database - the data is taken directly from a database
Endpoint security type
Each endpoint has a security type that determines how you will
interact with it. This is stated next to the NAME of the endpoint.
If no security type is stated, assume the security type is NONE.
API keys are passed into the REST API via the X-MBX-APIKEY
header.
API keys and secret keys are case sensitive.
API keys can access only the routes permitted by their assigned permissions; a trade-only key cannot authorize withdrawals.
Security Type
Description
NONE
Endpoint can be accessed freely.
TRADE
Endpoint requires sending a valid API-Key and signature.
USER_DATA
Endpoint requires sending a valid API-Key and signature.
USER_STREAM
Endpoint requires sending a valid API-Key.
MARKET_DATA
Endpoint requires sending a valid API-Key.
TRADE, and USER_DATA endpoints are
SIGNED endpoints.
SIGNED (TRADE, AND USER_DATA )
Endpoint security
SIGNED endpoints require an additional parameter, signature, to be
sent in the http headers.
Endpoints use HMAC SHA256 signatures. The HMAC SHA256 signature is a keyed
HMAC SHA256 operation.
Use your secretKey as the key and the exact serialized request body bytes as the value for POST requests. Send those same bytes without reformatting. For signed GET requests, the web client signs the JSON-encoded relative path including its query string (for example, "/account" or "/getDepositAddress?symbol=USDT"), excluding the base URL and /api prefix.
The signature is not case sensitive.
SIGNED Endpoint Examples for POST /api/order
Here is a step-by-step example of how to send a valid signed payload from the
Linux command line using printf, openssl, and curl. The keys and timestamp below are illustrative; substitute your own credentials and current request values before sending.
These terms will be used throughout the documentation, so it is recommended especially for new users to read
to help their understanding of the API.
base asset refers to the asset that is the quantity of a symbol. For the
symbol BTC/USDC, BTC would be the base asset.
quote asset refers to the asset that is the price of a symbol. For the symbol
BTC/USDC, USDC would be the quote asset.
ENUM definitions
Symbol status (status):
PRE_TRADING
TRADING
POST_TRADING
END_OF_DAY
HALT
AUCTION_MATCH
BREAK
Account and Symbol Permissions (permissions):
SPOT
MARGIN
LEVERAGED
TRD_GRP_002
TRD_GRP_003
TRD_GRP_004
TRD_GRP_005
Order status (status):
Status
Description
NEW
The order has been accepted by the engine.
PARTIALLY_FILLED
A part of the order has been filled.
FILLED
The order has been completed.
CANCELED
The order has been canceled by the user.
PENDING_CANCEL
Currently unused
REJECTED
The order was not accepted by the engine and not processed.
EXPIRED
The order was canceled according to the order type's rules (e.g. LIMIT FOK orders with no fill,
LIMIT IOC or MARKET orders that partially fill) or by the exchange, (e.g. orders canceled during
liquidation, orders canceled during maintenance)
OCO Status (listStatusType):
Status
Description
RESPONSE
This is used when the ListStatus is responding to a failed action. (e.g. order list placement or cancellation)
EXEC_STARTED
The order list has been placed or there is an update to the order list status.
ALL_DONE
The order list has finished executing and is no longer active.
OCO Order Status (listOrderStatus):
Status
Description
EXECUTING
Either an order list has been placed or there is an update to the status of the list.
ALL_DONE
An order list has completed execution and is no longer active.
REJECT
The list status indicates a failed action during order placement or cancellation.
Order types (orderTypes, type):
LIMIT
MARKET
STOP_LOSS
STOP_LOSS_LIMIT
TAKE_PROFIT
TAKE_PROFIT_LIMIT
LIMIT_MAKER
Order Response Type (newOrderRespType):
ACK
RESULT
FULL
Order side (side):
BUY
SELL
Time in force (timeInForce):
This sets how long an order will be active before expiration.
Status
Description
GTC
Good Till Canceled An order will be on the book unless the order is canceled.
IOC
Immediate Or Cancel An order will fill as much as possible before it expires.
FOK
Fill or Kill An order will expire if the full order cannot be filled upon execution.
Kline/Candlestick chart intervals:
s-> seconds; m -> minutes; h -> hours; d -> days; w -> weeks; M -> months
1s
1m
3m
5m
15m
30m
1h
2h
4h
6h
8h
12h
1d
3d
1w
1M
User Registration
Code:
const { Wallet, verifyMessage } = require("ethers"); // ethers.js version 6.13.5
const privateKey = "0x"; // Replace with your actual private key
const wallet = new Wallet(privateKey);
/**
* Signs a message with the given private key.
* @param {string} challenge - The challenge text received from the server.
* @returns {Promise} - The signed message.
*/
async function signMessage(challenge) {
const signature = await wallet.signMessage(challenge);
return signature;
}
Request Data:
{
"signature": "{ecrecover signature generated in step 2}",
"challenge": "{CHALLENGE TEXT received in step 1}"
}
Send an HTTP POST request to the following API with the Ethereum wallet address:
API URL:
https://app.quote.trade/api/getChallenge
Request Data:
{ "login": "{ETHEREUM_WALLET_ADDRESS}" }
Response: Extract the challenge text from the response:
{ "challenge": "{CHALLENGE_TEXT}" }
Generate an ecrecover signature for the challenge text.
Use the Ethereum wallet's private key to sign the challenge text received in step 1. The resulting
signature
will be used for the registration request.
The following code demonstrates how to generate the ecrecover signature using the ethers.js library.
Call the Register User API
Send an HTTP POST request to the following API with the necessary data:
API URL:
https://app.quote.trade/api/registerUser
{ "signature": "{ecrecover signature generated in step 2}", "challenge": "{CHALLENGE
TEXT received in step 1}" }
Response: Extract the requestToken and requestSecret from the
API
response:
const { Wallet, verifyMessage } = require("ethers"); // ethers.js version 6.13.5
const privateKey = "0x"; // Replace with your actual private key
const wallet = new Wallet(privateKey);
/**
* Signs a message with the given private key.
* @param {string} challenge - The challenge text received from the server.
* @returns {Promise} - The signed message.
*/
async function signMessage(challenge) {
const signature = await wallet.signMessage(challenge);
return signature;
}
To authenticate a user, follow these steps:
Prerequisites
Already registered Ethereum wallet address.
Access to the wallet's private key.
Steps
Get the challenge text
Send an HTTP POST request to the following API with the Ethereum wallet address:
API URL:
https://app.quote.trade/api/getChallenge
Request Data:
{ "login": "{ETHEREUM_WALLET_ADDRESS}" }
Response: Extract the challenge text from the response:
{ "challenge": "{CHALLENGE_TEXT}" }
Generate an ecrecover signature for the challenge text.
Use the Ethereum wallet's private key to sign the challenge text received in step 1. The resulting
signature
will be used for the registration request.
The following code demonstrates how to generate the ecrecover signature using the ethers.js library.
Call the Register User API
Send an HTTP POST request to the following API with the necessary data:
API URL: https://app.quote.trade/api/logon
Request Data:
{ "signature": "{ecrecover signature generated in step 2}", "challenge": "{CHALLENGE
TEXT received in step 1}" }
Response: Extract the requestToken and requestSecret from the
API
response:
The response above is illustrative. Request the selected symbol (USDT, USDC, or XUSDC) and use the returned chain and deposit address. The following transfer example applies only when the response selects Ethereum mainnet. A deposit requires the authorized wallet to sign and send the token transfer; retrieving an address does not move funds.
import { ethers } from "ethers"; // (ethers.js version 6.13.5)
// ✅ Configuration: Replace with your actual values
const PRIVATE_KEY = "your_private_key_here"; // ⚠️ Keep this secret!
const DEPOSIT_ADDRESS = "0xYOUR_RETURNED_DEPOSIT_ADDRESS"; // Use getDepositAddress for USDT; verify its chain is ETHEREUM
const USDT_CONTRACT_ADDRESS = "0xdac17f958d2ee523a2206206994597c13d831ec7"; // USDT on Ethereum
const RPC_URL = "https://mainnet.infura.io/v3/YOUR_INFURA_API_KEY"; // Replace with your Infura/Alchemy RPC
// ✅ USDT ERC-20 ABI (Minimal for transfer function)
const USDT_ABI = [
"function transfer(address to, uint256 amount) public returns (bool)"
];
// ✅ Initialize ethers.js Provider & Wallet
const provider = new ethers.JsonRpcProvider(RPC_URL);
const wallet = new ethers.Wallet(PRIVATE_KEY, provider);
// ✅ Connect to USDT Smart Contract
const usdtContract = new ethers.Contract(USDT_CONTRACT_ADDRESS, USDT_ABI, wallet);
async function sendUSDT() {
try {
console.log(`🔹 Sending USDT from ${wallet.address} to ${DEPOSIT_ADDRESS}...`);
// ✅ Convert USDT amount (5 USDT = 5 * 10^6 because USDT has 6 decimals)
const amount = ethers.parseUnits("5", 6);
// ✅ Call transfer function
const tx = await usdtContract.transfer(DEPOSIT_ADDRESS, amount);
console.log("📨 Transaction sent! Hash:", tx.hash);
// ✅ Wait for transaction confirmation
await tx.wait();
console.log("✅ Transaction Confirmed:", tx.hash);
} catch (error) {
console.error("❌ Error Sending USDT:", error);
}
}
// ✅ Execute the function
sendUSDT();
Withdraw
POST /api/sendWithdrawWithVTokenRequest
Submit a signed withdrawal request with a withdrawal-enabled API key and the authenticated account's registered wallet address. The server checks permissions and available balance; the funding contract enforces its withdrawal gates. Request acceptance does not mean the on-chain payout is complete.
The example matches the web client's payload. quantity is an integer string in token base units: 50 USDT is "50000000" at quantity_scale: 6. Use the selected token's decimal scale; set both toAddress and address to the registered wallet. instrumentId: 0 is the client's default when selecting by symbol.
This section preserves the legacy unversioned native endpoint for existing clients. For Binance-compatible regular order flow use POST /api/v2/order, DELETE /api/v2/order, and the V2 status / history queries. Version-specific authentication is summarized in the transport comparison.
POST /api/order
BUY/ SELL
Parameters:
Name
Type
Mandatory
Description
account
INT
YES
User ID
clientOrderId
STRING
NO
Client-provided order ID.
disableLeverage
INT
NO
To enable 5x leverage and shorting, set the disableLeverage parameter to 0. Otherwise, set it to 1. The default value is 0.
price
DECIMAL
YES
Price
quantity
DECIMAL
YES
Quantity
side
STRING
YES
If you want to place a buy order, set side=BUY. If you want to place a sell order, set side=SELL.
Quote.Trade /api/v2 is the Binance-v3-compatible API for all regular order flow. Quote.Trade /api/v3 is reserved for advanced and prompt-order support; it is not the version to use for regular trading.
REST
WebSocket method
Result
GET /api/v2/order
order.status
One native order, or one API-managed parent by its identity.
GET /api/v2/allOrders
allOrders
Bounded array of latest native order snapshots, including closed orders.
GET /api/v2/getOrderStatus GET /api/v2/orderStatus
getOrderStatus, orderStatus
Aliases of order.status.
GET /api/v2/getOrderHistory
getOrderHistory
Quote.Trade alias of allOrders. This is not a Binance endpoint name.
These GET routes cannot place or cancel an order. Placement and cancellation keep their existing endpoints. API-managed parent lists remain on the managed-order list API; native child executions may also appear in native history. Do not count parent size and child fills as separate trades.
Query parameters
Name
Required
Description
symbol
Yes
Exact instrument symbol from exchangeInfo, for example BTC/USD.
orderId
One identity
Server order ID; alternatively supply a client order ID.
origClientOrderId
One identity
Client order ID. Also accepts clientOrderId, clOrdId or clordid. If orderId is also supplied, both identities must match.
timestamp
Yes
Current Unix time in milliseconds.
recvWindow
No
Default 5000 ms; greater than 0 and at most 60000 ms.
signature
Yes
HMAC-SHA256 of the exact encoded query, excluding signature. Send the API key in X-MBX-APIKEY.
Order status
Supply symbol and either orderId or origClientOrderId. The aliases clientOrderId, clOrdId and clordid are accepted. Query client IDs must be nonempty and at most 64 characters; managed-order creation has a separate 36-character limit. Conflicting client-ID aliases are rejected. If both numeric and client IDs are present, both must match the same order. IDs remain 64-bit integers; do not round them through JavaScript floating-point values.
Native lookup checks current and archived orders, then persisted execution reports on a cache miss. Client IDs are case-sensitive. On a cache hit, reused client IDs resolve among cached matching records; persistence is consulted only on a cache miss. Do not reuse client IDs across logical orders or assume a global latest-across-cache-and-database lookup. Use the returned orderId to disambiguate. API-managed parent IDs use the existing negative-ID namespace.
Illustrative canceled native order · no explanation was recorded
Prices and quantities on the new V2 GET queries are decimal strings. A status is the latest known state, not a promise that a new order will fill. Unknown native orders return {"code":-2013,"msg":"Order does not exist"}. A negative managed-parent ID uses the managed lookup and its error contract; do not assume every missing parent returns -2013.
Authentication for V2 GET queries
Use X-MBX-APIKEY and a signed query, with timestamp in Unix milliseconds. HMAC-SHA256 signs the exact URL-encoded query bytes before the signature parameter is appended. A signature header is also accepted. If both are supplied they must agree.
recvWindow defaults to 5000 milliseconds, must be greater than zero and no more than 60000, and accepts up to three fractional digits. Requests 1000 milliseconds or more ahead of server time or older than the receive window are rejected. These V2 GET queries use timestamp validation; the existing POST endpoints retain their nonce rules.
API keys require active READ permission. User/account ownership or an existing on-behalf entitlement and IP restrictions are checked before any lookup. A known order ID never grants access to another account.
Signed GET · client-ID lookup
GET /api/v2/order?symbol=BTC%2FUSD&origClientOrderId=my-btc-limit×tamp=REPLACE_WITH_CURRENT_MS&signature=HMAC_HEX
X-MBX-APIKEY: YOUR_API_KEY
Use the exact symbol returned by the deployment's exchangeInfo catalog. A Quote.Trade USD instrument is not automatically the same product as Binance BTCUSDT spot.
GET /api/v2/allOrders Alias: GET /api/v2/getOrderHistory
Use the same signed GET authentication as order status. Returns an array of latest order snapshots, rather than a list of every execution event.
allOrders requires symbol. It returns one latest snapshot per native order, including NEW, PARTIALLY_FILLED, FILLED, CANCELED, EXPIRED and REJECTED when recorded. An empty successful query returns []. Database failures return an error, never an apparently empty history.
limit: default 500; minimum 1; maximum 1000. Larger or invalid values are rejected.
orderId: inclusive lower bound, not an exact-match filter on this list endpoint. For a forward scan of positive native IDs, start at orderId=1 and continue with the last returned orderId plus one. Starting without orderId selects the newest page; advancing from that page does not recover older orders. Rejections without an assigned ID are not covered by a positive-ID scan; query them by client ID while retained.
Without orderId, the newest numeric order IDs are selected. The returned page is sorted by ascending orderId. This differs from the UI's newest-first managed-parent list.
startTime and endTime: inclusive Unix milliseconds, filtering stored update/event time. This is a Quote.Trade difference from an exchange's order-creation-time filtering.
Client-ID aliases can filter the native list. Use the single-order endpoint for an exact server-ID lookup.
Inclusive update/event-time bounds in Unix milliseconds.
origClientOrderId
No
Client-ID filter; clientOrderId, clOrdId and clordid are aliases.
timestamp / signature
Yes
Signed GET authentication; recvWindow is optional.
Signed GET history request
GET /api/v2/allOrders?symbol=BTC%2FUSD&limit=100×tamp=REPLACE_WITH_CURRENT_MS&signature=HMAC_HEX
X-MBX-APIKEY: YOUR_API_KEY
Existing status and event-history endpoints
POST /api/v2/orderStatus also accepts the alias POST /api/v2/getOrderStatus. It keeps its scaled-integer price/quantity fields and their scale fields. POST /api/v2/getOrderHistory keeps its {"orders":[...]} execution-event envelope and decimal-string fields. Existing POST signing and nonce conventions still apply. Current User.validateNonce accepts every value, so these POST calls do not gain the timestamp freshness checks of the new V2 GET queries; see the REST replay-protection limitation.
Both gain client-ID aliases and additive clientOrderId/status/rejectReason/reason/errorMessage fields. Event history returns at most the latest 1000 retained events in chronological order. For snapshot pagination use the new allOrders endpoint. A specific native history request no longer appends unrelated managed-parent orders. The older unversioned native API is not redefined by this page.
Compatibility and deployment
This adds Binance-style query names, signing, ID lookup, statuses and decimal-string values. It is not a claim of full Binance Spot API parity. Native order snapshots do not currently provide all Binance fields, such as original creation time, cumulative quote quantity and self-trade-prevention metadata. Quote.Trade instruments, FOK execution, managed negative parent IDs and request-rejection retention differ.
Regular placement uses POST /api/v2/order and regular cancellation uses DELETE /api/v2/order. These existing endpoints and their semantics remain unchanged. The new status and history GET routes belong to the same V2 API. The managed /api/v3/openOrders endpoint remains specific to API-managed parents. Managed snapshots have their own schema and do not currently return the native rejectReason/reason/errorMessage fields.
Deploy the updated API and documentation together. Preserve the versioned paths at the gateway: /api/v2/... must reach the V2 API handler, and /api/v3/... must reach the matching advanced-order or prompt servlet. Do not apply a legacy /api/ to /liquidityApi/ rewrite to these versioned paths. An empty HTTP 200 body is not a successful status/history result; verify routing and the deployed API build before interpreting it as an empty order list. The configured GET allowlist must permit orderStatus and allOrders; do not replace a restricted allowlist with a wildcard. If using the new POST alias, allow getOrderStatus for POST as well. Verify signed REST and WebSocket requests against a staging deployment with a read-only test account. Check PostgreSQL plans for account/symbol/order-ID and account/client-ID lookups on production-sized history.
Supply origClientOrderId, clientOrderId, clOrdId or clordid on the order-status query. These aliases also filter native order history. Values are case-sensitive; conflicting aliases are rejected. When both orderId and a client ID are supplied, both must identify the same order.
Canceled and rejected orders
Field
Meaning
status
Latest recorded order state, including CANCELED or REJECTED.
rejectReason
Recorded engine business-rejection enum, when available.
reason
Recorded execution-restatement/cancellation enum, when available.
errorMessage
Recorded rejection text, with JSON escaping preserved.
Missing reasons are null. A canceled order is not necessarily an error. A failed cancellation request must not change the original order to REJECTED.
If you want to STAKE, set side=BUY. If you want to UN-STAKE, set side=SELL.
symbol
STRING
YES
Eg: "USDC"
stake
INT
YES
Set the value to 1
stakeOption
INT
YES
If you want to STAKE, set option value. If you want to UN-STAKE, set stakeOption=0.
Stake Options:
1 = 24-Hour Lockup (Current Rate is 5%)
2 = 6-Month Lockup (Up to 20% APR MIN rate is 5% Guaranteed)
3 = 12-Month Lockup (Up to 30% APR MIN rate is 5.5% Guaranteed)
4 = 18-Month Lockup (Up to 40% APR MIN rate is 6% Guaranteed)
Streams can be accessed either in a single raw stream or in a combined stream
Raw streams are accessed at /ws/listenKey
All symbols for streams are lowercase
Subscribe to a Stream
For this legacy push subscription, requestToken is an account/wallet session token. A key created in API Management is not a session token. An existing valid listen key goes in a separate listenKey field. For signed V2 query messages, send the managed API key in params.apiKey; those messages need no prior subscription login. See signed order queries.
order.status, getOrderStatus and orderStatus query a single order. allOrders and getOrderHistory query bounded native history. Methods are versionless; these queries belong to regular V2 order flow.
Use the existing /ws/listenKey WebSocket API connection and its authentication convention. Supply flat params with apiKey, timestamp and signature. For HMAC, sort all parameter names except signature alphabetically and join their decoded key=value pairs with & before signing.
Successful replies use {"id":"status-1","status":200,"result":{...},"rateLimits":[]}. History uses an array in result. Query errors use the same request id with an error object. Subscribe to private execution updates and reconcile after reconnect using the read-only queries; queries do not submit orders.
Streams can be accessed either in a single raw stream or in a combined stream
Raw streams are accessed at /ws/listenKey
All symbols for streams are lowercase
Subscribe to a Stream
For this legacy push subscription, requestToken is an account/wallet session token. A key created in API Management is not a session token. An existing valid listen key goes in a separate listenKey field. For signed V2 query messages, send the managed API key in params.apiKey; those messages need no prior subscription login. See signed order queries.
Streams can be accessed either in a single raw stream or in a combined stream
Raw streams are accessed at /ws/listenKey
All symbols for streams are lowercase
Subscribe to a Stream
For this legacy push subscription, requestToken is an account/wallet session token. A key created in API Management is not a session token. An existing valid listen key goes in a separate listenKey field. For signed V2 query messages, send the managed API key in params.apiKey; those messages need no prior subscription login. See signed order queries.