Reference
Every endpoint, runnable
Press Send on any of these and watch the real API answer. Looking around needs no key: the calls go through a server-side proxy, capped at ten rows.
Base URL https://api.crossfitapi.com/v1 · Bearer auth · full documentation
/v1/healthOpenRow counts, the last successful sync per source, and the independence notice.
Runs against the live API through a server-side proxy. No key needed, capped at ten rows. With your own key there is no cap and no allowlist.
The contract
What is true of every endpoint, so you only have to learn it once.
One envelope
Lists return { data, pagination }. Errors return { error: { code, message } }. Branch on code; it will not change.
Cursor pagination
limit and cursor. Keyed on the sort value plus a tiebreaker id, so page 2,000 costs what page 1 costs and tied ranks survive a page boundary.
Canonical division keys
men-45-49 means the same thing in 2014 and in 2026, even though the upstream ids differ. An unknown key is a 400, not an empty list.
Raw scores always
score_raw is always present. reps, time_seconds and tiebreak_seconds may be null, where the encoding for that season is one we have yet to verify.
Provenance
Records carry a source object with a URL you can open. Anything we computed carries calculated_by.
RateLimit headers
Every response carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset, so you can see the wall coming.