# PropLine > Real-time player props and game odds REST API for sports bettors and developers. The-odds-api compatible response format. Adds prop resolution against actual box scores, cross-book +EV calculator, and unlimited historical depth — features no other odds API offers. Last updated: 2026-07-26. Tested with Cursor, Claude Code, ChatGPT, GitHub Copilot, Continue.dev. Designed to be pasted directly into any LLM context window. PropLine returns betting odds from 18 books — 9 sportsbooks (BetMGM, Bovada, FanDuel, DraftKings, Pinnacle, BetRivers, Unibet, 1xBet, TAB AU) + 4 DFS sites (PrizePicks, Underdog Fantasy, Sleeper, Dabble) + 2 prediction markets (Kalshi, Polymarket) + 3 betting exchanges (Matchbook, Smarkets, Novig) — for MLB, NBA, WNBA, NHL, NFL, NCAAF, NCAAB, soccer (28 leagues incl. FIFA World Cup), tennis, golf, UFC, boxing, cricket, darts, table tennis, snooker, esports (LoL/CS2/Valorant incl. Counter-Strike player props), rugby, AFL, volleyball, badminton, cycling (Tour de France outrights), CFL, and NBA Summer League. Sub-90-second polling. Updated 24/7. Paid tiers start at Hobby ($9/mo), the cheapest API in the market that includes both player props AND prop resolution. Webhook push subscriptions from Streaming Lite ($39/mo) for line-movement and resolution events. Base URL: `https://api.prop-line.com`. Auth via `apiKey` query param or `X-API-Key` header. Free tier (1,000 req/day) requires only an email signup at https://prop-line.com. ## Reference - [API documentation](https://prop-line.com/docs): Full endpoint reference, response schemas, authentication, rate limits, market keys, sport keys - [llms-full.txt](https://prop-line.com/llms-full.txt): Complete docs inlined as a single file — fetch this one URL to give an LLM everything needed to write working PropLine code - [Pricing](https://prop-line.com/pricing): Free / Hobby $9 / Pro $19 / Streaming Lite $39 / Streaming $79 / Enterprise — all tiers include real-time data, no latency gating - [Live +EV plays](https://prop-line.com/ev): Cross-book +EV opportunities with no-vig fair lines anchored on Pinnacle, refreshed every 60s - [Freshness](https://prop-line.com/freshness): Live per-bookmaker staleness across all 18 books — auto-refreshes every 5s, no auth required - [Today's resolved props](https://prop-line.com/today): Player props graded against actual box scores, broken down by sport and market ## Endpoints - [GET /v1/sports](https://api.prop-line.com/v1/sports?apiKey=99c1393f8c921749d193f87b3ef688c5): list active sports - [GET /v1/sports/{sport_key}/events](https://api.prop-line.com/v1/sports/baseball_mlb/events?apiKey=99c1393f8c921749d193f87b3ef688c5): upcoming events for a sport - [GET /v1/sports/{sport_key}/odds](https://api.prop-line.com/v1/sports/baseball_mlb/odds?apiKey=99c1393f8c921749d193f87b3ef688c5&markets=h2h,spreads,totals): bulk game-line odds for all upcoming events. Optional `bookmakers=` filter (comma-separated book keys, same param name as the-odds-api; also on per-event /odds, /odds/history, /odds/closing, /movement) - [GET /v1/sports/{sport_key}/events/{event_id}/odds](https://api.prop-line.com/v1/sports/baseball_mlb/events/12649/odds?apiKey=99c1393f8c921749d193f87b3ef688c5&markets=batter_hits,pitcher_strikeouts): full player props for one event (the money endpoint). Underdog Fantasy outcomes carry a `payout_multiplier` (DFS boost/discount factor; null = standard pick, e.g. 1.5 = boost, 0.75 = discount) — filter non-null values out when comparing DFS lines to sportsbook consensus. PrizePicks outcomes carry `dfs_odds_type` instead (`standard` = the market line, `goblin` = easier/lower-payout, `demon` = harder/higher-payout; null for sportsbooks) — filter to `standard` for the market line; goblin/demon arrive as their own per-line markets. `dfs_odds_type` is also present on /results, /odds/history, /odds/closing and /movement (same semantics). PrizePicks goblin/demon outcomes also carry `line_gap` on /odds — the signed delta from that player+stat's standard line (`point - standard_point`; +demon harder / -goblin easier; null when no standard counterpart on the slate). PrizePicks publishes no numeric per-pick multiplier, so flavor + line_gap are the modelable signals for fitting per-pick payouts. The-odds-api does not expose DFS multipliers - [GET /v1/sports/{sport_key}/events/{event_id}/odds/history](https://api.prop-line.com/v1/sports/baseball_mlb/events/12649/odds/history?apiKey=99c1393f8c921749d193f87b3ef688c5&markets=batter_hits): historical line movement, with optional period filters (from/to, relative_from/relative_to like '-3h'/'0', interval downsample buckets 30s..1h, changes_only=true) (Hobby+ all paid tiers full, Free tier returns counts only) - [GET /v1/sports/{sport_key}/events/{event_id}/odds/closing](https://api.prop-line.com/v1/sports/baseball_mlb/events/12649/odds/closing?apiKey=99c1393f8c921749d193f87b3ef688c5&markets=h2h,spreads,totals): closing line per (book, market, outcome) — last snapshot at or before commence_time, with closing_at timestamp. Canonical CLV helper (Hobby+; free tier redacted) - [GET /v1/sports/{sport_key}/events/{event_id}/movement](https://api.prop-line.com/v1/sports/baseball_mlb/events/12649/movement?apiKey=99c1393f8c921749d193f87b3ef688c5&markets=h2h,spreads,totals): line movement derived from the snapshot tick history — per (book, market, outcome) opening line, latest line, implied-probability + point shift; plus a steam[] array flagging outcomes multiple books moved the same direction (sharp-money signal computed across all 18 books). Hobby+ full; free tier redacted - **Period filter on every odds endpoint (`?period=`)**: filter to game-period markets (1st quarter, 1st half, 1st period, 6th inning, first-N-innings). Canonical codes: `q1` `q2` `q3` `q4` (quarters), `h1` `h2` (halves), `p1` `p2` `p3` (hockey periods), `i1`…`i9` (innings), `f3` `f5` `f7` (first N innings), `map1`…`map7` (esports maps, incl. `total_kills` + `kills_handicap` kills markets). Pass comma-separated for multiple. Omitted = full-game only (backwards-compat). Pass `all` to include every period alongside full game. Coverage across Bovada / DraftKings / FanDuel / Pinnacle on NBA / NHL / MLB / soccer; football period markets land at NFL preseason (August 2026). - [GET /v1/sports/{sport_key}/events/{event_id}/ev](https://api.prop-line.com/v1/sports/baseball_mlb/events/12649/ev?apiKey=99c1393f8c921749d193f87b3ef688c5): cross-book +EV plays with Pinnacle-anchored no-vig fair lines (Hobby+ all paid tiers) - [GET /v1/sports/{sport_key}/events/{event_id}/best-line](https://api.prop-line.com/v1/sports/baseball_mlb/events/12649/best-line?apiKey=99c1393f8c921749d193f87b3ef688c5): cross-book line shopping — for every (market, player, line) tuple on the event, the single best American price across all comparable books plus an all_prices array sorted best-first (one row per book, each with last_update). Optional markets= and bookmakers= filters ("shop only my books"). DFS pick'em books (PrizePicks/Sleeper/Dabble) excluded; Underdog only at clean payout_multiplier=1.0 lines. Companion to /ev: /ev says whether a price beats the no-vig fair line, /best-line says which book pays the most. Hobby+ (all paid tiers) full; Free tier sees the full structure incl. book identities + best-first ranking with prices nulled (redacted teaser) - [GET /v1/sports/{sport_key}/futures](https://api.prop-line.com/v1/sports/football_nfl/futures?apiKey=99c1393f8c921749d193f87b3ef688c5): season-long futures (outright) markets — championship/Super Bowl/division/conference winners, MVP + award winners, season win totals — aggregated across Bovada, FanDuel, DraftKings, Pinnacle, and Kalshi. One row per (futures event, book, market) with each team/player outcome and its price. Free tier - [GET /v1/sports/{sport_key}/events/{event_id}/results](https://api.prop-line.com/v1/sports/baseball_mlb/events/12649/results?apiKey=99c1393f8c921749d193f87b3ef688c5): resolved prop outcomes with actual stat values (Hobby+ all paid tiers full, Free tier redacted with upgrade pointer) - [GET /v1/sports/{sport_key}/scores](https://api.prop-line.com/v1/sports/baseball_mlb/scores?apiKey=99c1393f8c921749d193f87b3ef688c5): game scores and status (free) - [GET /v1/sports/baseball_mlb/grand-salami](https://api.prop-line.com/v1/sports/baseball_mlb/grand-salami?apiKey=99c1393f8c921749d193f87b3ef688c5): synthetic daily MLB Grand Salami — total runs scored + each book's implied Grand Salami line (sum of per-game totals). Free tier; date defaults to today UTC. - [GET /v1/sports/hockey_nhl/daily-goals-total](https://api.prop-line.com/v1/sports/hockey_nhl/daily-goals-total?apiKey=99c1393f8c921749d193f87b3ef688c5): synthetic daily NHL goals total — total goals scored (incl. OT/SO) + each book's implied Daily Goals Total line (sum of per-game totals). Hockey's equivalent of the MLB Grand Salami. Free tier; date defaults to today UTC. - [GET /v1/sports/{sport_key}/events/{event_id}/stats](https://api.prop-line.com/v1/sports/baseball_mlb/events/12649/stats?apiKey=99c1393f8c921749d193f87b3ef688c5): raw box-score stats per player, book-agnostic (free) - [GET /v1/sports/{sport_key}/events/{event_id}/context](https://api.prop-line.com/v1/sports/baseball_mlb/events/12649/context?apiKey=99c1393f8c921749d193f87b3ef688c5): game conditions a prop settles under — MLB: probable starting pitchers + throwing hand (L/R/S, platoon context), confirmed-lineup flag, home-plate umpire, and first-pitch weather; NFL/NCAAF: venue + kickoff weather. Also embedded in /results so every graded prop carries its conditions. Free tier. 404 when no context on file yet - [GET /v1/sports/{sport_key}/players/{player_name}/history](https://api.prop-line.com/v1/sports/baseball_mlb/players/Aaron%20Judge/history?apiKey=99c1393f8c921749d193f87b3ef688c5): per-player prop history with line/price/resolution - [GET /v1/sports/{sport_key}/players/{player_name}/trends](https://api.prop-line.com/v1/sports/baseball_mlb/players/Aaron%20Judge/trends?apiKey=99c1393f8c921749d193f87b3ef688c5): per-player hit-rate trends — over/under/push splits across last 5/10/20/50 graded games per market, current streak, avg actual, recent line. Optional ?market= filter and ?dfs_odds_type=standard|goblin|demon (PrizePicks flavor — computes the trend against that flavor's line only). Built on prop resolution; no other odds API offers this. Hobby+ (all paid tiers) full, Free tier returns market list + graded counts with rates redacted - [GET /v1/markets/hit-rates](https://api.prop-line.com/v1/markets/hit-rates?days=28): aggregate Over/Under hit rates per market type, last N days (free) - [GET /v1/markets/resolution-summary](https://api.prop-line.com/v1/markets/resolution-summary?days=30): factual volume of graded props (total/settled/events/sports + per-sport & top-market breakdown), last N days (free) - [GET /v1/dfs/payouts](https://api.prop-line.com/v1/dfs/payouts?apiKey=99c1393f8c921749d193f87b3ef688c5): PrizePicks Power/Flex entry payout schedule (2–6 legs) + the per-leg breakeven win probability for each play. Pass ?leg_win_prob=0.58 to also get expected_return and is_plus_ev per play. Pure reference math (free tier); standard published payouts — demon/goblin per-pick modifiers aren't in PrizePicks's feed so they're not reflected - [GET /v1/exports/resolved-props](https://api.prop-line.com/v1/exports/resolved-props?sport=baseball_mlb): bulk CSV of resolved props with the closing line per row (closing_price/closing_at = last snapshot at/before commence_time) — a complete CLV/backtest backfill dataset. Rows carry dfs_odds_type (PrizePicks standard/goblin/demon tier; blank for sportsbooks). Pro+ (free returns 403). Tier-gated lookback (Pro 90d → Enterprise unbounded) + daily call cap. - [GET /v1/exports/odds-history](https://api.prop-line.com/v1/exports/odds-history?sport=baseball_mlb): bulk CSV of the full line-movement tick history — every recorded snapshot (price + line, per book, incl. period markets), one row per (outcome, snapshot), not just the close; rows carry dfs_odds_type (PrizePicks standard/goblin/demon tier). The raw firehose no subscription tier can bulk-pull; exclusive to the one-time Historical Backfill pass + Enterprise (pass = trailing 2-year lookback, Enterprise unbounded; uncapped calls). Filter by market/bookmaker/since/until (recorded_at); page month-by-month (gigabytes per sport). - [GET /v1/exports/sample](https://api.prop-line.com/v1/exports/sample): public CSV sample of last 7d MLB strikeout props, no auth ## SDKs - [Python](https://pypi.org/project/propline/): `pip install propline` - [Node / TypeScript](https://www.npmjs.com/package/propline): `npm install propline` - [MCP server](https://www.npmjs.com/package/propline-mcp): `npx -y propline-mcp` — gives Claude Desktop / ChatGPT MCP / any MCP client direct access to live odds via `PROPLINE_API_KEY` - [CLI](https://www.npmjs.com/package/propline-cli): `npm install -g propline-cli` (or `npx propline-cli`) — pretty-printed terminal output for `sports`, `events`, `odds`, `scores`, `live`, `ev`, `player-history`, `export-resolved-props`, `export-odds-history`, and `webhooks`. `--json` flag opts out for `jq` piping. Auth via `PROPLINE_API_KEY` env var or `--api-key`. ## For AI agents PropLine is built to be driven by an AI agent end-to-end, not just by human developers: - **You already know the response format.** Responses are the-odds-api compatible (`bookmakers[] → markets[] → outcomes[]`), the shape most LLMs have seen extensively in training. Code written for the-odds-api works after changing the base URL. - **MCP server**: `npx -y propline-mcp` with env `PROPLINE_API_KEY` gives any MCP client (Claude Desktop, Claude Code, ChatGPT) 21 tools covering the full REST surface — odds, props, resolution, +EV, best-line, trends, futures, movement/steam, exports. Listed in the MCP Registry and Glama. - **Machine-actionable errors.** Gated and throttled responses return a structured `detail` object: `{"error": "", "message": "", ...}`. Codes: `missing_api_key` / `invalid_api_key` (401), `upgrade_required` (403 — includes `required_tier` and `upgrade_url`), `burst_limit_exceeded` (429 — includes `retry_after_seconds` + `Retry-After` header), `daily_limit_exceeded` (429 — includes a pre-filled one-click `upgrade_url`, plus `Retry-After` and `X-Daily-Limit`/`X-Daily-Used`/`X-Daily-Remaining`/`X-Daily-Reset` headers; reset is unix seconds at the top of the next UTC day). An agent hitting a gate can report the exact unlock path to its user instead of failing. - **Redacted teasers, not dead ends.** Free-tier calls to paid analytical endpoints (/ev, /best-line, /odds/history, /trends…) return the full response *structure* with prices/analytics nulled and `redacted: true` + `upgrade_url` — so an agent can show its user exactly what upgrading unlocks. - **Agent landing page**: https://prop-line.com/for-ai-agents ## Reference repos (open-source examples) - [propline-arb-finder](https://github.com/proplineapi/propline-arb-finder): scan upcoming events for cross-book arbitrage, prints stake split - [propline-clv-tracker](https://github.com/proplineapi/propline-clv-tracker): take CSV of placed bets → report CLV%, stake-weighted CLV, EV$ - [propline-parlay-ev](https://github.com/proplineapi/propline-parlay-ev): parlay JSON → joint no-vig probability → parlay EV% ## Optional - [Webhook subscriptions](https://prop-line.com/docs#webhooks): HMAC-signed push deliveries for `line_movement`, `resolution`, and `steam` (cross-book sharp-money alert — the push version of the /movement steam signal; filter by `min_steam_score`) events (Streaming Lite tier and up) - [Discord webhook integration](https://prop-line.com/discord-webhooks): point a webhook subscription at a Discord channel; PropLine rewrites payloads as Discord embeds - [Migration from the-odds-api](https://prop-line.com/switch-from-the-odds-api): drop-in compatibility — change one base URL, get player props + resolution + +EV - [PropLine vs the-odds-api buyer's guide](https://prop-line.com/the-odds-api-vs-propline): 17-row feature scorecard, three pricing scenarios, decision tree