Esports odds feed

An esports odds feed

A continuously updated board of live and prematch prices 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, from the ODDIN.GG feed: REST for snapshots, SSE for changes, the provider's raw no-vig probability on every selection. Oddiwire is independent and unaffiliated with the provider.

A feed is not a pull

A single API call answers one question: what is this price right now? It cannot tell you the price moved three seconds ago, and nothing says when the next move arrives. Build on that and you write a poller, a store of current state, and a staleness rule.

A feed holds that state for you. Fixtures appear as they are priced upstream, markets change in place, and each fixture carries the timestamps of its last update. Freshness becomes a number you read rather than a guess you make.

First call, with a public demo key

Calls need a key, not an account. Paste this into a terminal:

curl "https://oddiwire.com/v1/fixtures?key=demo&sport=CS2&canonical=match_winner&limit=1"

A real response from this feed, fetched 15 September 2026 and trimmed here — one long id per selection is left out:

{
  "count": 10,
  "events": [
    {
      "sport": "CS2",
      "event_type": "prematch",
      "status": "PREMATCH",
      "name": "Team Brute vs G2 Ares",
      "starts": "2026-09-15T08:00:00.000Z",
      "updated_at": "2026-09-15T06:37:12.543Z",
      "streamed_at": "2026-09-15T06:01:49.293Z",
      "markets": [
        {
          "market_id": "7cd9b6e4-5a5f-40ca-b52e-8fa59325518b",
          "market": "Match Winner - Twoway",
          "canonical": "match_winner",
          "tier": 1,
          "structure": "exclusive",
          "status": "OPEN",
          "in_play": false,
          "selections": [
            { "name": "Team Brute", "price": 1.55, "fractional": "55/100",
              "probability": 0.602 },
            { "name": "G2 Ares",   "price": 2.35, "fractional": "135/100",
              "probability": 0.398 }
          ]
        }
      ]
    }
  ]
}

count is the size of the board matching your filter, not the events on the page. The demo key is a shared bucket of 10 requests per 5 minutes — enough to see the shape. A free key carries 100 REST calls a day, no card.

What the feed carries

The board covers League of Legends, CS2, Dota 2 and Valorant, plus King of Glory, eFootball, eBasketball, eCricket, Rainbow Six and the CS2/Dota 2 duel boards, live and prematch in the same shape, so a match crossing from one to the other does not change your parsing.

Every selection carries three views of one outcome: a decimal price, a fractional price and the provider's raw no-vig probability. That probability is passed through unmodified — not recomputed, not renormalised — so it stays the provider's number. The priced odds above carry the usual margin; 0.602 and 0.398 are the vig-free pair.

How markets are normalised

Titles spell the same bet differently — Match Winner - Twoway, Winner, or a longer name — so no single one is safe across titles. Every market carries the provider's own wording in market, a stable canonical key meaning the same thing everywhere, plus a tier and structure.

Tier 1 keys are documented and stable: match winner, main handicap, main total, team totals, their first-period equivalents and the esports map markets. Tiers 2 and 3 are broader and beta — served without the same promise. structure says which arithmetic applies, because treating every market as a probability distribution reports false errors.

Only OPEN markets are served by default, so a finished market priced like a live one never reaches your database. Rules: canonical keys and tiers, what is tradeable.

Delivery: poll or stream

REST is a snapshot: one request, one response, no connection to look after. The cost moves to your side — a timer, a diff against what you already held, and a rule for how stale is too stale.

Server-Sent Events invert that. On the Full plan /v1/stream holds one connection open and pushes an event per upstream price push, with keepalive pings so an idle connection is distinguishable from a dead one. You write a reconnect path instead of a poll loop.

Both read the same normalised market set, so this is one integration, not two. Price-drop alerts are ready-made, unlimited on Full. Access is self-serve: see pricing and the API reference.

What to check before choosing a supplier

  • Is there a freshness signal you can read? A supplier that cannot tell you the age of a price leaves you trusting it or re-fetching it. Every fixture carries updated_at and streamed_at; /v1/health reports last_frame_at and seconds_since_last_frame upstream.
  • What does coverage exclude? A high coverage number is easy to print. Ask what is withheld: a market whose selections are not all named is a price with no outcome attached, and this feed withholds those rather than guessing.
  • Whose vig-free probability is it? If the supplier computes it, you inherit their method. Ask whether the number is the provider's own.
  • Are the duel boards covered? Many esports feeds stop at team-versus-team. If your users follow 1v1 play, check those boards exist as first-class sport codes.
  • Is movement detection included? Price-drop alerts are a small feature and weeks of work.
  • Is redistributing the odds licensed? Odds are not public domain. Whoever supplies them must be entitled to redistribute them, and if your product passes prices to third parties, your own use needs covering too.

Self-serve feed or a direct contract

The same prices reach you either way. Direct provider access is an enterprise contract with no public price list; research into competitive pricing puts it around $29,999 per month as of September 2026 — a research figure, not a quote.

Latency here is measured, not claimed: 457 ms p95 line-change latency against 411 ms direct, September 2026 OddsBench run from US-East, with the methodology published. The side-by-side comparison covers the rest of the trade-off.

Endpoints rather than a buying decision? They are on the esports API page and in the docs; an agent can wire it up from llms.txt or the MCP server.

Questions

What does an odds feed give me that a one-off API call does not?

Continuous state, changes and a freshness signal. One call answers what the price is now; a feed keeps the board current and timestamps each fixture.

Can I try the feed before signing up?

Yes. The demo key is key=demo on any REST endpoint, no signup, in a shared bucket of 10 requests per 5 minutes. A free key is 100 calls a day, no card.

How do I get live changes instead of polling?

The Full plan carries a Server-Sent Events stream at /v1/stream, pushing one event per upstream price push. REST stays for the snapshot and backfill.

Do I need a licence to redistribute the odds?

Odds are not public domain. Check that the supplier is entitled to redistribute them, and confirm your own use with the data owner before you ship.

How much does a direct ODDIN.GG contract cost?

No public price list. Research into competitive pricing puts direct access near $29,999 per month (September 2026) — a research figure, not a quote. Oddiwire is self-serve: free, $29, or $299.