One open standard for sportsbook data.
A reference model, a live wire, and controlled vocabularies — the format any sportsbook or feed emits odds in. Read it once, consume every publisher.
How to read this site
Three tracks. Pick the one that matches how you work — the data contract itself does not change between them.
Guide
Plain language. What a publisher, a source and a fixture are. No RFC keywords. For trading, ops, product, commercial.
Taxonomy
What a sport, segment, market type and side mean. The id lists are the computer spelling of the same lists.
Specification
The technical contract: MUST / SHOULD / MAY, schemas, streams. Tables and diagrams, still the same rules.
Who it is for
Same format whether you run a book, carry many books, or consume odds. OpenBook is the data contract, not a pricing engine.
Sportsbooks
Publish your own prices without inventing a private dump format. Keep the engine, models and pricing proprietary.
Feeds
Carry many sources in one stream. Every price names its source and how it was obtained — licensed, scraped, or derived.
Consumers
One importer for every publisher: traders, screen operators, researchers, regulators, and downstream books.
The problem it solves
Every book and feed ships odds in its own shape, so every consumer writes a bespoke integration per source, and no neutral cross-vendor market taxonomy exists. OpenBook is the shared contract — like GTFS for transit — so a publisher emits once and any consumer reads it with one importer.
Publisher-neutral
A book publishing its own odds, or a feed carrying many books' odds — same format. Every price carries its source and how it was obtained.
Live by default
Prices, scores and grades stream as diffs with a monotonic sequence — modelled on live transit feeds and MQTT, not a REST endpoint you poll.
Built on real standards
ISO 8601, ISO 4217, CLDR territories, Wikidata ids, schema.org field names, JSON Merge Patch. Nothing reinvented.
Looks like a sportsbook. Travels as data.
The live wire is fixture-first. One subscription follows a match; markets, prices and grades hang off that fixture. This board is an example, not a live feed.
| Market | Home | Away | Over / Under |
|---|---|---|---|
| market:moneyline | 1.90 | 3.80 | 3.40 draw |
| market:spread −0.5 | 1.95 | 1.91 | |
| market:total 2.5 | 1.95 / 1.91 |
Two tiers
The same split GTFS uses: a durable reference layer, and a live layer of diffs that point back at it.
Durable, bounded objects
sport→league→season→stage→fixtureparticipant(teams & individuals) belong to a sportmarket_type,segment,side— shared vocabularies- Publisher-own ids + standard facts + Wikidata
sameAs
Streamed diffs
odds/change— price moves, per source, with provenancescore/update— status, clock, scores per unit & segmentmarket/update— suspend · re-open · voidgrade/create— the grade, once a segment is down
The live wire
One envelope for everything: object + action, a Merge-Patch changes body, and a topic that says the same thing. Fixture-first, so one subscription follows a whole match.
# subscribe to everything about one match openbook/v1/acme-feeds/soccer/fixture/EVT-88213/# # an odds change on that match { "openbookVersion": "0.3.0-draft", "sequence": 104871, "object": "odds", "action": "change", "sport": "soccer", "id": "EVT-88213", "changes": { "markets": [{ "marketType": "market:total", "segment": "segment:soccer:full-time", "line": 2.5, "source": "pinnacle", "provenance": "licensed", "outcomes": [{ "side": "over", "odds": 1.95 }] }]} }
Controlled vocabularies
The piece no one else publishes: shared names for what can be bet and how a match is sliced. Read the taxonomy first; this list is the computer spelling.
JSON Schemas
Draft 2020-12. Machine-normative for what is on the wire. Validate with python3 tools/validate.py.
Resources
Readable copies of this repo, and the standards OpenBook is shaped after. We don't mint what already exists.
This standard
- Guide — plain language
- Examples — one match, in order
- Taxonomy — shared lists, human map
- Specification — the technical contract
- Vocabularies — the id lists
- JSON Schemas
- Decision log
- Building blocks
- Industry patterns
- Protocol comparison
- Versioning · Contributing · Changelog
What it stands on
- GTFS — static catalog + live diffs
- FIX Protocol — open financial messaging
- ISO 20022 — financial message repository
- JSON Schema · OpenAPI · AsyncAPI
- schema.org · Wikidata
- MQTT (ISO/IEC 20922) · CloudEvents
- RFC 7386 Merge Patch · RFC 3339
- OpenRTB — open spec, private engines
Get started
python3 tools/validate.py.sameAs where one exists.Draft status. OpenBook is v0.3.0-draft — the model is settled, the wire may still change before 1.0. Issues and proposals welcome on GitHub.
Open spec, private engines
OpenBook standardises the data contract — schemas and vocabularies — and nothing else. How a book produces, models or prices its data stays entirely its own. The specification is CC BY 4.0; implementations may be fully proprietary. This is how OpenRTB, FIX and GTFS reached adoption.