Skip to main content
Use /football/matches to get upcoming fixtures and finished results for a team, competition, date range or matchday.
Fastest way: ask your AI. Set up your coding tool once with Build with AI, then paste:
Prompt

The filters you’ll use most

The JavaScript examples run on your server and read your key from the THESTATSAPI_API_KEY environment variable.

Next fixture for a team

Ask for scheduled matches, soonest first, and take the first one.
Response (trimmed):
Response
Use per_page=5 for the next five. Kickoff times (utc_date) are always UTC.
Without sort=utc_date you get the newest kickoff first, which for scheduled matches is the one furthest in the future.

Latest results

Results come newest first by default, so you don’t need sort.
Response (trimmed):
Response
score.winner is home, away or draw once the match has finished, and counts extra time and penalties. after_extra_time and penalty_shootout are filled only when a match went that far.

One day’s matches in your time zone

Set date_from and date_to to the same day. Add utc_offset so “a day” means your local day, not the UTC one.
In UTC, the Premier League has 6 matches on 10 October 2026. At +10:00 that day runs from 14:00 UTC on 9 October to 14:00 UTC on 10 October, so only Arsenal v Leeds United (11:30 UTC) comes back.
Encode + as %2B in a raw URL. A bare + reads as a space and returns 400 BAD_REQUEST (“Invalid utc_offset”). Negative offsets such as -05:00 need no encoding.
If you send date by mistake, the API tells you what to use instead:

A matchday, a group or a knockout round

Returns the 10 matches of Premier League 26/27 matchday 6.

Check which fixtures are loaded

A season’s later rounds may not be loaded yet, so don’t assume every fixture of the season is there. To see the furthest-ahead fixture that is loaded, ask for scheduled matches newest first:
The first row is the last loaded fixture, and meta.total is how many scheduled matches are loaded. Get coverage for a competition shows finished and total matches per season. See Coverage for more.

Get every page

Lists return 20 rows per page by default and 100 at most (per_page=101 returns 400). Read meta.total_pages and request each page. Matches with the same kickoff are ordered by match ID, so pages stay stable.
JavaScript
Each page is one request against your rate limits, so cache results you don’t need fresh.

API reference