"What data do I actually need to launch in-play betting?" gets asked at least once a week. Most answers either over-shoot (Sportradar full-fat at $20k/mo) or under-shoot (a free odds-only API that doesn't tell you when a market is suspended). Here's the realistic minimum.
| Feed | Update rate | Why you need it |
|---|---|---|
| Live odds | 0.5–5s | The numbers users see and bet against |
| Suspended-market flag | real-time | You MUST grey out a market the second the upstream suspends it, or you'll take losing bets |
| Live scores | 1–5s | Context — users won't bet on a market without knowing the score |
| Match tracker (LMT-style) | 1s | The pitch widget. Conversion lift is real — multiple operators report +20–40% in-play handle when present |
| Settlement | at FT + post-game | Per-outcome win/lose/void decisions for every market you took |
You do not need: prematch statistics, head-to-head history, lineups, or weather. Those are nice-to-haves that move the needle by single-digit percent. Ship without them; add them in v2.
Each odds payload needs at least these fields per outcome:
event_id — globally unique across your providermarket_id + market_name — e.g. 1004 / "Correct Score"outcome_id + outcome_name — e.g. 2037 / "Over"price — decimal odds, integer * 100 (so 2.50 = 250) is a common wire formatline / special — for handicap, total goals, correct-score (e.g. "+1.5", "2:1")state — open / suspended / settled. This is non-optional.ts — server-side timestamp of last updateThe Euro365 /v1/odds endpoint ships all seven; see the schema.
When a goal is about to be scored, when there's a contested VAR review, when the feed flickers — the upstream provider suspends the market. Your job is to render it as locked (not bettable) within milliseconds. If you don't:
How Euro365 surfaces it: each market carries a s flag at the spec level (0 = open, 1 = suspended). The internal pattern we use on partner sites is to emit suspended outcomes at price 1.00 — the SPA's existing "price <= 1 means locked" rule handles the rest. Cheap and bulletproof.
This is the live pitch animation users see on every modern in-play page. You can build your own from event streams (player positions, possession, dangerous attacks) but it's a 6–9 month project. The pragmatic path is: iframe-embed a vendor widget. Euro365 ships a free embeddable widget with a single line of HTML — that's how most of our customers get the conversion lift without writing it.
"Settlement" means: at full-time, for every outcome you took a bet on, decide win/lose/void/pending. Sounds trivial. It is not.
The Euro365 /v1/settlements endpoint handles V1 (FT-score-settled markets) today, with HT and period data on the roadmap. If you launch with V1 settlement and use a manual review for the long tail, you can ship in weeks instead of months.
| Tier | Monthly cost | What it includes |
|---|---|---|
| Bootstrap (Euro365 Free) | $0 | 100 req/min, live odds, scores, widget. Good for prototype. |
| Indie operator (Euro365 Pro) | ~$99–199 | 3k req/min, WebSocket, settlement, no per-event fee |
| Mid-tier (Sportradar / Genius) | $3k–10k | Full data, branded LMT, dedicated rep, contract negotiation |
| Tier-1 (Betradar / Stats Perform) | $20k+ | Trading-grade data, in-play risk feed, T1 leagues |
If you're shipping your first product, you do not need tier-3. You need tier-1 and the discipline to handle suspensions correctly.