Skip to content
CrossFitAPI.com

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

MethodPathWhat it returns
GET/v1/gamesEvery Games season we serve
GET/v1/games/{year}/leaderboardFinal standings, cursor-paginated
GET/v1/games/{year}/workoutsThe event list, in order, with score types
GET/v1/games/{year}/divisionsIndividual and team fields
GET/v1/workouts/{id}/leaderboardOne 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 }
}

Run these against live data →

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.

Get API access