Real API — Not Scraping
A direct data feed API, not a screen scraper. Real-time (100–200 ms) odds updates for pre-match and live markets — no delay, no captchas, no proxy farms.
PinBook Sports API is a RESTful service for accessing pre-match and live odds from Pinnacle — a real API, not scraping. Real-time updates (100–200 ms), historical odds, scores, results, special markets, and player props in clean JSON.

Building a serious betting product — a value-betting service, an arbitrage scanner, an odds comparison, or a prediction model — starts with one thing: quality data. If your odds arrive late, incomplete, or broken, everything built on top of them is late, incomplete, and broken too.
PinBook Odds API gives you direct, structured access to pre-match and live odds from Pinnacle, the sharpest bookmaker in the market. You get every market, every line movement, every price change — delivered in clean JSON over plain REST, updated in real time.
🚀 Start in minutes
Get an API key, make your first call, and integrate it into your application today — see the Quickstart.
Many "odds feeds" on the market are just scrapers in disguise — bots that load the bookmaker's website and parse the HTML. It looks cheaper until you count the real cost: delayed data, constant breakage, and infrastructure that never stops needing attention.
| 🕸️ Web Scraping | ⚡ PinBook Real API | |
|---|---|---|
| Data freshness | Delayed — sites often serve delayed odds to anonymous visitors | Real-time, 100–200 ms updates |
| Market coverage | Only what the page renders; player props and special markets are often hidden | Full market tree: all periods, spreads, totals, specials, player props |
| Reliability | Any HTML redesign breaks the parser — usually at match time | Stable JSON contract with a versioned API |
| Blocking | Captchas, IP bans, rate limiting; needs rotating proxies | A simple API key — nothing to evade |
| Maintenance | An endless cat-and-mouse game you have to fund and staff | Zero — we maintain the feed, you consume it |
| Efficiency | Re-downloads whole pages to check for changes | Delta updates via since — only what changed |
| Result | Fragile, late, expensive | Fast, complete, predictable |
In short: scraping gives you a screenshot of yesterday's page. A real API gives you the market as it is right now.
The API is designed for continuous polling of live markets:
since and cache the full state.last timestamp — pass it back as since and receive only the events and markets that changed.Historical odds, scores, and results are available for deep analysis, backtesting, and machine learning — a complete archive of how the lines actually moved.
Markets: all periods, money_line, spreads, totals, team_total
{
"sport_id": 1,
"sport_name": "Soccer",
"last": 1769709175,
"last_call": 1769709175,
"events": [
{
"event_id": 1619860365,
"sport_id": 1,
"league_id": 2015,
"league_name": "FIFA - World Cup Qualifiers Europe",
"starts": "2026-03-26T19:45:00",
"last": 1769709087,
"home": "Czechia",
"away": "Ireland",
"event_type": "prematch",
"live_status_id": 2,
"parent_id": null,
"resulting_unit": "Regular",
"is_actual": true,
"home_team_type": "Team1",
"is_have_odds": true,
"is_have_periods": true,
"is_have_open_markets": true,
"periods": {
"num_0": {
"line_id": 3428182754,
"number": 0,
"description": "Match",
"cutoff": "2026-03-26T19:45:00",
"period_status": 1,
"money_line": {
"home": 1.943,
"draw": 3.32,
"away": 4.02
},
"spreads": {
"-0.5": {
"hdp": -0.5,
....Special Markets, Player Props
....
{
"special_id": 1623657207,
"sport_id": 3,
"league_id": 487,
"event_id": 1623244146,
"last": 1770314090,
"live_status": "prematch",
"live_status_id": 2,
"bet_type": "OVER_UNDER",
"units": "Points",
"name": "Nic Claxton (Points)",
"starts": "2026-02-06T00:10:00",
"cutoff": "2026-02-06T00:10:00",
"category": "Player Props",
"status": "O",
"event": {
"id": 1623244146,
"period_number": 0,
"home": "Orlando Magic",
"away": "Brooklyn Nets"
},
"is_actual": true,
"max_bet": 250.0,
"is_have_odds": true,
"is_have_lines": true,
"open": true,
"lines": {
"c_1623657208": {
"id": 1623657208,
"name": "Over",
"rot_num": 516,
"line_id": 5769188797,
"price": 1.719,
"handicap": 9.5
},
"c_1623657209": {
"id": 1623657209,
"name": "Under",
"rot_num": 517,
"line_id": 5769188798,
"price": 2.05,
"handicap": 9.5
}
}
},
....🚀 Connect
To connect the API to a project, you need an API key. Choose a plan, get your key, and make your first request in minutes.