API reference

Prices

Last / mark prices across every monitored CEX and DEX as `umbra.price.v1` ticks — a sane-rate best-effort snapshot, not the raw firehose.

Planned /v1 event API

The /v1 endpoints documented here are the published event-API contract, but that serving layer is not deployed and these URLs return 404 today. The production machine rail is live separately at /api/v1/data, /mcp, and the authenticated family WebSocket routes. See Live APIs for endpoints that can be called now.

Each tick is a `umbra.price.v1` event: `venue` is a lowercase slug, `quoted_at` is ISO-8601 UTC, and a DEX tick carries a typed `dex` block (null on CEX). The stream is best-effort and lossy — `sequence` is null and ticks may be dropped under load.

`latest` is a point-in-time REST snapshot; `live` streams the snapshot deltas over WebSocket.

GET latest

Latest snapshot for the requested filters.

GET/v1/prices/latest

Tier: Free (60s delayed) · Builder+ (live)

Query parameters

ParameterTypeDescription
exchangecsvOne or more exchanges, e.g. binance,mexc.
marketstringspot | futures.
symbolstringExact symbol, e.g. BTC_USDT.
chaincsvDEX chains, e.g. solana,bsc.

Response

json
{
  "meta": { "trace": "c_4f2a…", "as_of": "2026-07-08T12:00:00.000Z", "count": 2 },
  "data": [
    { "schema": "umbra.price.v1", "event_type": "price.tick", "sequence": null,
      "venue": "binance", "market": "futures",
      "instrument": { "symbol": "BTC_USDT", "base": "BTC", "quote": "USDT" },
      "price": 67241.3, "mark_price": 67240.8,
      "quoted_at": "2026-07-08T12:00:00.123Z", "dex": null },
    { "schema": "umbra.price.v1", "event_type": "price.tick", "sequence": null,
      "venue": "mexc", "market": "spot",
      "instrument": { "symbol": "BTC_USDT", "base": "BTC", "quote": "USDT" },
      "price": 67235.0, "mark_price": null,
      "quoted_at": "2026-07-08T12:00:00.050Z", "dex": null }
  ]
}

WS live

Live price-tick stream.

WS/v1/prices/live

Tier: Builder+

Query parameters

ParameterTypeDescription
exchangestringFilter to one exchange.
marketstringspot | futures.
chaincsvDEX chains, e.g. solana,bsc.
symbolstringExact symbol.

Response

json
// Ticks arrive in batched snapshot frames (not one record per frame):
{ "type": "prices", "as_of": "2026-07-08T12:00:01.000Z", "count": 2,
  "data": [
    { "schema": "umbra.price.v1", "event_type": "price.tick", "sequence": null,
      "venue": "mexc", "market": "spot",
      "instrument": { "symbol": "BTC_USDT", "base": "BTC", "quote": "USDT" },
      "price": 67235.0, "mark_price": null, "quoted_at": "2026-07-08T12:00:01.000Z", "dex": null },
    { "schema": "umbra.price.v1", "event_type": "price.tick", "sequence": null,
      "venue": "dex-solana", "market": "dex",
      "instrument": { "symbol": "WIF_USDC", "base": "WIF", "quote": "USDC" },
      "price": 2.41, "mark_price": null, "quoted_at": "2026-07-08T12:00:01.000Z",
      "dex": { "chain": "solana", "dex_id": "orca", "pool_address": "…", "token_address": "…", "liquidity_usd": 85000.0 } }
  ] }
// First frame: { "type": "welcome", "family": "prices", "filters": { … }, "trace": "c_4f2a…" }

Event fields

Payloads are curated — only the fields below are exposed. New upstream fields never leak by default (allowlist policy). Every response carries a per-consumer trace watermark.

ParameterTypeDescription
venuestringLowercase venue slug — e.g. binance, mexc, dex-solana.
marketstringspot | futures | dex.
instrumentobjectsymbol / base / quote.
pricefloatLast traded price in the quote currency.
mark_pricefloat?Mark price — futures/perp only; null on spot and CEX ticks without a mark.
quoted_atstringVenue quote time, ISO-8601 UTC ms Z.
dexobject?On-chain pool block (chain, dex_id, pool_address, token_address, liquidity_usd) — DEX ticks only; null on CEX.
sequenceint?Always null — the price stream is best-effort with no gap detection.