Hyrox Result API

Simple, transparent pricing

Every plan gets the race data: the catalogue, full finisher lists, per-event stats, individual athlete splits and global division benchmarks. The paid tiers add work you would otherwise have to do yourself — ranking a time against the field, breaking a race down into pacing, and pulling a race apart station by station. Cancel anytime.

Included on every plan

  • Upcoming race calendar
  • Seasons, events and divisions
  • Full finisher lists
  • Athlete search and individual splits
  • Per-event stats by division, gender and age group
  • Global division benchmarks
  • OpenAPI spec and bearer tokens

Starter

For side projects and first integrations.

€7.99/month

30 requests / minute

  • Upcoming race calendar, months ahead
  • Seasons, events, divisions and full finisher lists
  • Event stats by division, gender and age group
  • Individual athlete splits
  • Global per-station division benchmarks
  • Bearer tokens + OpenAPI docs

Most popular

Pro

For apps that do something with the numbers.

€19.99/month

100 requests / minute

Everything in Starter

  • Upcoming race calendar, months ahead
  • Seasons, events, divisions and full finisher lists
  • Event stats by division, gender and age group
  • Individual athlete splits
  • Global per-station division benchmarks
  • Bearer tokens + OpenAPI docs

Plus

  • Percentile lookup — rank any finish time against the whole catalogue
  • Pacing report — run fade, roxzone share and where the time went
  • Doubles and relay team-mates
  • More than 3x the throughput of Starter

Athlete intelligence

Rank a finish time against every comparable athlete in the catalogue, break a race into run fade and roxzone, and see who someone raced with.

Scale

For platforms comparing whole fields, not single results.

€49.99/month

1,000 requests / minute

Everything in Pro

  • Upcoming race calendar, months ahead
  • Seasons, events, divisions and full finisher lists
  • Event stats by division, gender and age group
  • Individual athlete splits
  • Global per-station division benchmarks
  • Bearer tokens + OpenAPI docs
  • Percentile lookup — rank any finish time against the whole catalogue
  • Pacing report — run fade, roxzone share and where the time went
  • Doubles and relay team-mates
  • More than 3x the throughput of Starter

Plus

  • Per-station field medians for any race
  • Full split distribution by division, gender and age group
  • On-demand split harvesting per race
  • 10x the throughput of Pro

Advanced split data

Median, average and count per station for a whole race field, split by division, gender and age group.

Already have an account? Log in

Secure Stripe checkout · Manage, upgrade, or cancel anytime from your account

What each plan gets you

Two kinds of benchmark are easy to mix up. Division benchmarks are station averages across every race we hold, on all plans. Advanced split data is the median for one specific race, broken down by division, gender and age group.

Feature Starter Pro Scale
Data
Upcoming race calendar Every published HYROX race, months ahead, with dates and location Included Included Included
Seasons, events and divisions Included Included Included
Full finisher lists per division Every finisher with rank, age group and total time Included Included Included
Event stats by division, gender and age group Counts, medians and percentiles for one race Included Included Included
Individual athlete splits All 8 runs and 8 stations for one athlete Included Included Included
Global per-station division benchmarks Station averages across every race, by division code Included Included Included
Ingest status per event Tells you when a race is complete, so you stop polling blind Included Included Included
OpenAPI spec and bearer tokens Included Included Included
Percentile lookup Where any finish time ranks in the whole catalogue, by division, gender and age group Not included Included Included
Pacing report Run fade, roxzone share and where the time actually went, for one race Not included Included Included
Doubles and relay team-mates Who an athlete raced with, with a link into each team-mate's own history Not included Included Included
Advanced split data Median, average and count per station for a whole race field, split by division, gender and age group Not included Not included Included
Limits
Requests per minute 30 100 1,000

Every row above is read from the live tier configuration, so this table cannot drift from what the API actually enforces.

Common questions

What HYROX data does the API give me?
Every season, every race, and every finisher in them — over 2,500 races and more than 1.3 million results. Per athlete you get the full race history plus station splits: all eight runs and all eight stations, individually timed. Per race you get the complete finisher list with rank, division, gender, age group and total time, and precomputed statistics by division, gender and age group. It arrives as versioned JSON with an OpenAPI contract, not as a scrape you have to maintain.
Can I build a HYROX leaderboard, athlete profile or race simulator with this?
Those are the three things most people build first, and each is a handful of requests. An athlete profile is search by name, then race history, then splits. A leaderboard is one call for a division's full finisher list, cursor-paged so the deepest page stays fast. A simulator is the benchmark endpoints: percentile targets per division so an athlete can set realistic station times before race day. Commercial products are welcome — several are already live on it.
Does it cover every HYROX season and race?
The catalogue spans every season, with the current one kept continuously up to date and finisher lists normally in within a day or two of a race finishing. Station-split coverage is deepest for recent seasons, because older races were never crawled at that depth. Every event exposes its own ingest status, so you can always tell what is complete rather than guessing.
How fast is the API?
Reads are typically served in 10–40 ms of application time. Results are immutable once a race is over, so responses carry long shared-cache headers and an ETag, and repeat reads are answered from a CDN edge close to your users rather than travelling to the origin at all.
What is the difference between division benchmarks and advanced split data?
Per-division benchmarks are station averages pooled across every race in the catalogue, requested by division code (for example HYROX_MEN). They answer "how does this time compare to HYROX men generally". They are on every plan. Advanced split data are the median, average and count per station for one specific race, broken down by division, gender and age group. They answer "how did this athlete compare to the people who actually stood next to them". Those are on the Scale plan.
Which plan do I need?
If you are showing people what happened — results, leaderboards, search, race history — Starter covers it. Move up to Pro when you start telling someone what their race meant: where their time ranks, whether they went out too hard, how long they spent in the roxzone. Scale is for comparing a whole field at once, station by station.
What is in the Pro plan that is not in Starter?
Three things, and all of them are answers rather than rows. Percentile lookup tells you where a finish time sits among every comparable athlete we hold, by division, gender and age group. The pacing report takes one race apart: how much the runs faded from lap one to lap eight, what share of the clock went on transitions, where the time actually went. Team-mates tells you who someone raced their doubles or relay with. You can build all three from Starter data if you want to — it just means pulling a lot of finisher lists and doing the maths yourself.
Do I still get athlete splits on the cheaper plans?
Yes. Individual athlete splits, all eight runs and eight stations, are on every plan via GET /api/v1/athletes/{id}/splits. What Scale adds is the aggregated field: the median for every division, gender and age group bucket in a race, which is expensive to produce because it means reading every finisher in that race.
Is there anything stopping me downloading the whole dataset?
Yes. Alongside the per-minute rate limit there are protections against bulk extraction, and they are tuned so that applications serving real users never encounter them — reading the same athlete a thousand times counts once. If a request is ever blocked, the response explains exactly what happened and who to contact; there is nothing to plan around up front.
How quickly is a race available after it finishes?
Finisher lists are normally in within a day or two of a race finishing, and the gender and age group breakdowns land at the same time. Advanced split data are harvested automatically the following night, so they are usually there the next morning. Every event exposes GET /api/v1/events/{slug}/ingest-status so you can check exactly where a race is instead of polling and guessing.
What about rate limits?
Each plan has its own per minute request limit, applied per account. Exceeding it returns 429 Too Many Requests with a Retry-After header. Check your current limit at GET /api/user.
Can I cancel or change plans anytime?
Yes. Use the billing section in your dashboard to open the customer portal and upgrade, downgrade or end your subscription. Plan changes are prorated by Stripe.
What happens to my integration if I cancel?
Your account and tokens stay exactly as they are, but protected endpoints start returning 402 Payment Required instead of data. Nothing is deleted, so resubscribing later puts the same tokens straight back to work.
Can I cache responses in my own application?
Please do — it is the intended pattern, and every read tells you how long it stays valid. Responses carry Cache-Control and an ETag, and a finished race's rankings are marked cacheable for a week because they never change again. Send the ETag back as If-None-Match and you get a 304 with no body. Caching to serve your own users is expected; mirroring the catalogue to redistribute it is not.
Can I filter events by country or date?
Yes. GET /api/v1/events takes season, country, from and to, and pages up to 100 at a time. So "every Belgian race this season" is one request, not a scan of the catalogue.
Do I need a card to explore the docs?
No. The human readable docs and the OpenAPI file are on the website. Calling protected API routes requires an account, an active subscription and a bearer token.
Where does the data come from, and how far back does it go?
Results are ingested from the official HYROX results platform and enriched with race dates and locations. The catalogue covers every season, with the current season kept continuously up to date. Coverage of station splits is deepest for recent seasons, since older races were never crawled at that depth.