CrossFit athlete API
CrossFit athlete API
Search athletes, resolve them to a stable identifier, and pull an entire competitive career in one request.
Plans from $15 a month.
Identity is the hard part
An athlete appears in many seasons, many competitions and eventually many platforms. Tying those together is what turns a results dump into a career.
Every athlete gets a canonical identifier of ours, so it survives a reorganisation at the source. The upstream ids stay available for interoperability, and you can look an athlete up by one directly if you are migrating off your own scraper.
Matching across sources is deliberately conservative. Name similarity alone merges nobody: a single Open division holds several real, distinct people with the same name, and one wrong merge corrupts two careers and every statistic built on them.
Endpoints
| Method | Path | What it returns |
|---|---|---|
| GET | /v1/athletes/search?q= | Exact, then prefix, then substring |
| GET | /v1/athletes/{id} | Profile, country and current gym |
| GET | /v1/athletes/{id}/career | Every season and stage, chronologically |
| GET | /v1/athletes/source/crossfit/{id} | Resolve an upstream competitor id |
Example
Request
curl "https://api.crossfitapi.com/v1/athletes/ath_06gc8qmytnv7segtzfefvh3nv4/career" \
-H "Authorization: Bearer cfapi_live_..."Response
{
"athlete": { "id": "ath_06gc...", "name": "Jeffrey Adler" },
"data": [
{ "year": 2026, "competition": "CrossFit Games", "type": "games",
"scope": "worldwide", "rank": 11, "total_entrants": 30,
"source_percentile": 63,
"source": { "name": "CrossFit Leaderboard" } },
{ "year": 2026, "competition": "Individual Semifinal", "type": "semifinal",
"scope": "region", "rank": 2, "region": "North America West" }
]
}What is covered
- Athletes from every imported season, deduplicated by upstream identity.
- Careers spanning the Open, Quarterfinals, Semifinals and the Games.
- Worldwide, region, country and affiliate scopes per competition.
- CrossFit's own percentile served as source_percentile, under its own name.
- Height and weight exactly as published, unit included, plus a parsed value where the unit is unambiguous.
Coverage grows as each season finishes importing . A season appears there once it is imported and reconciled.
What people build with it
Profile pages
A complete athlete page from two requests.
Fantasy
Historical form for drafting and scoring.
Social cards
Shareable athlete summaries generated from real data.
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.