DocsCrypto

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.

Authx-api-key headerBase path/cryptoWebSocketcrypto.quotes · crypto.tradesSymbol formatBTCUSD · ETHUSD
GET/crypto/quote/:symbol

Latest quote

Best bid and ask with sizes from the latest normalized book snapshot for the symbol.

ParameterTypeDescription
symbolreqstringEnabled crypto symbol (e.g. BTCUSD). Trimmed and uppercased before lookup. Retrieve the full list from GET /crypto/symbols.
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

JSON
{
  "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.
GET/crypto/trade/last/:symbol

Last trade

Most recent executed trade price and size from the in-memory trade cache.

ParameterTypeDescription
symbolreqstringEnabled crypto symbol (e.g. BTCUSD). Trimmed and uppercased before lookup. Retrieve the full list from GET /crypto/symbols.
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

JSON
{
  "symbol": "BTCUSD",
  "price": 84215.42,
  "size": 0.53,
  "timestamp": 1743512400000
}
Returns 404 no trade available when no consolidated trade exists yet for that symbol.
GET/crypto/snapshot/:symbol

Market 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.

ParameterTypeDescription
symbolreqstringEnabled crypto symbol (e.g. BTCUSD). Trimmed and uppercased before lookup. Retrieve the full list from GET /crypto/symbols.
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

JSON
{
  "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
}
  • change and change_percent use last trade vs previous close; either may be null when inputs are not available in the aggregated view.
  • If prev_close is 0, change_percent is null to avoid division by zero.
GET/crypto/agg/:symbol/:multiplier/:timespan/:from/:to

Aggregates: OHLCV range

Historical OHLCV bars between two UTC calendar dates (inclusive). Sorted then paginated. next_offset is null when exhausted.

ParameterTypeDescription
symbolreqstringEnabled public symbol for the asset: crypto pairs like BTCUSD; stocks use CC:SYMBOL (e.g. US:AAPL). Trimmed before lookup.
multiplierreqnumberInterval multiplier. Valid pairs: 1, 5, 15 with minute; 1, 4 with hour; 1 with day.
timespanreqstringminute · hour · day — case-insensitive. Other values return 400.
fromreqstringUTC date start, inclusive. Format: YYYY-MM-DD.
toreqstringUTC date end, inclusive. Format: YYYY-MM-DD. Must be ≥ from.
ParameterTypeDescription
limitnumberPage size. Default 500, max 5000.
offsetnumberZero-based row offset applied after sort. Default 0.
sortstringSort bars by timestamp t before pagination. asc or desc (default desc).
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

JSON
{
  "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 return 400.
  • Maximum calendar span per interval is enforced, e.g. 31 days for 1 minute bars.
  • results_count is page length, not total rows available.
GET/crypto/agg/:symbol/prev

Previous completed daily bar

Single most-recently completed UTC daily candle for the symbol from the aggregated daily interval pipeline.

ParameterTypeDescription
symbolreqstringEnabled crypto symbol (e.g. BTCUSD). Trimmed and uppercased before lookup. Retrieve the full list from GET /crypto/symbols.
ParameterTypeDescription
intervalstringOptional. 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.
curl -sS "https://api.tickerlayer.com/crypto/agg/BTCUSD/prev" \
  -H "x-api-key: <YOUR_API_KEY>"

Response 200 OK

JSON
{
  "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.

Connect
wss://stream.tickerlayer.com/?apiKey=<YOUR_API_KEY>

Available channels

Quotescrypto.quotesTradescrypto.trades

Subscribe example

After the connection is ready, send a JSON text frame:

Subscribe
{
  "action": "subscribe",
  "channels": [
    "crypto.quotes",
    "crypto.trades"
  ],
  "symbols": [
    "BTCUSD",
    "ETHUSD"
  ]
}

Example message

crypto.quotes
{
  "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.