Schedule
This guide covers how to retrieve the full race calendar for a season using the Schedules endpoint, and what data is available at the schedule level.
When to use this
Use the Schedules endpoint when you want to:
Retrieve all race weekends for a season in a single call, each with their sessions and venue
Build a season calendar view showing all rounds with dates and circuit names
Get a structured overview of the season without querying each stage individually
What the schedule returns
The Schedule is a denormalised view that combines stage, fixture, and venue data for a given league and season in one response. Unlike querying stages or fixtures separately, the Schedules endpoint returns all three together without requiring nested includes.
The Schedule entity contains three nested objects per race weekend:
Stages - the race weekend itself (e.g. "Bahrain Grand Prix 2025")
Fixtures - each individual session within that weekend (Practice 1, Qualifying, Race, etc.)
Venues - the circuit where the weekend takes place
Retrieving the schedule
The Schedules endpoint requires a season_id. See Leagues and seasons for how to find it.
GET https://api.sportmonks.com/v3/motorsport/schedules/seasons/{season_id}
?api_token={your_token}A schedule response looks like this (partial):
Note the leg field on each fixture. It shows the session's position within its session type: "1/3" means Practice 1 of 3, "3/3" means the third qualifying session. For race sessions it returns "1/1". The length field returns planned session length in minutes for practice and qualifying, and total lap count for race sessions.
Working with the data
Build a race calendar
Find the next upcoming race weekend
Common pitfalls
Querying by league_id instead of season_id. The Schedules endpoint requires a season_id. Pass the league ID to the seasons endpoint first to resolve the current season. See Leagues and seasons.
Assuming venues always has one entry. The venues array on each round is a list. In all known cases it contains exactly one entry per round, but defensively access it as venues[0] with a null check.
Matching session type by name string. Session names like "Practice 1" and "Race" are reliable across the current dataset, but can vary for sprint weekends (where "Practice 1" may be replaced by "Sprint Qualifying"). Check the leg field as a secondary signal for session ordering.
The Schedule entity has no include options. Unlike Fixtures or Stages, the Schedule endpoint returns stages, fixtures, and venues as a flat embedded response. There are no additional includes available on this endpoint.
Common errors
401
Missing or invalid api_token
404
The season_id does not exist or is not in your subscription
See also
Related tutorials
Reference
FAQ
What is the difference between the Schedule endpoint and the Stages endpoint? The Schedule endpoint returns a denormalised view of the entire season at once, combining stages, fixtures, and venues in a single response without extra includes. The Stages endpoint returns stages individually or paginated, with includes available to attach fixtures separately. Use Schedule for building a full season calendar; use Stages when you need more control over what gets included.
Does the Schedule endpoint paginate? Yes. For a full season with 24 rounds, the default page size of 25 is usually sufficient, but use cursor pagination to be safe. See Pagination.
How do I tell if a race weekend has a sprint race? Check the fixture names within a round. Sprint weekends replace one practice session with a sprint qualifying and sprint race session. The leg field will also reflect the changed session count.
Last updated
Was this helpful?