Quickstart
Go from zero to live data in about a minute.
1. Get an API key
API keys are issued by the OpenMarkets team. Email james@openmarkets.ai with the name of your organization and a brief description of what you're building. You'll receive a key in the format om_data_live_….
The plaintext key is only ever shown to you once. Store it in a secret manager immediately — OpenMarkets only retains the hash and cannot recover the original.
2. Make your first request
List the leagues you have access to:
curl
curl https://api.openmarkets.ai/flow/v1/leagues \
-H "X-API-Key: om_data_live_..."The response looks like this:
Response
{
"data": [
{
"id": "lg_nfl",
"name": "NFL",
"participant_type": "team",
"status": "active"
}
],
"pagination": { "next_cursor": null, "has_more": false, "limit": 50 },
"meta": { "timestamp": "2026-04-17T22:00:00Z", "api_version": "v1" }
}3. Fetch live liquidity
Once you have a contest ID, get the current aggregated liquidity:
bash
curl https://api.openmarkets.ai/flow/v1/contests/{contest_id}/liquidity \
-H "X-API-Key: om_data_live_..."Each returned position contains the per-partner best price, available amount, and edges relative to distribution models. Full shape is documented in the REST reference.
4. Stream live updates
For low-latency applications, open a WebSocket and subscribe to the contests you care about. You'll receive liquidity.update events whenever any partner's price or available size changes.
Node.js
import WebSocket from 'ws';
const ws = new WebSocket(
'wss://api.openmarkets.ai/flow/v1/stream?api_key=om_data_live_...'
);
ws.on('open', () => {
ws.send(JSON.stringify({
action: 'subscribe',
channel: 'liquidity',
contest_ids: ['ct_abc123'],
}));
});
ws.on('message', (data) => {
const msg = JSON.parse(data.toString());
if (msg.type === 'liquidity.update') {
console.log(msg.contest_id, msg.changed_entries);
}
});Next steps
- Read the full REST reference to learn about filtering and pagination.
- Read the streaming guide to learn about heartbeats, backoff, and error recovery.
- Review rate limits so you size your traffic appropriately.