Built for Spartan DEKA developers
The Spartan DEKA results API your product can ship on
Every Spartan DEKA race in one data model: events, competitions, full finisher lists, athlete careers and zone-by-zone splits, across DEKA FIT, MILE, STRONG, ATLAS and ULTRA. One versioned contract, with identifiers that survive a timing provider re-templating its site.
Versioned REST · OpenAPI 3 · Bearer auth · Cursor pagination · From $9.99/month
See the payload
Exactly what you get back
Real responses from the running API, so nobody integrates against a fiction. Pick an endpoint.
https://api.dekaresultsapi.com/v1/events?country=US&limit=2starter{
"data": [
{
"id": "01a0ba0d-81a1-7061-9b5e-aff17a39070b",
"slug": "deka-atlas-camp-transformation-palm-desert",
"name": "DEKA ATLAS: The Camp Transformation Center",
"city": "Palm Desert",
"region": "CA",
"country_code": "US",
"start_date": "2026-09-20",
"season": 2026,
"race_count": 3,
"result_count": 48,
"formats": ["ATLAS"]
},
{
"id": "01a0b969-5ead-76cd-8140-05e2febb91e0",
"slug": "2026-deka-fit-ultra-fort-lauderdale-fl",
"name": "2026 DEKA FIT & Ultra - Fort Lauderdale, FL",
"city": "Fort Lauderdale",
"region": "FL",
"country_code": "US",
"start_date": "2026-09-12",
"season": 2026,
"race_count": 6,
"result_count": 1204,
"formats": ["FIT", "FIT_ULTRA", "FIT_TEAM"]
}
],
"meta": { "cursor": "eyJzIjoiMjAyNi0wOS0xMiIsImkiOiIwMWEwYjk2OSJ9",
"has_more": true, "count": 2 },
"errors": null
}Pro
See where a finish time ranks
Percentile against every comparable Spartan DEKA result we hold, the pacing breakdown for one race, and zone-by-zone statistics for a whole field. Drag the slider; all of it is measured data.
A 45:00 DEKA FIT
Top 34.4%
faster than 65.6% of the field
p25
42:39
Median
48:53
p75
56:08
Measured from finished DEKA FIT results, never modelled. Global leaderboard entries are excluded from the cohort, because they are each athlete’s season best rather than a field, and pooling them would flatter every answer.
Field median per zone · DEKA FIT
- Zone 1 · RAM Lunges1:06
- Zone 2 · Row2:34
- Zone 3 · Box Jump / Step Over1:00
- Zone 4 · Med Ball Sit-Up Throw1:22
- Zone 5 · SkiErg2:40
- Zone 6 · Farmers Carry1:15
- Zone 7 · Air Bike2:30
- Zone 8 · Dead Ball Wall Over1:54
- Zone 9 · Sled Push / Pull3:16
- Zone 10 · RAM Burpees2:13
The call behind this panel
GET /v1/percentile
?format=FIT
&time=45:00
{ "percentile": 65.6,
"cohort_size": 1338,
"median": "48:53" }What you can build
Three things people ask us for
Each one is a single request away.
A complete career on one screen
Every race an athlete has finished, across formats and years, with personal bests. A name search and one follow-up call.
{
"display_name": "A. Fernandez",
"result_count": 7,
"personal_bests": [
{ "format": "FIT", "time": "38:12.4" },
{ "format": "STRONG", "time": "21:08.9" }
]
}Where the race was actually lost
Zone share, run share, run fade, and every segment measured against the median for the same segment in the same race.
{
"zone_share_pct": 67.3,
"run_share_pct": 32.7,
"run_fade_pct": 1.0,
"worst": { "label": "Zone 9 - Sled",
"vs_field_ms": 12400 }
}A field, broken apart
Median, mean and quartiles per zone across a whole race, split by division, gender and age group, without scanning the field yourself.
{
"label": "Zone 5 - SkiErg",
"samples": 756,
"median_ms": 159600,
"p25_ms": 152500,
"p75_ms": 186600
}Reference
Every endpoint
Thirteen routes. Two of them need no key at all.
| Method | Path | Plan | What it returns |
|---|---|---|---|
| GET | /v1/events | Starter | The catalogue: filter by country, date, format, season. |
| GET | /v1/events/{id} | Starter | One event with its competitions, sources and facets. |
| GET | /v1/events/{id}/results | Starter | Full finisher list, fastest first. |
| GET | /v1/results/{id} | Starter | One result with zone and run splits. |
| GET | /v1/athletes/search | Starter | Find an athlete by name. |
| GET | /v1/athletes/{id} | Starter | An athlete with personal bests per format. |
| GET | /v1/athletes/{id}/results | Starter | A complete career, newest first. |
| GET | /v1/leaderboards | Starter | Global rankings by season, format and division. |
| GET | /v1/percentile | Pro | Where a finish time ranks across the whole catalogue. |
| GET | /v1/results/{id}/pacing | Pro | Zone share, run share, fade, and vs the field. |
| GET | /v1/races/{id}/zone-stats | Scale | Median and quartiles per zone for a whole field. |
| GET | /v1/formats | Open | Every DEKA format we recognise, with race counts. |
| GET | /v1/health | Open | Row counts, last ingestion, enabled sources. |
Getting started
Four steps to your first response
- 1
Create an account
Email and a password. No card to look at the docs, the OpenAPI spec or the plan ladder.
- 2
Pick a plan
Starter for the data, Pro for the analysis, Scale for whole-field statistics. Change it whenever; your keys keep working.
- 3
Create a key
Shown once. Send it as
X-API-Keyor a bearer token. - 4
Ship
Cursor pagination, cache headers, a stable envelope, and an OpenAPI 3 document to generate a client from.
curl "https://api.dekaresultsapi.com/v1/events?country=US&limit=5" \
-H "X-API-Key: dk_your_key"Common questions
Where does the data come from?
Is this official?
How fresh is it?
meta.last_updated_at and meta.is_provisional, so you can tell a settled result from one that can still change.What is the coverage, honestly?
Can I cache or store the responses?
Cache-Control. Mirroring the whole catalogue in order to redistribute it is not.What happens when I hit the rate limit?
429 with a Retry-After header. Every response also carries X-RateLimit-Limit, so you never have to trigger one to discover your own ceiling.What if I call something my plan does not include?
402 whose body names the capability, the plan you hold, the plan it needs and where to upgrade. It is machine-readable, so you can surface it in your own UI rather than parsing prose.Do I have to rotate keys when I upgrade?
Is there an OpenAPI spec?
Can I cancel?
Start building on Spartan DEKA data today
Create an account, pick a plan, and make your first call in about two minutes.

