The odds tell you the price. This tells you where the money went.
For every football market we track how much money is actually matched on each selection — not a bookmaker's price, the real split of the book. Volume, share, and how both moved since the last capture.
One request, the whole book
Every fixture returns its markets with the money split per selection. Share is the slice of that market's total; implied probability is what the attached price says it should be. The gap between them is the interesting part.
$ curl -H "Authorization: Token $BSD_TOKEN" \ https://sports.bzzoiro.com/wom/api/events/ { "results": [{ "id": 35898868, "home_team": "Jeju SK", "away_team": "FC Bayern München", "total_volume": 143388.0, "money": [ { "market": "1X2_AWAY_FT", "volume": 135838.0, "share": 94.73, // of the money on this market "price": 1.11, "implied_probability": 90.09 }, { "market": "1X2_HOME_FT", "share": 2.75, "price": 55.0 }, { "market": "1X2_DRAW_FT", "share": 2.51, "price": 14.5 } ] }] }
Six routes, that's the whole surface
| Route | What it returns |
|---|---|
| /wom/api/coverage/ | What the dataset holds right now. Free with any token. |
| /wom/api/events/ | Fixtures with their latest money split. Filter by date, status, market. |
| /wom/api/events/<id>/ | Every market for one fixture. |
| /wom/api/events/<id>/history/ | Volume and share over time — the series behind a move. |
| /wom/api/movers/ | Selections where money share and implied probability disagree most. |
| /wom/api/markets/ | Market catalog and code format. |
Event ids are BSD ids — the same ones the football API, the odds API and the WebSocket use. Join across all four without a mapping table.
As fast as the numbers actually change
We poll at the cadence the source itself updates, so you are never reading a number that had already moved before we fetched it.
| What | Refresh | Markets |
|---|---|---|
| In-play fixtures | every 15 seconds | Match odds, Over/Under 2.5, BTTS |
| Prematch fixtures | every 60 seconds | Popular set (1X2, O/U 1.5–3.5, BTTS) |
| Long-tail markets | hourly | Corners, cards, correct score, HT/FT, DNB |
A row is stored only when volume or price actually moved, so
captured_at is the real age of what you are reading — not the
time we last ran. Polling, not push: for tick-level odds use the
WebSocket.
What this is not
/wom/api/coverage/ before you build against it.
captured_at tells you exactly how old they are.
Weight of Money
$20/month · cancel any time · same token as your dashboard