← Back to API docs

GET/api/v1/seasons/table

Get a season's standings
Database packageWorld Cup packageactivebetacoreAvailable (scoped)

Description

Returns the standings of the season queried
Request rate: 120/min

PS: get the ids of changed seasons from the 'data updates' endpoint

Access

Request
GET https://api.sports.csap.ai/api/v1/seasons/table
Auth
Header X-API-Key: <your key> (Authorization: Bearer <key> also works; ?key= is still accepted but discouraged, because the key ends up in URLs and logs)
External keys
Available (scoped)External keys can call it, but only data inside the open scope is returned.
Rate limits
3000 per minute · 200000 per day · Set per key (rate_per_min and quota_daily returned by /api/v1/account are authoritative; the numbers above are a trial key's). Beyond them the answer is 429. In addition, heavy requests such as whole-table snapshots and statistics lists without a match id are processed 2 at a time for the whole platform; a request that cannot get a slot receives 429 with Retry-After. Responses do not carry X-RateLimit-* headers for now. See the general guide

Request parameters 1

ParameterTyperequiredExampleDescription
idintegerrequired5179Season id

Example request

curl "https://api.sports.csap.ai/api/v1/seasons/table?id=5179" \
  -H "X-API-Key: YOUR_API_KEY"

Try it

Example response

Real response with an external key at 09/11/2026, 14:29 UTC: HTTP 200, 772 rows, 712 ms (data cut to 2 rows)

{
  "code": 0,
  "data": [
    {
      "away_draw": 3,
      "away_draws": 3,
      "away_goal_diff": null,
      "away_goals": 11,
      "away_goals_against": 13,
      "away_goals_for": 11,
      "away_loss": 2,
      "away_losses": 2,
      "away_played": 6,
      "away_points": 6,
      "away_position": 7,
      "away_rank": 7,
      "away_total": 6,
      "away_wins": 1,
      "away_won": 1,
      "color": null,
      "comp_ref": "216",
      "conference": null,
      "deduct_points": null,
      "draw": 4,
      "draws": 4,
      "goal_diff": 3,
      "goals": 22,
      "goals_against": 19,
      "goals_for": 22,
      "group": null,
      "grp": null,
      "home_draw": 1,
      "home_draws": 1,
      "home_goal_diff": null,
      "home_goals": 11,
      "home_goals_against": 6,
      "home_goals_for": 11,
      "home_loss": 2,
      "home_losses": 2,
      "home_played": 7,
      "home_points": 13,
      "home_position": 4,
      "home_rank": 4,
      "home_total": 7,
      "home_wins": 4,
      "home_won": 4,
      "id": 5179,
      "league": "Challenge League",
      "loss": 4,
      "losses": 4,
      "name_zh": null,
      "name_zht": null,
      "note": null,
      "played": 13,
      "points": 19,
      "position": 4,
      "promotion_id": null,
      "promotions": null,
      "rank": 4,
      "rows": null,
      "season_id": "96585",
      "source": "S2",
      "stage_id": "96585",
      "tables": null,
      "team_id": "2464",
      "updated_at": 1794232320492,
      "wins": 5,
      "won": 5,
      "name": "SC Kriens"
    },
    {
      "away_draw": 2,
      "away_draws": 2,
      "away_goal_diff": null,
      "away_goals": 7,
      "away_goals_against": 8,
      "away_goals_for": 7,
      "away_loss": 2,
      "away_losses": 2,
      "away_played": 7,
      "away_points": 11,
      "away_position": 2,
      "away_rank": 2,
      "away_total": 7,
      "away_wins": 3,
      "away_won": 3,
      "color": null,
      "comp_ref": "216",
      "conference": null,
      "deduct_points": null,
      "draw": 2,
      "draws": 2,
      "goal_diff": -4,
      "goals": 16,
      "goals_against": 20,
      "goals_for": 16,
      "group": null,
      "grp": null,
      "home_draw": 0,
      "home_draws": 0,
      "home_goal_diff": null,
      "home_goals": 9,
      "home_goals_against": 12,
      "home_goals_for": 9,
      "home_loss": 4,
      "home_losses": 4,
      "home_played": 6,
      "home_points": 6,
      "home_position": 7,
      "home_rank": 7,
      "home_total": 6,
      "home_wins": 2,
      "home_won": 2,
      "id": 5180,
      "league": "Challenge League",
      "loss": 6,
      "losses": 6,
      "name_zh": null,
      "name_zht": null,
      "note": null,
      "played": 13,
      "points": 17,
      "position": 5,
      "promotion_id": null,
      "promotions": null,
      "rank": 5,
      "rows": null,
      "season_id": "96585",
      "source": "S2",
      "stage_id": "96585",
      "tables": null,
      "team_id": "2451",
      "updated_at": 1794232320492,
      "wins": 5,
      "won": 5,
      "name": "Neuchâtel Xamax"
    }
  ],
  "message": "success",
  "success": true
}

Response fields 65

away_drawintegerAway matches drawnExample: 3
away_drawsintegerAway drawsExample: 3
away_goal_diffnullnullableAway goal difference
away_goalsintegerAway goals forExample: 11
away_goals_againstintegerAway goals againstExample: 13
away_goals_forintegerAway goals forExample: 11
away_lossintegerAway matches lostExample: 2
away_lossesintegerAway lossesExample: 2
away_playedintegerAway matches playedExample: 6
away_pointsintegerAway pointsExample: 6
away_positionintegerAway rankExample: 7
away_rankintegerAway rankExample: 7
away_totalintegerAway matchesExample: 6
away_winsintegerAway winsExample: 1
away_wonintegerAway matches wonExample: 1
colornullnullableColour value
comp_refstringCompetition id within the sourceExample: "216"
conferencenullnullableConference info (only a few competitions have it, e.g. MLS)
deduct_pointsnullnullablePoints deducted
drawintegerMatches drawnExample: 4
drawsintegerDrawsExample: 4
goal_diffintegerGoal differenceExample: 3
goalsintegerGoalsExample: 22
goals_againstintegerGoals againstExample: 19
goals_forintegerGoalsExample: 22
groupnullnullableNon-zero means the group number in a group stage: 1 = A, 2 = B and so on
grpnullnullableGroup
home_drawintegerHome matches drawnExample: 1
home_drawsintegerHome drawsExample: 1
home_goal_diffnullnullableHome goal difference
home_goalsintegerHome goals forExample: 11
home_goals_againstintegerHome goals againstExample: 6
home_goals_forintegerHome goals forExample: 11
home_lossintegerHome matches lostExample: 2
home_lossesintegerHome lossesExample: 2
home_playedintegerHome matches playedExample: 7
home_pointsintegerHome pointsExample: 13
home_positionintegerHome rankExample: 4
home_rankintegerHome rankExample: 4
home_totalintegerHome matchesExample: 7
home_winsintegerHome winsExample: 4
home_wonintegerHome matches wonExample: 4
idintegerRecord id; paging cursor (the id parameter returns records >= this value). In match endpoints it is the platform match id (gmid)Example: 5179
leaguestringCompetition name (English)Example: "Challenge League"
lossintegerMatches lostExample: 4
lossesintegerLossesExample: 4
name_enstringEnglish nameExample: "SC Kriens"
name_zhnullnullableChinese name
name_zhtnullnullableTraditional Chinese name
notenullnullableNote
playedintegerMatches playedExample: 13
pointsintegerPointsExample: 19
positionintegerPositionExample: 4
promotion_idnullnullablePromotion / relegation id
promotionsnullnullablePromotion / relegation list
rankintegerRankExample: 4
rowsnullnullableTeam standings item
season_idstringSeason idExample: "96585"
sourcestringSource code (S1, S2…)Example: "S2"
stage_idstringId of the stage it belongs toExample: "96585"
tablesnullnullableStandings item
team_idstringTeam idExample: "2464"
updated_atintegerLast update time (UTC, ISO 8601; incremental sync with the time parameter goes by it)Example: 1794232320492
winsintegerWinsExample: 5
wonintegerWinsExample: 5

Errors

HTTPmessageWhen
401missing API key / unauthorizedNo X-API-Key, or the key is invalid or disabled
400bad param …Malformed parameter (e.g. id is neither a number nor u<uid>)
301match merged into <gmid>Queried by an old match id that has been merged into a new gmid: Location points to the new address and the body carries moved_to
404not foundThe match / team / competition does not exist, or is outside what this key can see (external keys see only matches inside the open coverage)
429rate limit exceeded / daily quota exceededThe key's per-minute rate or daily quota is exceeded
429server busy, retry laterThe server's concurrency slots are full (only 2 heavy requests at a time); retry after Retry-After seconds
500query errorThe query failed on the server; you may retry