Skip to content
DEKA Results API

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

DEKA FITULTRADEKA FIT TeamDEKA MILEDEKA MILE TeamDEKA STRONGDEKA STRONG TeamDEKA ATLASDEKA FIREDEKA IGNITIONDEKA Relay

See the payload

Exactly what you get back

Real responses from the running API, so nobody integrates against a fiction. Pick an endpoint.

GEThttps://api.dekaresultsapi.com/v1/events?country=US&limit=2
{
  "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
}
Recorded sample payload · no key needed to look200 OK

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

30:00median 48:5390:00

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.

Athlete apps

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" }
  ]
}
Coaching tools

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 }
}
Event platforms

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.

MethodPathPlanWhat it returns
GET/v1/eventsStarterThe catalogue: filter by country, date, format, season.
GET/v1/events/{id}StarterOne event with its competitions, sources and facets.
GET/v1/events/{id}/resultsStarterFull finisher list, fastest first.
GET/v1/results/{id}StarterOne result with zone and run splits.
GET/v1/athletes/searchStarterFind an athlete by name.
GET/v1/athletes/{id}StarterAn athlete with personal bests per format.
GET/v1/athletes/{id}/resultsStarterA complete career, newest first.
GET/v1/leaderboardsStarterGlobal rankings by season, format and division.
GET/v1/percentileProWhere a finish time ranks across the whole catalogue.
GET/v1/results/{id}/pacingProZone share, run share, fade, and vs the field.
GET/v1/races/{id}/zone-statsScaleMedian and quartiles per zone for a whole field.
GET/v1/formatsOpenEvery DEKA format we recognise, with race counts.
GET/v1/healthOpenRow counts, last ingestion, enabled sources.

Getting started

Four steps to your first response

  1. 1

    Create an account

    Email and a password. No card to look at the docs, the OpenAPI spec or the plan ladder.

  2. 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. 3

    Create a key

    Shown once. Send it as X-API-Key or a bearer token.

  4. 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?
Public race-timing publications, principally RACE RESULT, which is the system of record for Spartan DEKA. Spartan’s own DEKA leaderboards page is a RACE RESULT widget. Spartan supplies venue geography and a stable athlete identifier. Every canonical row records which source produced it and when we last saw it.
Is this official?
No. It is an independent data product and is not affiliated with, endorsed by or operated by Spartan or DEKA. We say so in the footer of every page because it is the honest answer, and because you may need to say it to your own users.
How fresh is it?
Ingestion runs continuously and re-crawls events that are still uploading. Every response carries 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?
Events and results are broad. Splits are not. Only HQ-timed events publish per-participant segment times; most gym-hosted DEKA STRONG and MILE events publish a finish time only. We report a result with no splits as an empty array and never interpolate one.
Can I cache or store the responses?
Yes. Caching to serve your own users is expected, and every response carries a sensible Cache-Control. Mirroring the whole catalogue in order to redistribute it is not.
What happens when I hit the rate limit?
A 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?
A 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?
No. A plan change applies to the keys you have already deployed, and the rate limit follows it. Downgrading is the same in reverse: keys survive, the gated routes start answering 402, and nothing is deleted.
Is there an OpenAPI spec?
Yes, and it is public: /v1/openapi.json. There is an interactive reference at /reference, and /llms.txt is the whole thing as plain text for pasting into an assistant.
Can I cancel?
Any time, from the billing portal. Your account and keys stay exactly as they are; the data routes simply start answering 402 again. Resubscribing puts the same keys straight back to work.

Start building on Spartan DEKA data today

Create an account, pick a plan, and make your first call in about two minutes.

Spartan DEKA Results API: fitness race results for DEKA FIT, MILE, STRONG and ATLAS