SharpRelayPinnacle data
HomeAPI referenceDashboard

Coverage & data model

SharpRelay delivers a reviewed, independently operated REST contract around Pinnacle-sourced sports, events, prices, results, and special markets. The catalog is broad, but availability remains event- and time-specific.

Published v1 private-beta scope

The authenticated data contract has 12 read-only routes. Its prop surface supports event-level discovery, latest or available history for one prop_id per request, and outright discovery with per-ID prices. Event-wide bulk prop prices and prop-specific opening, closing, results, and CLV operations are not exposed in v1 beta.

Coverage observed · 2026-08-23 02:01 UTC

44 sports with historical standard-market data, 2.4B+ reported odds rows, five normalized core market families, and history since 2021. Eleven sports were observed within 24 hours of the snapshot and eleven within seven days. The rounded aggregate size labels were last observed 2026-08-05 23:24 UTC; those and the coverage timestamps are evidence, not uptime or future-availability promises.

The API catalog supersedes this snapshot

Use /v1/catalog/sports and the related catalog routes at integration time. A historical catalog proves archive depth; the authenticated catalog response is the integration-time authority relative to this dated page. It can be served from the disposable response cache for roughly one hour, so inspect X-Cache and refresh it on a slow timer rather than assuming zero-staleness.

Historical sport catalog

The reviewed snapshot contains: Soccer, Basketball, Tennis, Baseball, Hockey, E Sports, Football, Handball, Volleyball, Rugby Union, MMA, Rugby League, Aussie Rules, Golf, Futsal, Boxing, Badminton, Water Polo, Darts, Snooker, Cycling, Biathlon, Curling, Cricket, Bandy, Cross Country, Alpine Skiing, Athletics, Olympics, Formula 1, Ski Jumping, Table Tennis, Sumo, Chess, Beach Volleyball, Padel Tennis, Field Hockey, Entertainment, Squash, Slap Fighting, Motorsport, Lacrosse, Softball, and Crossfit.

Historical depth varies substantially by sport. The static list deliberately does not freeze sport IDs, league IDs, period definitions, or offering flags; discover those through the authenticated catalog so your integration remains correct when source metadata changes.

Market surface

SharpRelay marketTypical sidesAvailability
moneylineHome / draw / awayFull event and sport-specific periods when offered
spreadHome / away against a handicapMain and alternate lines when offered
totalsOver / under a combined totalMain and alternate lines when offered
home_totalsOver / under the home-team totalEvent- and period-specific
away_totalsOver / under the away-team totalEvent- and period-specific

Prices are decimal. Corresponding margin-removed fair prices are included when supplied. The contract also covers opening lines, closing lines, available historical movement, event results, cancellations, re-settlements, and CLV analysis.

Props, specials & outrights

The reviewed source snapshot reported specials data across ten source sport labels, including player props, team props, and game props. Coverage is contestant-based and can change independently of standard event lines. One specials-only source label was not silently merged with a standard sport; resolve the current sport and market IDs through the API catalog.

Outrights cover competition and tournament markets that are not tied to one event. Their publication and settlement timelines differ from event markets, so discover them through /v1/outrights rather than inferring them from event availability. For both event props and outrights, use the returned special_id as prop_id on /v1/props/{prop_id}/odds and retrieve one market at a time.

The v1 beta intentionally does not expose event-wide bulk prop prices or prop-specific opening, closing, results, and CLV operations.

What the contract covers

AreaAvailable dataHow to discover it
SportsCurrent sport IDs, names, and offering indicatorsGET /v1/catalog/sports
LeaguesLeague IDs, names, country codes, and groupings when suppliedGET /v1/catalog/leagues?sport_id=…
PeriodsSport-specific period numbers and market labels; period 0 is the full eventGET /v1/catalog/periods?sport_id=…
Pre-game eventsFuture fixtures by default: without an explicit window or identifier, starts remain strictly after the request boundary and in the future at final validation. Includes participants, start times, availability flags, parent relationships, and update versions. A present or future starts_from remains locally enforced as a future lower bound; a supplied starts_to is locally enforced as an inclusive timestamp or complete UTC-day upper bound. Only a genuinely past lower bound opts into historical discovery.GET /v1/events
In-play eventsCurrently offered live events selected from the complete bounded candidate boundary for the requested filters. Every returned event has live_status=1; its latest odds are bound to that event and include an explicitly open line with a cutoff strictly after final validation. Expiry is rechecked at final validation. Expired, settled, historical-only, and fully suspended records are excluded. No arbitrary update-age or kickoff-age floor is applied. Each request is freshly verified and is not response-cached. Broad pages verify at most max(4, 2 × limit), capped at 512, from a boundary of up to 1,000 fixture candidates; exact event lookup verifies one.GET /v1/events?live=1
Core pricesBy default, every primary and alternate market row at the greatest positive line_id for each event and period; older off-board line IDs are excluded. full_history and since explicitly select history.GET /v1/events/{event_id}/odds
Line lifecycleLatest, incremental, or available history plus opening and closing rowsEvent odds, opening-lines, and closing-lines routes
ResultsPeriod scores and settlement, cancellation, or re-settlement stateGET /v1/events/{event_id}/results
Props & specialsEvent prop discovery plus latest or available historical prices for one prop_id per request. Event-wide bulk prop prices and prop-specific opening, closing, results, and CLV are outside the v1 beta contract.GET /v1/events/{event_id}/props, then GET /v1/props/{prop_id}/odds
OutrightsCompetition and tournament market discovery, followed by latest or available historical prices one returned special_id at a timeGET /v1/outrights?sport_id=…, then use special_id as prop_id
CLVObserved/fair closing price, expected win, and closing-line value for a matched betGET /v1/analytics/clv

Coverage discovery workflow

  1. List the current API sport catalog and retain the opaque sport_id; account for its roughly one-hour cache window.
  2. Enumerate the sport's leagues and period definitions.
  3. Query /v1/events by league or sport for future pre-match fixtures. Without an explicit kickoff window, ordinary discovery applies a request-current lower bound and filters again at delivery, so returned starts remain strictly future. Supplying a present or future starts_from, normally together with starts_to, narrows the future window and remains locally enforced; only a genuinely past lower bound is the explicit historical-discovery path. Exact event_id and parent_id lookups are lifecycle-specific rather than future-only.
  4. Query live=1 separately for currently offered in-play events. Without an explicit starts_from, live discovery applies no minimum kickoff; add one only to narrow the candidate window. This route is not response-cached. It reads the complete bounded candidate boundary, then performs bounded per-page verification. Every returned event must have live_status=1 and an event-bound latest open line whose cutoff is still strictly future when expiry is rechecked at final validation.
  5. Use returned event IDs and availability flags to request odds, opening, closing, results, and special markets.
  6. For live=1, follow every X-Next-Cursor within five minutes—even after an empty page—until the header is absent. If X-Result-Truncated: true remains without a next cursor, narrow the sport, league, or kickoff window. For pre-game incremental discovery, use a moving since value; the implicit future boundary still applies unless you explicitly choose a kickoff window.

Price-side semantics

FieldMoneyline / spreadTotals-style market
odds1Home-side decimal priceOver decimal price
odds0Draw decimal price when applicableMiddle outcome when supplied
odds2Away-side decimal priceUnder decimal price
todds*Corresponding margin-removed fair decimal price when supplied

Availability and completeness

Fields are optional or nullable because availability varies by sport, event, market, and lifecycle state. Unknown source fields are removed. A successful empty array means no matching rows are currently available; a CLV 404 means no suitable event or closing line could be matched and is not a zero-value analysis.

Event odds default to the greatest positive line_id snapshot for each event and period, retaining every primary and alternate market row present at that snapshot and excluding older off-board line IDs. Prop odds default to one greatest-line_id row per special_id + contestant_line_id; handicap is a value on the winning row, not a separate latest identity. Set full_history=1 to request available matching history. Event odds additionally accept a moving since cursor for incremental history; use it by itself or with full_history=1, because since=...&full_history=0 is rejected. Inspect X-Result-Truncated and never assume a historical response is complete. Opening and closing routes return the first or latest available line, respectively, only where those snapshots exist. Closing rows and results can be corrected or re-settled, so refresh them whenever revisions matter.

Deliberate product boundary

SharpRelay is data-only: no bet placement, balances, account wagering, parlay construction, bookmaker comparison, or public streaming/WebSocket contract. Pinnacle is the underlying data source; SharpRelay is independent and is not affiliated with, endorsed by, or sponsored by Pinnacle.