Live and prematch
Both in the same shape, so a match moving from prematch to in-play does not change your parsing.
Live and prematch odds for League of Legends, CS2, Dota 2 and Valorant, plus King of Glory, eFootball, eBasketball, eCricket, Rainbow Six and the CS2/Dota 2 duel boards — over REST and a realtime stream, with the provider's raw no-vig probability on every selection. Free key, no card.
A public demo key serves live data with no account. Paste this into a terminal:
curl "https://oddiwire.com/v1/fixtures?key=demo&limit=5"
The demo key is a shared illustration with a small rate limit — enough to see the shape of the data, not to build against. A free key of your own is instant and has its own daily allowance.
Both in the same shape, so a match moving from prematch to in-play does not change your parsing.
The provider's own no-vig probability beside every price. You do not derive it, and neither do we.
Canonical keys and decimal prices, so a model trained on last week's payload still reads this week's.
Server-Sent Events at /v1/stream on the Full plan — changes arrive as they happen.
League of Legends, CS2, Dota 2 and Valorant, plus King of Glory, eFootball, eBasketball, eCricket, Rainbow Six and the CS2/Dota 2 duel boards, sourced from the ODDIN.GG feed. Coverage follows the provider: when a match is priced upstream it appears here, and when the upstream suspends a market this API reports it suspended rather than serving a stale price.
Live counts per title are on /v1/counts, and Provider coverage in the docs is specific about what is and is not carried.
Each title has its own sport code, so one request gets you a single game — or the whole esports board when you leave the filter off. The demo key works on all of them:
curl "https://oddiwire.com/v1/fixtures?key=demo&sport=LOL"
curl "https://oddiwire.com/v1/fixtures?key=demo&sport=CS2&event_type=live"
curl "https://oddiwire.com/v1/fixtures?key=demo&sport=DOTA2&canonical=match_winner,main_total"
Codes today: LOL, CS2, DOTA2, VALORANT, R6 — plus the 1v1 duel boards under CS2_DUELS and DOTA2_DUELS, and the simulations under their own codes. Markets arrive under the same canonical keys as every other sport (match_winner, main_total, map and period markets), decimal prices, with the provider's own no-vig probability attached.
Polling a moving price on a timer is the wrong shape for in-play esports. The Full plan carries a Server-Sent Events stream, so changes arrive as they happen:
const es = new EventSource("https://oddiwire.com/v1/stream?key=YOUR_KEY");
es.onmessage = (e) => apply(JSON.parse(e.data)); // one event per price change
REST stays for the snapshot and backfill; the stream carries the moves. Both read the same board, and a market moving from prematch to live does not change your parsing.
The usual reason to want an esports API is a program, not a page: a pricing model, an arbitrage or value scanner, a Discord bot, a backtest. That shapes what this serves — JSON with cache-control: no-store, one canonical market vocabulary, and a stream so you are not polling a moving price on a timer.
If your agent is writing the integration, llms.txt is a plain-text reference built for exactly that, and the home page has a copy-paste prompt.
| Free | Basic | Full | |
|---|---|---|---|
| REST | 100/day | 5,000/day | 30/sec |
| Realtime stream (SSE) | None | None | Unlimited |
| Drops | None | None | Unlimited |
Card or crypto, cancel any time. Exact prices and checkout are on the pricing section.
Deciding between this and a direct ODDIN.GG contract? See the side-by-side comparison and the measured latency numbers.
Yes — the free plan is 100 REST calls per day against live data, no card.
Yes, on the Full plan: an SSE stream at /v1/stream pushes changes as they happen.
The ODDIN.GG feed. Oddiwire is an independent service, not affiliated with the provider.
Not here — this feed is esports. Our sibling feed OddsRadarWire carries tennis, soccer, cricket, basketball and other traditional sports on the same API shape.