Oracle Price Status

connecting… Updated — USDT/USD — Feeds — Use the API ↓
AssetPrice (USD)StatusSources SpreadAgeSources in use
Waiting for data…

Exchange streams

StreamStateMarketsQuotes Last messageReconnectsLast error

Use the API

1. Pick assets

Choose any assets and the examples below update to match. Symbols are case-insensitive, and all selects every asset. No API key is needed.

Loading assets…

2. Get prices

3. What you receive

Streams send every chosen asset when you connect, then only assets whose price or status changed, batched at most every 250 ms. Each message looks like:

{"type":"prices","timestamp":"2026-09-30T21:58:30.638Z","data":[
  {"symbol":"GOLD","price":4161.6998,"status":"ok","sourcesUsed":5,"sourcesTotal":5,
   "updatedAt":"2026-09-30T21:58:30.545Z"}
]}
FieldMeaning
priceUSD price: median of the exchanges that agree. null when no exchange has fresh data.
statusok = enough exchanges agree · degraded = fewer than the asset's minimum · down = no fresh data.
sourcesUsed / sourcesTotalExchanges contributing to the price, out of those configured for the asset.
updatedAtTime of the freshest exchange quote used.
sourcesOnly with detail=true: each exchange's market, USD price and state (used, outlier, stale, no_data).

4. Endpoints

EndpointReturns
GET /v1/stream/prices?symbols=…Server-Sent Events stream of the chosen assets. Unknown symbols return 400 with the list of available ones.
WS /v1/wsWebSocket. Send {"op":"subscribe","symbols":[…]} or {"op":"unsubscribe",…} any time; {"op":"list"} shows your subscription; {"op":"ping"} gets a pong.
GET /v1/pricesCurrent snapshot of every asset, with per-exchange detail.
GET /v1/prices/:symbolCurrent snapshot of one asset, e.g. /v1/prices/btc.
GET /v1/tokensAvailable symbols.
GET /healthService and exchange-stream health.

Limits: 20 concurrent streams per IP (SSE and WebSocket combined) and 600 HTTP requests per minute per IP. Streams over the limit get HTTP 503. Clients that fall far behind are disconnected, so reconnect on close.