Getting started
Tokens & pricing
Every key has a token allowance that resets every 30 days from your billing date on a paid plan. Each call costs a fixed number of tokens.
Costs
Every key has a token allowance per period (default 1,000). On a paid plan it resets every 30 days from your billing date; without one, on the 1st of each UTC month.GET /usage shows the period and resets_at.
| Call | Tokens |
|---|---|
GET /sports, /books, /usage, /_health | 0 |
GET /events (any window, any status) | 1 |
GET /odds with tier=main (default) | 1 |
GET /odds with tier=extended | 5 |
GET /odds for a finished event | same as live (1 main, 5 extended) |
GET /scores (score, result and the model fields on /events and /odds cost nothing extra) | 1 |
GET /history (1 to 5 books) | 2 |
GET /racing/meetings, /racing/race | 1 |
GET /racing/history | 2 (not on the demo key) |
GET /clv | 1 |
POST /clv | 1 per distinct event_id in the batch |
GET /openapi.json, /asyncapi.json | 0 (no key needed) |
| WebSocket streaming | 0 (included on Business and Enterprise) |
WebSocket streaming spends no tokens: it is included on Business (up to 50 live events, 3 connections) and Enterprise, and is bounded by those limits instead. Requests that fail on our side (5xx) or ask for an unknown event (404) are not charged.
Usage headers
Every metered response carries:
| Header | Meaning |
|---|---|
X-Tokens-Cost | Tokens this call cost |
X-Tokens-Used | Tokens used this month, including this call |
X-Tokens-Remaining | Tokens left this month |
X-Tokens-Limit | Your allowance for the current period |
GET /usage returns the same numbers for free.
When tokens run out
Metered calls return 402 until the month resets. The WebSocket spends no tokens, so it keeps streaming.
{"error": {"code": "tokens_exhausted", "message": "monthly token allowance and top-up balance used up",
"tokens_used": 1000, "tokens_limit": 1000, "resets_at": "2026-11-05T03:12:00Z"}}