Odds and data

The feed, and what it takes to keep it honest.

Prices arrive from Sportradar’s Unified Odds Feed and have to become a catalogue a player can browse and an engine can price against — in the second the market moves, not the minute after.

Three streams, switched not built

Pre-match, live and settlement run as separate streams. They can share one process or take a host each, and which is which is a setting per deployment rather than a build: a busy book puts live on its own machine without anyone recompiling anything.

Prices in memory, not in a table

Current odds are held in Redis under a key per event and per outcome, with a lifetime. The betting engine reads them there when it prices a selection, so accepting a bet does not wait on a database round trip — which is the difference between a price that is current and one that was.

The catalogue in PostgreSQL

Sports, categories, competitions, fixtures, markets and outcomes are stored durably, with the schema versioned in the repository. That is what a player browses and what the backoffice orders, hides and re-illustrates.

Settlement as the results land

Results arrive on their own stream and coupons are settled from them. A wallet call that fails is retried five times with a growing wait, then again every thirty seconds; the backoffice shows whether a coupon is still being retried or now needs a person, which is the distinction that matters at eight in the morning.

A field you have never seen before must not stop the import

Feeds change without warning. When the provider added a field mid-season, an import that insisted on knowing every field would have rejected the event entirely. Unknown fields are tolerated by design, and there is a test that reproduces exactly that failure so it cannot come back.

Questions

What people ask about this.

Answered here rather than in a call.

Which feed provider does the platform use?

Sportradar, through their Unified Odds Feed SDK. The feed service is the only part that speaks to it, so what the rest of the platform sees is a catalogue and a set of prices rather than one vendor’s message format.

How quickly does a price change reach the player?

A change on the feed is written to Redis and pushed down an open WebSocket to every browser showing that market. The player sees the odds move in the list, in the match view and in their betslip at the same moment.

What happens if the feed goes down?

The catalogue and the last known prices stay where they are, so the site does not empty out. What stops is the movement — and a price that is no longer being updated is exactly what the risk rules and the trading desk are there to catch.

Can we use our own odds instead?

The engine prices from what is in the store, so a different source is a matter of writing to it. That is a conversation rather than a setting, and worth having early if you have a trading team of your own.

Want the detail?

This page is the summary. The pages it points at are where the screens and the contracts are described one by one.