Crypto
Spot-style crypto against USD (and similar) using compact symbols such as BTCUSD.
Symbols
BTCUSD and ETHUSD. List enabled symbols with GET /crypto/symbols (see Symbols → Crypto).Symbol list
Returns enabled crypto spot symbols with display names and a "crypto" type discriminator; sorted for stable discovery.
Request
curl -sS "https://api.tickerlayer.com/crypto/symbols" \
-H "x-api-key: <YOUR_API_KEY>"Response 200 OK
{
"data": [
{ "symbol": "BTCUSD", "name": "Bitcoin / USD", "type": "crypto" },
{ "symbol": "ETHUSD", "name": "Ethereum / USD", "type": "crypto" }
],
"count": 2
}Notes
GET /symbols merges crypto, forex, commodities, ETFs, and indices, not stocks. Prefer GET /crypto/symbols for crypto-only discovery.Latest quote
Best bid and ask with sizes from the latest normalized book snapshot for the symbol.
Path parameters
symbol- 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
}Notes
404 unknown symbol: symbol not in the enabled registry. 404 no quote available: cache has no quote yet for this symbol.Last trade
Most recent executed trade price and size from the in-memory trade cache.
Path parameters
symbol- 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
}Notes
404 no trade available when no consolidated trade exists yet for that symbol.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
symbol- 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
}Notes
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.
Previous bar
Single most-recently completed UTC daily candle for the symbol from the aggregated daily interval pipeline.
Path parameters
symbol- Enabled crypto symbol (e.g. BTCUSD). Trimmed and uppercased before lookup. Retrieve the full list from GET /crypto/symbols.
Query parameters
interval- Returns the most recently settled bar at that interval instead of the previous daily bar, and adds
interval,bar_start,bar_endandas_ofto the response. Leave it out for the daily bar.Values1m5m15m1h4h1d
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
}
}Notes
404 no bar available when the daily bar cannot be resolved yet. A bar requested with ?interval= is held for a short settle lag after it closes, so small clock differences between callers do not change which bar comes back, and it is the same bar the range endpoint returns for that window. Cache-Control and ETag mark when the value can next change. While the market is closed the last real bar is returned, still labelled with its own bar_start.Aggregate bars (OHLCV)
Historical OHLCV bars between two UTC calendar dates (inclusive).
Path parameters
symbol- An enabled symbol of this asset class, for example
BTCUSDorUS:KO. Trimmed before lookup. multiplier- Bar size in units of
timespan:1,5or15withminute;1or4withhour;1withday. Other pairs return400, and the message lists the valid ones. timespan- Case-insensitive. Other values return
400.Valuesminutehourday from- First UTC date, inclusive, as
YYYY-MM-DD. to- Last UTC date, inclusive, as
YYYY-MM-DD. Not beforefrom.
Query parameters
limit- Page size, up to
5000.results_countis the size of this page andtotal_countthe bars in the whole range; follownext_offsetuntil it isnull.Default500 offset- Zero-based row offset, applied after sorting.Default
0 sort- Order of bars by timestamp
t, applied before pagination.ValuesascdescDefaultdesc
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
}Notes
- One request covers at most 31 days of 1-minute bars, 90 of 5-minute, 180 of 15-minute, 365 of hourly, 730 of 4-hour and 5000 of daily bars, counting
fromandtoas whole UTC days. A longer range returns400with the limit in the message.
WebSocket
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, Subscriptions and Message types.