Skip to main content
Returns the snapshot of every game whose scores.is_live is currently true. Useful as the entry point for “what’s happening right now” dashboards — you get the complete live universe in one call.
curl -s "https://books.polynode.dev/v1/games/live?key=pn_live_YOUR_KEY"
key
string
required
Your API key. Accepted via query param or Authorization: Bearer pn_live_YOUR_KEY header.

Response

{
  "count": 8,
  "games": [
    {
      "game_id": "40664-16839-2026-04-14",
      "pn_slug": "lib-gar-est-2026-04-14",
      "pn_league_code": "lib",
      "sport_category": "soccer",
      "start_date": "2026-04-14T22:00:00Z",
      "status": "live",
      "venue": "Estadio Jorge Luis Hirschi",
      "broadcast": null,
      "home_team": {
        "name": "Club Estudiantes de La Plata",
        "city": null,
        "mascot": null,
        "abbreviation_pn": "est",
        "logo": "https://cdn.opticodds.com/team-logos/soccer/2857.png"
      },
      "away_team": {
        "name": "Cusco FC",
        "city": null,
        "mascot": null,
        "abbreviation_pn": "gar",
        "logo": "https://cdn.opticodds.com/team-logos/soccer/12453.png"
      },
      "scores": {
        "status": "Live",
        "score_home": 1,
        "score_away": 1,
        "period": "2H",
        "clock": "47",
        "is_live": true,
        "last_play": null,
        "current_down_and_distance": null,
        "weather": null,
        "weather_temp": null,
        "weather_temp_high": null,
        "home_starter": null,
        "away_starter": null
      }
    }
  ]
}

Fields

Top level

FieldTypeDescription
countintegerNumber of games currently in-play
gamesarrayFull game objects, one per live game

Game object

FieldTypeDescription
game_idstringUpstream canonical game id. Stable across reconnects. Use for /v1/games/{id} lookups.
pn_slugstring | nullPolynode canonical slug in the form {league}-{away}-{home}-{date}. null when the game’s teams are not in polynode’s team roster (common for non-polynode leagues like niche soccer or esports).
pn_league_codestringPolynode league code (nba, nhl, epl, lib, etc.).
sport_categorystringBroad category: soccer, basketball, hockey, baseball, football, tennis, mma, esports, cricket, rugby, table-tennis, golf, lacrosse.
start_datestringISO 8601 scheduled start time (UTC).
statusstringunplayed / live / final (lowercase). Separate from scores.status, which is upstream’s raw value.
venuestring | nullStadium or venue name if available.
broadcaststring | nullBroadcast channel(s) or stream URL(s) when upstream exposes them.
home_team / away_teamobjectSee Team object below.
scoresobjectSee Scores object below. Always present; fields null for unplayed games.

Team object

FieldTypeDescription
namestringFull team name ("Miami Heat", "Club Estudiantes de La Plata").
citystring | nullCity when upstream provides it separately.
mascotstring | nullMascot when separate from city.
abbreviation_pnstring | nullPolynode canonical abbreviation (mia, est). null when the team is not in polynode’s roster.
logostring | nullLogo URL.

Scores object

FieldTypeDescription
is_livebooleanAuthoritative “is this game in-play right now” flag.
statusstringUpstream status label: typically "Unplayed", "Live", or "Completed". Different from the top-level status.
score_home / score_awayintegerCurrent score for each side. 0 for unplayed games.
periodstring | nullCurrent period/half/quarter/set/inning, e.g. "2H", "Q3", "7", "2".
clockstring | nullClock within the current period. Format depends on sport: soccer is minutes ("47"), NBA is "MM:SS", NFL similar.
last_playstring | nullMost recent play description. Only populated for sports where upstream ships play-by-play (NBA, NFL sometimes, NHL).
current_down_and_distancestring | nullNFL/CFB only.
weather, weather_temp, weather_temp_highstring | float | nullOutdoor sports only.
home_starter / away_starterstring | nullMLB starting pitcher, tennis player, UFC fighter, etc.

Notes

  • Games without a polynode slug still flow through in full (pn_slug: null). You get every live game upstream knows about, not just the polynode-mapped subset.
  • count reflects only games currently in-play. To see upcoming or past games for a specific league, use List League Games.
  • Response freshness is bounded by the adaptive poller: live games are re-fetched every ~1 second, so scores.clock typically lags real time by at most 1-2 seconds plus upstream delay.