The active book list
GET /api/v1/bookmakers requires a key
It requires an API key (the Free one takes a minute, no card) and accepts no parameters: the fields in the table are read in the response, not passed in the URL.
The odds of 40+ ADM-licensed Italian operators in one normalized JSON, together with 160+ international books and exchanges: one feed, one monthly quota.
If you've tried to build anything on the Italian market — a comparison tool, a bot, a model, a dashboard — you've probably seen the bill: global odds APIs are built for US, UK and offshore operators, and they carry part of the ADM licensees, often with a price for every extra book. Comparing the regulated Italian market takes all of them, together.
odss-api exists for that: the odds of 40+ ADM-licensed operators, normalized in a stable JSON, alongside the international reference books used as a “sharp” benchmark, among 160+ international books. Every price is attributed to its book and carries its own last_update; the age of the prices you receive is measured and public on the status page.
40+ ADM-licensed operators, plus international reference books and exchanges. We don't publish a brand wall: the list that matters is the one in the feed, right now.
Every book in the GET /api/v1/bookmakers response carries these fields:
| Field | What it tells you |
|---|---|
key | The book's identifier: the value you pass in the bookmakers= parameter of /api/v1/odds. |
country | The licensing country (ISO 3166-1 code, for example IT), or world when no country is attributed to the book. |
playable_it | true only for books holding an Italian ADM licence, i.e. playable from Italy. |
is_exchange | true for exchanges. |
source | The price list's channel type: direct | partner_feed. |
GET /api/v1/bookmakers requires a key
It requires an API key (the Free one takes a minute, no card) and accepts no parameters: the fields in the table are read in the response, not passed in the URL.
GET /api/v1/odds?bookmakers=…
To restrict odds to a subset of books, use the bookmakers= parameter on /api/v1/odds, with comma-separated key values.
GET /api/v1/coverage public, no key
It counts every operator once, with its dedicated market lanes under the brand, like /bookmakers (where the keys of those lanes are in feed_keys).
GET /api/v1/odds returns all cross-book odds by event and market, filterable by sport, league, market and bookmakers (those exact parameter names: an unknown one returns 400 rather than being ignored).curl -G https://odss-api.com/api/v1/odds \ -H "x-api-key: odss_live_..." \ -d sport=calcio -d market=1x2 \ -d bookmakers=sisal,snai,goldbet
The key goes in the x-api-key header. To try the response shape without a key there is the sandbox, /api/v1/mock/odds, with fake books.
| Feature | odss-api | Global APIs |
|---|---|---|
| Italian ADM bookmakers | 40+ in the feed | Few, often priced per book |
| bet365 / Pinnacle | Pinnacle yes, bet365 live only | Partial |
| Billing model | Per account (monthly quota) | Often per book or credits |
| Cross-book matching | Deterministic event_id | Often heuristic |
| Freshness | Per-book last_update, public served age | Often not exposed |
| Free tier | Free forever | Varies |
Comparison against the average of the global providers reviewed (2026). Our side is verifiable from the public endpoints and the status page.
We don't claim it: we measure it. The age of the odds you receive — p50 and p95, now and over the last 24 hours, measured on the snapshot the API is serving — is published on the status page, which refreshes every 30 seconds: today's number is there, not in a paragraph that ages. The targets we publish are p50 ≤ 15 minutes and p95 ≤ 60 minutes (see the SLA), capturing all markets. Every quote in the responses carries its own last_update: you judge, data point by data point.
The Free plan includes 500 requests a month with the same coverage as the paid plans: same ADM bookmakers, same JSON schema, same freshness. You generate the key in a minute from the dashboard, without entering a card.
When you need more volume, the paid plans and their VAT treatment are on the pricing page. Published prices exclude VAT; the total is always shown in the checkout summary, which you confirm before ordering (§4 of the Terms).
40+ ADM-licensed Italian operators, plus international reference books and exchanges. We don't publish a brand list: the active book list, with the country, playable_it, is_exchange and source fields, is at GET /api/v1/bookmakers, which requires an API key (the Free one takes a minute, no card). Without a key, GET /api/v1/leagues and GET /api/v1/coverage are public.
Some carry part of them, often with a price for every extra book. odss-api puts 40+ ADM licensees and 160+ international books in one feed and one monthly quota, in one normalized JSON schema, with every price attributed to its book and its last_update: check it on /api/v1/coverage, public and without a key.
Normalized JSON with a deterministic event_id shared by every market of the same fixture, and a last_update per quote per book. One endpoint (GET /api/v1/odds) returns all cross-book odds by event and market.
Yes. The Free plan is forever (500 requests/month) with the same data coverage as the paid plans. You generate the key from the dashboard: it takes an email, a password and your billing details, no card.
The Free plan has the same coverage as the paid plans: check it against your own use case, no card needed.
curl https://odss-api.com/api/v1/mock/odds