Every sportsbook's line, in one request.
PingOdds reads 14 sportsbooks across the US and Ontario and serves their prices as one JSON API: current odds, every price change since, and no-vig probabilities. Each response says how old its prices are.
The free plan needs no card.
NFL moneyline, Thu, Oct 22, 8:15 PM ET
New England Patriots @ Chicago Bears
| Book | New England Patriots | Chicago Bears | Last move |
|---|---|---|---|
| Pinnacle | +140(best price) | -155(best price) | 1 h ago |
| Bally Bet | +128 | -159 | 2 h ago |
| Bally Bet Ontario | +128 | -159 | 2 h ago |
| BET99 | +140(best price) | -160 | 1 h ago |
| betPARX | +128 | -159 | 2 h ago |
| BetRivers | +128 | -159 | 2 h ago |
| BetRivers Ontario | +128 | -159 | 2 h ago |
| Betway Ontario | +135 | -165 | 2 h ago |
| Bovada | +135 | -160 | 2 h ago |
| FanDuel | +134 | -158 | 2 h ago |
| FanDuel Ontario | +134 | -158 | 2 h ago |
| LeoVegas Ontario | +128 | -159 | 2 h ago |
| Proline+ | +128 | -159 | 2 h ago |
| Unibet Ontario | +128 | -159 | 2 h ago |
Each book's latest price, from the same data the API serves. Orange marks the best price on each side.
One call, every book
Ask for a league and the markets you want. Each book comes back with its price, when that price last changed and when PingOdds last checked it.
meta.staleness_ms is the age of the oldest price in
the response, so a cached answer never passes for a live one.
See the quickstart or the full API reference.
curl -H "Authorization: Bearer $PINGODDS_API_KEY" \
"https://api.pingodds.com/v2/odds?league=americanfootball_nfl&markets=h2h" {
"events": [{
"event": { "id": 2243, "league": "americanfootball_nfl", ... },
"markets": [{
"key": "h2h",
"books": [{
"key": "pinnacle",
"last_update": "2026-10-08T18:42:07Z",
"last_checked": "2026-10-08T19:00:31Z",
"outcomes": [
{ "name": "home", "price_am": -167, "no_vig": 0.6098, ... },
{ "name": "away", "price_am": 150, "no_vig": 0.3902, ... }
]
}, ...]
}]
}],
"meta": { "staleness_ms": 4210, ... }
}Every tick kept
Each price change is stored, not just the latest snapshot. Pull a game's full history, or movement candles per book, market and side.
Signals as they happen
Steam moves, prices better than the market, outliers and arbitrage, counted across independent price sources. Read them over REST, the live stream or webhooks on paid plans.
Freshness you can check
Every book in a response carries last_checked. The status page shows how current each book and league is right now.
What's covered
14 sportsbooks
- Pinnacle
- FanDuel
- BetRivers
- Bally Bet
- betPARX
- Bovada
- FanDuel Ontario
- BetRivers Ontario
- Bally Bet Ontario
- Unibet Ontario
- LeoVegas Ontario
- Proline+
- BET99
- Betway Ontario
15 leagues
- NFL
- NBA
- MLB
- NHL
- NCAAF
- NCAAB
- EPL
- MLS
- Champions League
- La Liga
- Bundesliga
- Serie A
- Ligue 1
- ATP
- WTA
Moneylines, spreads and totals on every plan.