Skip to main content
Returns every market and every outcome we currently hold for one game. The response is flattened: one top-level game object plus a markets dict keyed by pn_market_type, where each value is a flat list of outcomes.
string
required
Polynode slug or raw game_id.
string
required
Your API key.
string
Comma-separated list of pn_market_type values to include. Example: market=moneyline,spreads,totals. If omitted, all markets are returned.
string
Comma-separated list of book names to include. Example: book=DraftKings,Polymarket,BetMGM. If omitted, all books are returned.

Response

Live NBA game (Portland @ Phoenix, Q3 03:42, 79-73) filtered to moneyline only, three books:

Top-level shape

Outcome object

Filtering examples

All books, moneyline only:
DraftKings + Polymarket across all market types:
Polymarket moneyline + totals only:
Filtering happens server-side. An empty result set returns 200 with markets: {} and market_count: 0 — not a 404.

Post-restart warmup window

When the service restarts, the market poll loop backfills one market type at a time across all sports. For ~30 seconds after startup, you may see fewer pn_market_type keys than the steady-state total. Call the same endpoint again a few seconds later for a fuller view, or subscribe to /ws/odds to stream the fill as it happens.

Refresh semantics

  • Live games are re-polled every ~1 second. In-play markets reflect upstream within 1-2 seconds.
  • Idle games (unplayed or final) are re-polled every ~10 seconds.
  • Subscribe to /ws/odds to receive price_change deltas as soon as any book moves.

Market types available per sport

The exact set depends on sport and whether the game is pre-match or live.
  • NBA / WNBA / NCAAB: moneyline, spreads, totals, first_half_*, points, rebounds, assists, threes, double_doubles, assists_points_rebounds
  • NFL / NCAAF: moneyline, spreads, totals, first_half_*, passing/rushing/receiving yards, anytime TD
  • MLB: moneyline, run_line, totals, nrfi, hits, strikeouts, total bases
  • NHL: moneyline, puck_line, totals, shots on goal, player goalscorer
  • Soccer (all leagues): moneyline (1x2), double_chance, both_teams_to_score, correct_score, total_goals, total_corners, soccer_anytime_goalscorer, soccer_halftime_result
  • Tennis: moneyline, set_handicap, total_games
  • UFC / MMA: moneyline, method_of_victory, go_the_distance

Rate limits

The REST API enforces per-key rate limits that scale with your plan — 1,000 requests per minute on Starter, 2,000 on Growth, and 4,000 (default, custom by agreement) on Enterprise. Requests beyond the limit return 429 Too Many Requests with retry-after: 60. WebSocket connections are not counted against this limit — stream consumers don’t need to poll. See rate limits for the full tier table.