Language prefix
All endpoints are prefixed with a language code:/en/.../de/.../fr/...
sportId, fixtureId, etc.) are language-independent.
Sports, tournaments, seasons
sportId
- Integer.
- The first two digits embedded into several downstream IDs.
- Discover via
/sports.
tournamentId
- Integer.
- Belongs to exactly one sport.
- Discover via
/tournaments.
seasonId
- Integer.
- Belongs to exactly one tournament.
- Discover via
/seasons.
Markets and outcomes
Relationship between marketId and outcomeId
Markets and outcomes are tightly coupled by design:
- A market represents a complete betting market (for example moneyline, 1x2, totals).
- A market contains multiple outcomes.
- All outcomes that belong to the same market share the same
marketId. - The first
outcomeIdof a market is always equal to themarketId.
ID structure
BothmarketId and outcomeId are integers constructed as:
11xxxx→ basketball market or outcome14xxxx→ American football market or outcome
- Unlimited markets and outcomes per sport
- Fast grouping by sport
- Immediate visibility of market relationships
Why marketId matters (arbitrage & modeling)
All outcomes under a single marketId together represent a complete probability space.
This makes marketId especially useful for:
- Arbitrage detection
- Overround / margin calculations
- Probability normalization
- Market completeness checks
marketId.
Participants and players
participantId
- Integer.
- Represents teams or competitors in fixtures.
- Discover via
/participants.
playerId
- Integer.
- Used for player proposition markets.
playerId = 0typically represents a non-player market.- Discover via
/players.
Fixture IDs
fixtureId structure
fixtureId is a string that encodes multiple pieces of information:
id→ provider identifier / short slug11→ sportId (2 digits)000132→ tournamentId (6 digits)62926199→ provider’s native fixture ID
Why this matters
From thefixtureId alone, you can infer:
- The sport
- The tournament
- The upstream provider
- Global uniqueness
Future IDs
futureId structure
futureId follows a similar principle:
- Provider
- Sport
- Season
- Market
fixtureId, this makes futures:
- Globally unique
- Self-describing
- Easy to debug and trace
Odds identifiers
Fixture odds keys
For fixtures, a single price is uniquely identified by:Future odds IDs
For futures, odds are uniquely identified by:- The future
- The bookmaker
- The outcome
- The participant (when applicable)
- The player (for props)
Storage recommendation (important)
We strongly recommend using these identifiers as primary keys in your storage: Fixture odds:- No duplicates
- Simple updates
- Efficient time-series storage
- Easy reconciliation across snapshots and backfills
Timestamps (seconds vs milliseconds)
This API intentionally uses both epoch seconds and epoch milliseconds, depending on context.Epoch seconds (UTC)
Used for scheduled or coarse-grained time values:startTimestartTimeFromstartTimeTo
Epoch milliseconds (UTC)
Used for high-frequency price updates:changedAt- Odds
sincefilters for fixtures - Futures odds
createdAt
Recommendation
- Store timestamps as integers.
- Do not assume milliseconds where seconds are documented (or vice versa).
- Normalize internally only if needed.
Implementation recommendations
Server Location Matters
To achieve the lowest latency for realtime updates:- The fastest delivery regions are Central Europe (recommended) and US East.
- For best performance, deploy your backend in the same datacenters we use, such as:
- If you’re building prediction markets or models sensitive to latency, consider:
- Deploying in Austria (AT) via Netcup, or
- Using AWS eu-west-1 (Ireland)
⚡ Servers colocated near our streaming infrastructure receive updates faster and with fewer hops.
Snapshot + realtime pattern
A reliable integration pattern:- Fetch HTTP snapshot (fixtures, odds, or futures)
- Subscribe to WebSocket for realtime updates
- If WebSocket signals
snapshot_required:- Re-fetch HTTP snapshot
- Resume realtime stream
Efficient backfills
- Use
sinceparameters where available - Avoid full historical fetches unless required
- Store odds keyed by their odds identifiers for deduplication
Rate limit handling
- Read
X-RateLimit-Limit,X-RateLimit-Remaining, andX-RateLimit-Reset - On HTTP 429, respect
Retry-Afterand back off
Summary
This API is designed so that:- IDs are self-describing
- Relationships are derivable without joins
- Odds identifiers are globally unique
- Arbitrage and storage logic are straightforward and robust