Oracle Price Status
| Asset | Price (USD) | Status | Sources | Spread | Age | Sources in use |
|---|---|---|---|---|---|---|
| Waiting for data… | ||||||
Exchange streams
| Stream | State | Markets | Quotes | Last message | Reconnects | Last 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"}
]}| Field | Meaning |
|---|---|
price | USD price: median of the exchanges that agree. null when no exchange has fresh data. |
status | ok = enough exchanges agree · degraded = fewer than the asset's minimum · down = no fresh data. |
sourcesUsed / sourcesTotal | Exchanges contributing to the price, out of those configured for the asset. |
updatedAt | Time of the freshest exchange quote used. |
sources | Only with detail=true: each exchange's market, USD price and state (used, outlier, stale, no_data). |
4. Endpoints
| Endpoint | Returns |
|---|---|
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/ws | WebSocket. Send {"op":"subscribe","symbols":[…]} or {"op":"unsubscribe",…} any time; {"op":"list"} shows your subscription; {"op":"ping"} gets a pong. |
GET /v1/prices | Current snapshot of every asset, with per-exchange detail. |
GET /v1/prices/:symbol | Current snapshot of one asset, e.g. /v1/prices/btc. |
GET /v1/tokens | Available symbols. |
GET /health | Service 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.