Every market. One API. For humans and agents.
Every market we cover, every venue we've connected — sportsbooks, peer-to-peer platforms, prediction markets, and sweeps — normalized into one real-time stream. Query via REST, subscribe via WebSocket, or point Claude / Cursor at our MCP server and let your agent build on top.
$ curl https://api.openmarkets.ai/flow/v1/contests \
-H "X-API-Key: om_data_live_…"
{
"data": [
{
"id": "ct_4f2a1b",
"title": "Chiefs vs. 49ers",
"starts_at": "2026-09-07T20:20:00Z",
"status": "open"
}
],
"meta": { "api_version": "v1" }
}The market, normalized.
Every venue we connect — sportsbooks, P2P, and prediction markets — in one schema. Read it over REST, or subscribe over WebSocket for live changes.
REST
Snapshots
/flow/v1Leagues, contests, markets, participants, liquidity, orderbook depth, and live game state — normalized across every connected venue. Cursor-paginated, filterable, cached.
GET /flow/v1/contests
GET /flow/v1/contests/:id/liquidity
GET /flow/v1/depth/:position_hash
GET /flow/v1/contests/:id/stateREST reference WebSocket
Live
/flow/v1/streamSubscribe to contest IDs and receive only what changed — liquidity and contest_state channels. Millisecond latency, no polling.
wss://…/flow/v1/stream
subscribe { contest_ids }
channel: liquidity
channel: contest_stateStreaming reference - Venue types covered
- Books · P2P · PMs · Sweeps
- Avg. update latency
- < 2s
- Markets normalized
- Moneyline · Spread · Total · Futures · Props
- Transports
- REST + WebSocket + MCP
Pick your transport.
Same data, three shapes. Use what fits your stack — including your AI's.
REST
Curl, fetch, anything. Cursor-paginated, filterable, cached.
WebSocket
Subscribe to contest IDs, receive only changes. Millisecond latency, no polling.
MCP
Point Claude, Cursor, or any MCP client at one URL. 14 tools. Zero SDKs.
Everything wired in.
Flow is the same data plane that runs OpenMarkets internally. We've done the normalization, the change detection, and the failover so you don't have to.
One normalized schema
Same league, contest, market, position model across every partner. Stop writing six adapters.
Real-time WebSocket
Subscribe to contest IDs. Receive only changes — no polling, no debouncing your own way out.
Depth and consensus
Full per-partner orderbook depth, plus consensus and distribution-model fair values out of the box.
Production-grade auth
Per-key rate limits, usage analytics, instant revocation. Hashed at rest — plaintext shown once.
Six terms. That's it.
The Flow data model fits on one screen. Once you have it, every endpoint in the reference reads naturally.
- League
- Top-level grouping like NFL, NBA, NHL.
- Contest
- A specific event (game, match, tournament) inside a league.
- Market
- A market on a contest — moneyline, spread, total.
- Position
- A unique outcome identified by a position_hash: contest + market + side + variable + participant + timeframe.
- Liquidity
- Best-available prices across every connected partner at a position, plus consensus and distribution fair values.
- Depth
- Full orderbook levels per partner for a single position.
Explore the docs
Start with the Quickstart, then jump to whichever topic fits your stack.
Quickstart
Make your first authenticated request in under a minute.
MCP for agents
Point Claude / Cursor at our MCP server. 14 tools instantly — no SDK.
Historical data (coming soon)
Tick-level archive across every venue — for backtesting, training, and research.
Authentication
How API keys work, how to rotate them, and how to handle 401s.
Rate limits
Per-minute and per-day budgets, response headers, and 429 handling.
Errors
All error codes, when they happen, and how to recover.
REST reference
Markets, odds, liquidity, depth & live game state — with a built-in “Try it” console.
Streaming
Subscribe to contest IDs and receive liquidity updates in real time.
Build with OpenMarkets today.
The API lives at https://api.openmarkets.ai/flow/v1 (stream at wss://…/flow/v1/stream). Authenticate with an API key. Current version: v1.