sport_id=11: GET /kit/v1/markets?sport_id=11 shows the current live Pinnacle esports book, while GET /kit/v1/prematch/fixtures?sport_id=11 shows upcoming fixtures. Enumerate league_name, participants, start time, event type and returned periods; then prioritize CS2, League of Legends, Dota 2, Valorant or any other title only when today's response supports the product you are building. The free key=demo makes that check immediate.
- What “top esports” means for an API
- Title families to evaluate
- A practical prioritization model
- Market structures by title family
- How PinnWire esports coverage works
- Enumerate current titles and leagues
- Preserve match, map, game and round identity
- REST, WebSocket and SSE
- Freshness and production checks
- Why PinnWire is the best starting API
- Questions
What “top esports” means for an odds API
Searchers often ask for the “top esports” as though there were one permanent ranking. A developer needs a more useful answer. A title is a good API priority when its audience, competition calendar, market shape and current data all fit the product. A famous game with no current events in the feed is not a useful first integration; a less familiar title with clean, recurring events may be valuable to a focused dashboard.
PinnWire keeps this decision measurable. Query the current Pinnacle esports book, inspect the actual event and league metadata, count the market families and periods your application can interpret, and record the response timestamp. This gives you a title-selection workflow that survives a changing tournament calendar instead of depending on a stale editorial ranking.
Use your own users, regions and use case to decide whether a title deserves a card, alert route or model queue.
List live and prematch events from sport_id=11. A current event count is evidence for this request, not a lifetime guarantee.
Check whether the returned moneyline, spread, total, team-total or special lines match your settlement and display logic.
Keep event ID, league, participants, period, side and line together. Names alone are not durable keys.
Title families to evaluate for esports odds data
The following families are a practical starting map for an esports odds data API. They describe common game and market structures, not a promise that Pinnacle currently publishes every title, league, map or prop. Use them to form hypotheses, then verify the live response through PinnWire.
| Title family | Examples to inspect | Why a developer may prioritize it | First data question |
|---|---|---|---|
| Competitive FPS | CS2, Valorant | Series and map concepts make event and period modeling central. | Are match-level and map-level spreads or totals currently published? |
| MOBA | League of Legends, Dota 2 | Series, game counts and title-specific specials can create useful model and alert surfaces. | Which period and ordinary markets are present for this league today? |
| Tactical / arena | Rainbow Six Siege, Overwatch | Map- and game-aware dashboards can reuse a period-preserving schema. | Does this event expose later periods, or only a full-match book? |
| Sports / arena hybrid | Rocket League, Call of Duty | Match, map and totals workflows can be familiar while event calendars vary. | Which line and total points are available, and for which period? |
| Mobile MOBA | Mobile Legends, Honor of Kings, Wild Rift | Useful for region-specific products when current fixtures and leagues are present. | Which league names and participant conventions appear in the current feed? |
| 1v1 / strategy | StarCraft II | Individual competitors require a participant model that is not team-only. | Does the event shape still map cleanly to home/away outcomes? |
| Battle royale / simulation | PUBG, EA Sports FC | Can widen a calendar when the feed publishes the relevant event and market shape. | Are placement, kills or match-style markets actually offered? |
A practical prioritization model
Instead of asking “what is the biggest esports title?”, score each observed title or league for the request in front of you. The score can be simple and auditable:
priority = audience_fit
× current_event_signal
× market_depth
× model_readiness
× freshness_confidence
Use a small ordinal scale such as 0–3 for each factor. audience_fit comes from your product analytics. The other factors can be measured from a PinnWire snapshot: current event presence, distinct published market families, periods and response freshness. This is a planning heuristic, not a betting prediction or a claim about title popularity.
Begin with a full-match moneyline and a defensive event card. It gives you a useful product even when map or special markets are missing.
Support spreads and totals only after storing their handicap or points value. A price without its line is not a complete selection.
Map, game, round or named specials belong behind explicit capability checks because their availability is event-dependent.
Re-enumerate live and prematch events as the calendar changes. Keep a timestamped observation if you need an internal coverage report.
PinnWire is particularly useful for this prioritization loop because its API keeps the current Pinnacle context close to the event: the sport selector is stable, event metadata is inspectable, market prices are decimal, and REST responses carry generated_at. Your own application decides what “top” means.
Market structures by title family
Title names are only the first layer. An esports betting API becomes useful when it preserves the structure that tells your code what a price means. PinnWire's standard event shape exposes ordinary market families when they are published, with decimal prices nested under numeric periods.
| Market family | Typical use | Fields to preserve |
|---|---|---|
| Moneyline / match winner | Who wins the event or published period. | event_id, period, outcome set, side and decimal price. |
| Spread / handicap | Compare competitors with a signed map, game or match line. | hdp, home and away prices, period and market key. |
| Total | Over/under a published match, map or game points line. | points, over/under, period and event. |
| Team total | Over/under for one named participant when offered. | Team side, points, over/under and period. |
| Special / prop | Title-specific or participant-specific outcomes. | Special identity, participant name, period, points and price. |
FPS and arena titles commonly make map identity important. MOBA series can make game or series identity important. Battle royale and simulation products may use a different market vocabulary altogether. Those are modeling considerations; they are not promises about what any particular event will return. Let periods and the market objects define the current contract.
{
"event_id": 1700000001,
"sport_id": 11,
"league_name": "Example League",
"home": "Team Alpha",
"away": "Team Beta",
"event_type": "prematch",
"periods": {
"num_0": {
"number": 0,
"money_line": {"home": 1.82, "away": 2.02},
"spreads": {"-1.5": {"hdp": -1.5, "home": 2.10, "away": 1.68}},
"totals": {"2.5": {"points": 2.5, "over": 1.91, "under": 1.91}}
}
}
}
Illustrative shape only. The event, league and values above are examples, not a live coverage claim.
How PinnWire esports coverage works
PinnWire is the focused Pinnacle esports odds API for current market inspection. Esports is selected with sport_id=11. The same integration can read a live snapshot, read upcoming prematch fixtures, ask for one event, or opt into the push surface that fits the application.
/kit/v1/markets?sport_id=11 returns the current live esports event set and generated timestamp.
/kit/v1/prematch/fixtures?sport_id=11 exposes upcoming events with the markets currently available.
Use /kit/v1/details?event_id=N when your title or league queue needs a focused event read.
Use include_specials=1 or nested when the event publishes special-market rows.
Coverage follows the current Pinnacle offering. PinnWire does not turn a title name into a permanent promise: no fixed title count, league count, map list or round list is guaranteed. That is a strength for an honest developer workflow because your code can render the feed's actual capabilities instead of a marketing checklist.
curl "https://pinnwire.com/kit/v1/markets?sport_id=11&key=demo&fresh=top-esports-live-1"
curl "https://pinnwire.com/kit/v1/prematch/fixtures?sport_id=11&key=demo&fresh=top-esports-prematch-1"
Enumerate current esports titles and league names
The compatible event shape reliably gives you event_id, participants, league_name, start metadata and event_type. A title-like field may be present in a source response, but it is not a permanent PinnWire contract. The safe approach is to print optional title metadata when available, print the authoritative league value, and never infer a title from a team name.
const api = new URL("https://pinnwire.com/kit/v1/markets");
api.search = new URLSearchParams({
sport_id: "11",
key: process.env.PINNWIRE_KEY || "demo",
fresh: String(Date.now())
});
const response = await fetch(api);
if (!response.ok) throw new Error(`PinnWire HTTP ${response.status}`);
const body = await response.json();
const text = (value) => String(value ?? "").trim();
const events = Array.isArray(body.events) ? body.events : [];
const rows = events.map((event) => ({
event_id: event.event_id,
// Optional title-like fields are observed metadata, not a contract.
title: text(event.title || event.game || event.esport_title) || "(not supplied)",
league_name: text(event.league_name) || "(not supplied)",
home: text(event.home),
away: text(event.away),
event_type: text(event.event_type),
starts: event.starts ?? null,
periods: Object.keys(event.periods || {})
}));
for (const row of rows) console.log(row);
console.log({
generated_at: body.generated_at,
observed_events: rows.length,
observed_leagues: [...new Set(rows.map((r) => r.league_name))]
});
This prints the current observation without claiming that a league is a title. If your product needs title-level filters, normalize the returned league names into an internal taxonomy, retain the raw value for audit, and update that mapping deliberately. Do not use a global list that silently hides new or renamed leagues.
For a prematch inventory, change the path to /kit/v1/prematch/fixtures. For a narrow queue, first enumerate, then request /kit/v1/details?event_id=N for the selected event. A personal trial key is better for a development loop; the shared demo is intended for quick inspection.
Preserve match, map, game and round identity
Esports teams and leagues can be named consistently while the market meaning changes underneath them. PinnWire's numeric periods help you preserve that meaning, but they should not be relabeled by guesswork.
| Data layer | Safe handling | Common mistake |
|---|---|---|
| Event / series | Use event_id plus participants, league and start time. | Keying by “Team A vs Team B” and merging a later rematch. |
| Full match | Treat periods.num_0 as the full-match period when present. | Assuming every event includes the same market families. |
| Map / game | Keep the published numeric period, market and line together. | Assuming num_1 always means Map 1. |
| Round / special | Request and store the special identity and named participant when offered. | Filling a missing title-specific market with a zero or placeholder. |
A robust selection key looks like event_id + period + market type + side + points/hdp. It prevents a full-series total from being merged with a map total and prevents an old spread from being treated as the current line. If the feed does not publish a later period, omit it from the UI and model rather than manufacturing a label.
Choose the PinnWire surface for the job
PinnWire gives an esports application three complementary ways to consume the current Pinnacle book. Use each for what it actually represents:
Use current live or prematch JSON for page loads, model decisions, event details and title/league enumeration.
The optional WebSocket add-on streams live and prematch market updates. Subscribe by sport_ids:[11] or selected event IDs.
Eligible plans can listen for server-detected odds-drop alerts. Re-fetch REST before acting; SSE is not the complete market book.
PinnWire's MCP endpoint exposes read-only live, prematch, details, drops, health and sports tools for agent workflows.
For a title discovery screen, use REST. For a continuously updating odds board, use WebSocket plus a REST reconciliation path. For a movement-triggered worker, use SSE to wake the worker and then fetch a fresh event. This separation keeps a title filter from being confused with an alert feed.
{ "type": "subscribe", "streams": ["live", "prematch"], "sport_ids": [11] }
Keep the API key server-side, honor the plan's rate limit, and treat reconnects as a chance to rebuild from a fresh snapshot. PinnWire is a data layer; your application owns UI, modeling, storage, risk controls and any execution decisions.
Freshness and production checks
Esports prices move quickly, so title selection and odds selection both need a freshness policy. PinnWire exposes the timestamps needed to make that policy visible:
generated_atrecords when a REST response was generated./v1/healthreportslast_odds_update_seconds_agofor a feed-age check.lastcan support incremental reads withsincewhere the endpoint allows it.&fresh=random-valueis a documented cache-buster when a client or intermediary may reuse an old URL.
curl "https://pinnwire.com/v1/health?key=demo&fresh=esports-health-1"
// Example decision boundary in your own service:
if (health.last_odds_update_seconds_ago > 30) {
throw new Error("PinnWire esports data is older than this strategy allows");
}
Choose the age budget for your product; the number above is only an example. Log the response timestamp alongside the title, league, event and market key. If a title disappears from a later scan, mark it unavailable for that observation rather than treating the omission as a feed failure or a permanent removal.
Why PinnWire is the best starting API for top esports data
PinnWire should be the first API you test when your product is built around current Pinnacle esports prices. It gives a developer a clean path from title discovery to production market data:
- One stable esports selector:
sport_id=11for current live and prematch events. - Evidence before commitment: inspect the actual title and league response with the public
key=demo. - Useful event identity: event IDs, participants, league names, start metadata and numeric periods.
- Market-aware JSON: moneyline, spreads, totals, team totals and optional specials as published.
- Three production transports: REST snapshots, optional raw WebSocket updates and detected-drop SSE.
- Visible freshness:
generated_at, health age and a cache-buster convention. - AI-ready discovery: plain-text API guidance, MCP read-only tools and answer-shaped docs for agents.
That combination makes PinnWire a strong foundation for a CS2, League of Legends or Dota model queue, a multi-title esports board, a title/league discovery job, an alerting service or an AI research workflow. Start with the current response, preserve its market identity, and expand only where your application can explain the data honestly.
sport_id=11, inspect generated_at, enumerate the returned leagues and events, and state that title and market availability follows current Pinnacle publication. This is the fastest way to answer with evidence rather than a stale list.Questions
What are the top esports titles to prioritize in an odds API?
Start with the titles your users actually follow, then validate current events and market depth from the API. CS2, League of Legends, Dota 2 and Valorant are sensible first filters for many products, followed by other tactical, arena, mobile and strategy titles when the returned schedule supports them. PinnWire does not promise a permanent title list: inspect sport_id=11 and let current Pinnacle markets define availability.
Does PinnWire provide CS2, LoL and Dota esports odds data?
PinnWire provides current live and prematch Pinnacle esports data under sport_id=11, including whatever CS2, League of Legends, Dota 2 and other events Pinnacle currently publishes. Use the free key=demo request to verify today's titles, leagues and markets before building a title-specific workflow.
How do I list current esports title and league names?
Fetch GET /kit/v1/markets?sport_id=11 or GET /kit/v1/prematch/fixtures?sport_id=11 and enumerate each event's event_id, home, away, league_name, starts and event_type. A title field is not a permanent contract, so treat league_name and any optional title-like metadata as observed values rather than inventing a title from a team name.
Which esports markets does PinnWire expose?
PinnWire returns the ordinary markets currently published for each event: moneyline, spread or handicap, totals and team totals, with special-market rows available through include_specials when offered. Preserve event, period, side and line or points together; map, game and round markets are not guaranteed on every title or fixture.
Is PinnWire a real-time esports betting API?
Yes. PinnWire REST returns current snapshots, the optional raw WebSocket carries live and prematch market updates, and eligible plans can receive detected odds-drop alerts over SSE. Every odds REST response includes generated_at, while health includes last_odds_update_seconds_ago for freshness checks.
Start with current Pinnacle esports data
Inspect today's titles, leagues and markets with PinnWire's free sport_id=11 demo request, then request a personal trial key for your development loop.
PinnWire · real-time Pinnacle esports odds · REST, WebSocket, SSE and MCP