Crypto
Spot-style crypto against USD (and similar) using compact symbols such as BTCUSD. All routes live under /crypto.
Quotes and trades are served from in-memory caches over the aggregated, normalized spot view. An empty cache returns 404 (e.g. no quote available). Individual fields may be optional depending on market conditions; see each route for response details.
/crypto/quote/:symbolLatest quote
Best bid and ask with sizes from the latest normalized book snapshot for the symbol.
Path parameters
| Parameter | Type | Description |
|---|---|---|
| symbolreq | string | Enabled crypto symbol (e.g. BTCUSD). Trimmed and uppercased before lookup. Retrieve the full list from GET /crypto/symbols. |
Request
curl -sS "https://api.tickerlayer.com/crypto/quote/BTCUSD" \
-H "x-api-key: <YOUR_API_KEY>"Send runs against the live API with your account key (never exposed in the browser).
Response 200 OK
{
"symbol": "BTCUSD",
"bid": 84210.12,
"ask": 84210.45,
"bid_size": 1.2,
"ask_size": 0.8,
"timestamp": 1743512400000
}404 unknown symbol: symbol not in the enabled registry. 404 no quote available: cache has no quote yet for this symbol./crypto/trade/last/:symbolLast trade
Most recent executed trade price and size from the in-memory trade cache.
Path parameters
| Parameter | Type | Description |
|---|---|---|
| symbolreq | string | Enabled crypto symbol (e.g. BTCUSD). Trimmed and uppercased before lookup. Retrieve the full list from GET /crypto/symbols. |
Request
curl -sS "https://api.tickerlayer.com/crypto/trade/last/BTCUSD" \
-H "x-api-key: <YOUR_API_KEY>"Send runs against the live API with your account key (never exposed in the browser).
Response 200 OK
{
"symbol": "BTCUSD",
"price": 84215.42,
"size": 0.53,
"timestamp": 1743512400000
}404 no trade available when no consolidated trade exists yet for that symbol./crypto/snapshot/:symbolMarket snapshot
Combined view: latest bid/ask, last trade, previous daily close, and derived change metrics in one normalized aggregated snapshot. Missing pieces return as null; an all-null snapshot returns 404.
Path parameters
| Parameter | Type | Description |
|---|---|---|
| symbolreq | string | Enabled crypto symbol (e.g. BTCUSD). Trimmed and uppercased before lookup. Retrieve the full list from GET /crypto/symbols. |
Request
curl -sS "https://api.tickerlayer.com/crypto/snapshot/BTCUSD" \
-H "x-api-key: <YOUR_API_KEY>"Send runs against the live API with your account key (never exposed in the browser).
Response 200 OK
{
"symbol": "BTCUSD",
"bid": 84210.12,
"ask": 84210.45,
"bid_size": 1.2,
"ask_size": 0.8,
"last_price": 84215.42,
"last_size": 0.53,
"last_timestamp": 1743512400000,
"prev_close": 83800.10,
"change": 415.32,
"change_percent": 0.4956
}changeandchange_percentuse last trade vs previous close; either may benullwhen inputs are not available in the aggregated view.- If
prev_closeis0,change_percentisnullto avoid division by zero.
/crypto/agg/:symbol/:multiplier/:timespan/:from/:toAggregates: OHLCV range
Historical OHLCV bars between two UTC calendar dates (inclusive). Sorted then paginated. next_offset is null when exhausted.
Path parameters
| Parameter | Type | Description |
|---|---|---|
| symbolreq | string | Enabled public symbol for the asset: crypto pairs like BTCUSD; stocks use CC:SYMBOL (e.g. US:AAPL). Trimmed before lookup. |
| multiplierreq | number | Interval multiplier. Valid pairs: 1, 5, 15 with minute; 1, 4 with hour; 1 with day. |
| timespanreq | string | minute · hour · day — case-insensitive. Other values return 400. |
| fromreq | string | UTC date start, inclusive. Format: YYYY-MM-DD. |
| toreq | string | UTC date end, inclusive. Format: YYYY-MM-DD. Must be ≥ from. |
Query parameters
| Parameter | Type | Description |
|---|---|---|
| limit | number | Page size. Default 500, max 5000. |
| offset | number | Zero-based row offset applied after sort. Default 0. |
| sort | string | Sort bars by timestamp t before pagination. asc or desc (default desc). |
Request
curl -sS "https://api.tickerlayer.com/crypto/agg/BTCUSD/1/day/2025-11-01/2025-11-30?sort=desc&limit=3" \
-H "x-api-key: <YOUR_API_KEY>"Response 200 OK
{
"symbol": "BTCUSD",
"results_count": 3,
"results": [
{ "o": 83100, "h": 84200, "l": 82950, "c": 83800.10, "v": 1200.5, "t": 1730419200000 },
{ "o": 82500, "h": 83200, "l": 82100, "c": 83100, "v": 980.2, "t": 1730332800000 },
{ "o": 81900, "h": 82700, "l": 81500, "c": 82500, "v": 1100.8, "t": 1730246400000 }
],
"next_offset": 3
}- Valid pairs: 1, 5, 15 /
minute; 1, 4 /hour; 1 /day. Others return400. - Maximum calendar span per interval is enforced, e.g. 31 days for 1 minute bars.
results_countis page length, not total rows available.
/crypto/agg/:symbol/prevPrevious completed daily bar
Single most-recently completed UTC daily candle for the symbol from the aggregated daily interval pipeline.
Path parameters
| Parameter | Type | Description |
|---|---|---|
| symbolreq | string | Enabled crypto symbol (e.g. BTCUSD). Trimmed and uppercased before lookup. Retrieve the full list from GET /crypto/symbols. |
Query parameters
| Parameter | Type | Description |
|---|---|---|
| interval | string | Optional. 1m · 5m · 15m · 1h · 4h · 1d. Returns the most recently settled bar at that interval instead of the previous daily bar, and adds interval, bar_start, bar_end and as_of to the response. Omit for the daily bar. |
Request
curl -sS "https://api.tickerlayer.com/crypto/agg/BTCUSD/prev" \
-H "x-api-key: <YOUR_API_KEY>"Response 200 OK
{
"symbol": "BTCUSD",
"result": {
"o": 83100,
"h": 84200,
"l": 82950,
"c": 83800.10,
"v": 1200.5,
"t": 1730419200000
}
}404 no bar available when the daily bar cannot be resolved yet. Pass ?interval= (1m, 5m, 15m, 1h, 4h, 1d) for the most recently settled bar at that interval instead; the response then also carries interval, bar_start, bar_end and as_of. While the market is closed the last real bar is returned, still labelled with its own bar_start.WebSocket Streaming
Stream live quotes and trades for this asset class over the public WebSocket.
wss://stream.tickerlayer.com/?apiKey=<YOUR_API_KEY>Available channels
Subscribe example
After the connection is ready, send a JSON text frame:
{
"action": "subscribe",
"channels": [
"crypto.quotes",
"crypto.trades"
],
"symbols": [
"BTCUSD",
"ETHUSD"
]
}Example message
{
"type": "quote",
"channel": "crypto.quotes",
"asset": "crypto",
"symbol": "BTCUSD",
"bid": "84210.12",
"ask": "84210.45",
"bid_size": "1.2",
"ask_size": "0.8",
"ts": 1743512400000
}crypto.trades is a consolidated tape: every execution from every venue we aggregate is delivered, in arrival order. Summing size over a window therefore gives you real consolidated volume for that window.
size is the raw executed base-asset amount for that single trade, exactly as the venue reported it, with no rounding and no normalisation. Two executions may legitimately carry the same price, size and timestamp; they are distinct trades and both are delivered.
General WebSocket documentation
For authentication, subscribe/unsubscribe lifecycle, errors, limits, and heartbeats, see the WebSocket overview and Subscriptions.