Order Book
Type: NONE · Weight: 5 (regardless of limit)
Status: Implemented.
GET /api/v3/depth
Snapshot of the live order book from the matching engine, best levels first.
Request
GET /api/v3/depth?symbol=CBTC-USDCB&limit=20
Query params
| Name | Type | Required | Default | Notes |
|---|---|---|---|---|
symbol | string | yes | — | e.g. CBTC-USDCB. |
limit | integer | no | 100 | Levels per side. 0 → default; values above 5000 are clamped to 5000. Any value in range is accepted (not restricted to Binance's 5/10/20/50/100/500/1000/5000 set). |
Response — 200 (values illustrative)
{
"lastUpdateId": 1756600000123,
"bids": [
["59990.00", "0.2500"],
["59985.50", "1.0000"]
],
"asks": [
["60010.00", "0.1200"],
["60012.00", "0.8000"]
]
}
| Field | Type | Notes |
|---|---|---|
lastUpdateId | number | The snapshot's millisecond timestamp (matching-engine clock, gateway clock as fallback). Monotonic per symbol, but not a Binance update-id sequence — there is no diff stream to reconcile against. |
bids[], asks[] | [price, qty] string pairs | Bids descending, asks ascending. |
Errors
| HTTP | code | When |
|---|---|---|
400 | — | symbol missing (framework rejection, plain-text body). |
429 | -1003 | Per-IP public weight exhausted. |
If the matching engine cannot serve the snapshot (engine restarting, or a symbol it does not know), the endpoint returns HTTP 200 with empty bids and asks and a fresh lastUpdateId rather than an error. Treat an empty book on a normally liquid market as "engine unavailable" and retry, not as "no liquidity".
Differences from Binance
lastUpdateIdis a timestamp, not an update sequence number. Use the WebSocket partial-depth streams for a 250 ms feed; there is no diff-depth stream to apply on top of this snapshot.- Weight is a flat 5.