CrossFit Games API
CrossFit Games API
Finals fields, event-by-event placings and the points that decide them, for every Games season we have imported.
Plans from $15 a month.
The Games are scored differently from everything else
Most CrossFit data is a leaderboard: a rank and a score per athlete. The Games are not. They are a series of events, each awarding points on a published table, and the standing after event nine is the sum of nine placings — not a score anybody published directly. Read the final leaderboard alone and you cannot answer who led after the first day.
Event results also carry no rep counts or times in the same field. A sprint couplet, a one-rep max and a marathon row are three different score types, and the encoding tells you which only if you already know the convention. We decode it, label the type, and keep the source's own string beside our decoded value so you can always check our arithmetic.
Cuts are the third trap. Athletes are eliminated part-way through, so an event's field is smaller than the season's field, and a naive percentile computed against the wrong denominator flatters everyone who survived.
Endpoints
| Method | Path | What it returns |
|---|---|---|
| GET | /v1/games | Every Games season we serve |
| GET | /v1/games/{year}/leaderboard | Final standings, cursor-paginated |
| GET | /v1/games/{year}/workouts | The event list, in order, with score types |
| GET | /v1/games/{year}/divisions | Individual and team fields |
| GET | /v1/workouts/{id}/leaderboard | One event on its own |
Example
Request
curl "https://api.crossfitapi.com/v1/games/2026/leaderboard?division=men&limit=3" \
-H "Authorization: Bearer cfapi_live_..."Response
{
"data": [
{
"rank": 1,
"score": 852,
"athlete": { "id": "ath_06gc...", "name": "...", "gender": "M" },
"country": { "code": "US", "name": "United States" },
"gym": null,
"region": null,
"scaled": "rx"
}
],
"pagination": { "next_cursor": "eyJrIjozLCJ...", "has_more": true }
}What is covered
- Final standings per division, with the points total the source published.
- The event list in competition order, each with its decoded score type.
- Per-event leaderboards, so a single event can be read on its own.
- Team and individual divisions kept apart rather than interleaved.
- Every figure we computed is labelled calculated_by; everything else is the source's.
Coverage grows as each season finishes importing . A season appears there once it is imported and reconciled.
What people build with it
Season recaps
Reconstruct the standings after any event, not just the last one.
Broadcast graphics
Event order, score types and points tables from one request.
Athlete comparisons
Place two competitors side by side across the same events.
Have a look at the data first
The docs and the live explorer are open, so you can see what comes back before you pay for anything.