Skip to content
CrossFitAPI.com

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

MethodPathWhat 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}/careerEvery 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" }
  ]
}

Run these against live data →

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.

Get API access