sifting/io
GET/snapshot/:venuegzip required

Market snapshot

Get a full market snapshot across stocks, FX, crypto, commodities, and DEX, every symbol a venue publishes in a single round-trip, or scope it down to your own watchlist. Each tick carries price, sizes, best bid, best ask, symbol, and timestamp.

Parameters

Parameter
venuerequiredenum · path
crypto | forex | stocks | dex.
symbolsstring · query
Comma-separated symbols (up to 250). Case-insensitive. Omit entirely to receive the full market. Any malformed symbol rejects the whole request with 400 rather than returning a partial result.
Accept-Encodingrequiredstring · header
Must include gzip; a full-market snapshot is large. A request without it returns 406 gzip_required. Most HTTP clients negotiate this automatically.

Example

request · shell
curl -H "X-API-Key: $KEY" -H "Accept-Encoding: gzip" --compressed \
  "https://api.sifting.io/v1/snapshot/crypto?symbols=BTCUSD,ETHUSD"
200OKapplication/json (gzip)
{  "data": [    {      "s": "BTCUSD",      "p": "68250.5",      "P": "0.0143",      "b": "68249.9",      "B": "0.21",      "a": "68251.2",      "A": "0.18",      "t": 1716800000000    },    {      "s": "ETHUSD",      "p": "3820.4",      "P": "0.43",      "b": "3820.1",      "B": "1.2",      "a": "3820.7",      "A": "0.9",      "t": 1716800000000    }  ],  "meta": {    "as_of": "2026-05-27T12:00:00Z",    "venue": "crypto",    "count": 2  }}
Loading runner…
First load only

Reference

Two ways to call it
Full market
No query string returns one entry per symbol the venue currently publishes, sorted by symbol. There is no pagination, a snapshot is the complete picture at once.
Specific symbols
?symbols=BTCUSD,ETHUSD,SOLUSD returns only those. Up to 250 per call, case-insensitive.
Envelope
data
array of snapshot entries, one per symbol
meta.as_of
when the response was produced · RFC 3339, UTC
meta.venue
the venue you queried
meta.count
number of entries in data · int
Entry fields
s
symbol · string
p
last trade price · string
P
last trade size · string
b
best bid price · string
B
best bid size · string
a
best ask price · string
A
best ask size · string
t
timestamp · int64 (Unix epoch ms)
Freshness & behavior
Sizes
For forex and stocks (no top-of-book size data), P / B / A come through as 0. That is expected, not an error.
Best-effort
A symbol with a temporarily incomplete record is skipped rather than failing the request.
Empty venue
A venue with nothing to report returns 200 with an empty data array, not an error.
Caching
Live, never cached at the edge. Each call reflects current state at meta.as_of.

Error responses

  • 400invalid_parameter

    A symbol in the list is malformed for the venue. The whole request is rejected so a typo surfaces immediately instead of looking like missing data.

    { "error": "invalid_parameter", "message": "Symbol BTC-USD is not valid for venue crypto." }
  • 403not_entitled

    Your subscription doesn't include this venue. The same entitlement gates the venue's live ticks.

    { "error": "not_entitled", "message": "Your subscription doesn't include the crypto venue." }
  • 404not_found

    Venue path segment isn't one of crypto | forex | stocks | dex.

    { "error": "not_found", "message": "Unknown venue." }
  • 406gzip_required

    Snapshot called without Accept-Encoding: gzip.

    { "error": "gzip_required" }

More in Live market data

See all