Football standings API
StandingsA league table for a competition and season.
A list you will want once and then keep: it changes rarely. Ids in it open their own endpoints.
It needs competition and season. Leave one out and the answer names it, before any data is read.
Try it
Your key stays in this browser and is filled in on every docs page.
{
"data": {
"league_id": "fb_3ecv7ykzb0",
"country_name": "Japan",
"league_name": "J2 League",
"season_start_year": 2026,
"as_of": null,
"venue": null,
"table": [
{
"position": 1,
"team_id": "fb_j7mf17ccb0",
"team_name": "Tegevajaro Miyazaki",
"played": 30,
"won": 21,
"drawn": 5,
"lost": 4,
"goals_for": 53,
"goals_against": 24,
"goal_difference": 29,
"points": 68
},
{
"position": 2,
"team_id": "fb_nb55pjkdzs",
"team_name": "Vegalta Sendai",
"played": 27,
"won": 19,
"drawn": 3,
"lost": 5,
"goals_for": 51,
"goals_against": 24,
"goal_difference": 27,
"points": 60
},
{
"position": 3,
"team_id": "fb_3y29vg3tte",
"team_name": "Kataller Toyama",
"played": 27,
"won": 17,
"drawn": 4,
"lost": 6,
"goals_for": 57,
"goals_against": 32,
"goal_difference": 25,
"points": 55
}
]
},
"meta": {
"sport": "football",
"endpoint": "/standings",
"count": 40,
"as_of": "2026-11-02T05:16:53Z",
"cached": false,
"age_seconds": 0
}
}Parameters
Query values this call takes. Anything else is refused with bad_param and the list it accepts.
| Name | Type | What it does | |
|---|---|---|---|
| competition | id | required | Only this competition, by its id from Competitions. |
| season | string | required | The season, by the id or starting year shown in Competitions. |
| page | integer | optional | Which page of rows, from 1. |
| per_page | integer | optional | Rows per page, up to 100 on most lists. |
Returns
Each field in data, from a real answer. Every id is ours and opens its own endpoint.
| Field | Type | What it holds |
|---|---|---|
| league_id | id | The competition, by our id |
| country_name | string | Where it is played |
| league_name | string | The competition |
| season_start_year | integer | The year the season started |
| as_of | null | As of |
| venue | null | The venue |
| table | list | Table |
| meta | What it holds |
|---|---|
| sport, endpoint | What you asked |
| count | Rows in this answer |
| page, per_page, total, next_cursor | Where you are in a paged list, when it is paged |
| as_of | When the data was built |
| cached, age_seconds | Whether this is a stored copy, and its age |
| access | On the free key: what it reads, and the plan that opens the rest |
Errors
Codes this call can give. Each is explained in Errors.
| Status | Code | When |
|---|---|---|
| 401 | no_key | No key sent, or not in a form we read |
| 401 | bad_key | A key we do not know |
| 403 | plan | The free key asked for a date other than yesterday |
| 404 | not_found | An id we never issued for football |
| 422 | bad_param | A value this call does not take, or a required one missing |
| 429 | rate | Over the calls a minute for your plan |
| 503 | upstream | The data is not answering; retry after Retry-After |
The free key reads yesterday. The Football plan opens live, fixtures and every date held, for $79 a month.
Add Football