CrossFit API
A CrossFit API for developers
One REST API over CrossFit athletes, competitions, results, workouts and affiliate gyms, normalized, historical and stable across seasons.
Plans from $15 a month.
Is there a CrossFit API?
There is public JSON behind the CrossFit Games leaderboard, and you can read it. People do. Access is the easy part. The shape is the problem: it was built to fill one website.
Division ids are not stable between seasons: the number that means “Men 45-49” in one year means something else in another. Scores are packed integers whose encoding changes by competition type and era. “Region” means an old competitive region before 2019 and a continent after it, under the same field name. Pre-2013 results carry no affiliate id at all. Each of those is a day of work and a permanent maintenance obligation.
This API does that work once, stores the result, and gives you a schema that does not move under you.
Endpoints
| Method | Path | What it returns |
|---|---|---|
| GET | /v1/athletes/search?q= | Athletes by name, with country and gym |
| GET | /v1/athletes/{id}/career | Every season and stage, chronologically |
| GET | /v1/open/{year}/leaderboard | A season's leaderboard, cursor-paginated |
| GET | /v1/gyms?near=lat,lon | Affiliate gyms within a radius |
| GET | /v1/data | What is covered, counted from the database |
Example
Request
curl "https://api.crossfitapi.com/v1/athletes/search?q=Jeffrey%20Adler" \
-H "Authorization: Bearer cfapi_live_..."Response
{
"data": [
{
"id": "ath_06gc8qmytnv7segtzfefvh3nv4",
"name": "Jeffrey Adler",
"slug": "jeffrey-adler-469656",
"country": { "code": "CA", "name": "Canada" },
"gym": { "id": "gym_06gc...", "name": "CrossFit Wonderland" },
"latest_season": 2026,
"competitions": 9
}
],
"pagination": { "next_cursor": null, "has_more": false }
}What is covered
- CrossFit Open, every season from 2011 onward.
- Athletes with canonical ids that do not change when the source reorganises.
- Affiliate gyms with coordinates, searchable by radius.
- Workout-level results as well as overall placings.
- Provenance on every record: which source, which URL, when we fetched it.
Coverage grows as each season finishes importing . A season appears there once it is imported and reconciled.
What people build with it
Athlete apps
Complete profiles and competition histories without maintaining a scraper.
Analytics
Season-over-season comparisons that are actually comparable.
AI applications
Structured historical context for a fitness assistant.
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.