Games
Per-slate and per-game endpoints. Every authenticated user can read games; brief content and cross-game signals are tier-gated separately.
#List today's slate
/api/v1/games/todayReturns today's scheduled games, sorted per the
sort parameter. Any authenticated user.Query parameters
leaguestring[]optionalCSV of
LeagueKey values (e.g. nba,nfl). Omit for all leagues.sortenumoptionalsignal_strength (default) or time.limitintegeroptionalPositive integer, max 100.
cursorstringoptionalOpaque pagination cursor from
pagination.next_cursor.Try it
curl "https://api.closeline.io/v1/games/today?league=nba,nfl" \
-H "Authorization: Bearer $CLOSELINE_API_KEY"{
"data": [
{
"id": "game_01HXY...",
"league": "nba",
"scheduled_at": "2026-04-17T23:10:00Z",
"status": "scheduled",
"home": { "id": "team_...", "name": "Boston Celtics", "abbr": "BOS" },
"away": { "id": "team_...", "name": "Miami Heat", "abbr": "MIA" },
"venue": "TD Garden",
"is_outdoor": false,
"consensus_spread": -6.5,
"consensus_total": 218.5
}
],
"pagination": { "next_cursor": null }
}const slate = await cl.games.today({
league: ["nba", "nfl"], // LeagueKey[] — see @closeline/types
sort: "signal_strength", // or "time"
limit: 25,
});#Single game
/api/v1/games/{gameId}Returns one game by id.
404 not_found if the id is unknown.#Related endpoints
/api/v1/games/{gameId}/signalsSignals fired on this game.
/api/v1/games/{gameId}/linesLine observations.
?book= filters to one sportsbook./api/v1/games/{gameId}/injuriesCurrent injury report for both rosters.
/api/v1/games/{gameId}/liveLive score + period. Returns
null before tip-off.SDK
const game = await cl.games.get(gameId);
const lines = await cl.games.lines(gameId, { book: "pinnacle" });
const injuries = await cl.games.injuries(gameId);
const live = await cl.games.live(gameId); // null if not yet started
const signals = await cl.games.signals(gameId);