Developer preview
SwimSpace Cuts API.
The same qualifying-time database that powers the app, as a small, read-only JSON API. Look up cut standards by LSC, gender, age, course and event, or check a swimmer's time against every tier at once.
Free · no keyFastAPI · read-onlyOpen CORS
Coverage map
Everything the API can answer today. Six standards sets, every age 6–18, in all three courses — with more LSCs being added.
| LSC | Zone | Standards | Cuts |
|---|---|---|---|
| IllinoisIL | Central | RegionalSeniorState |
2,120 |
| IndianaIN | Central | DivisionalState |
1,840 |
| IowaIA | Central | Championship |
1,134 |
| WisconsinWI | Central | Champs |
1,094 |
| HawaiiHI | Western | BAInviteChampsZone |
4,420 |
| USAUSA | National |
BBBAAAAAAAAAA
Central ZoneCentral Zone SectionalsWestern Zone Sectionals
FuturesWinter JuniorsPro Swim SeriesJr NationalsNationalsUS Open
|
19,498 |
How the cuts ladder up
A swimmer doesn't stop at their LSC's fastest cut. /v1/check walks this whole ladder, so once you clear everything your own LSC publishes you keep climbing into the national meets rather than dead-ending at “qualified”.
- Your LSC's cutsRegional → State → Champs, whatever your LSC publishes.
- Your zone's cutsSectionals are run per zone and you can only qualify for your own. A Central swimmer gets Central Zone Sectionals; a Western swimmer gets Western Zone Sectionals. The API never shows you the other zone's cut. (Central Zone is the 14&U zone cut — Central's convention, not a national one.)
- NationalFutures → Winter Juniors · Pro Swim Series → Jr Nationals → Nationals → US Open. Zone-agnostic: these apply to everyone.
The AAAA–B motivational standards sit alongside the ladder as badges rather than targets, so they never get picked as your “next cut”.
Want to feel the data first? The cut-standards tool on the home page runs on this exact dataset, right in your browser.
Endpoints
Shapes below are current but pre-launch; the base URL and details may still change.
GET /health # status + which LSCs are loaded
GET /cuts.json # the full DB (what the app fetches today)
GET /v1/lscs # every LSC + its coverage
GET /v1/standards/{lsc} # one LSC, full nested tree
GET /v1/standards/{lsc}/{gender}/{age} # all three courses at once
GET /v1/standards/{lsc}/{gender}/{age}/{course} # a swimmer's cuts
GET /v1/check/{lsc}/{gender}/{age}/{course} # grade a time: what it makes, what's next
GET /v1/compare # one event across every LSC
lsc takes a name (Iowa) or code (IA); gender accepts male/female (also m/f, boys/girls); course is SCY/SCM/LCM. The standards routes take an optional ?event= and ?tier=. Interactive docs live at /docs.
Example — check a time
The one that matters: hand it a swim and it tells you which cuts you've already made and what to chase next. A swimmer who clears everything their own LSC publishes keeps climbing into the national cuts rather than dead-ending at “qualified”.
GET https://api.swimspace.app/v1/check/Iowa/male/16/SCY?event=50 Free&time=22.50
{
"event": "50 Free", "time": "22.50", "seconds": 22.5,
"achieved": [
{ "name": "Championship", "time": "23.49", "source": "Iowa" }
],
"next": {
"name": "Central Zone Sectionals", "time": "21.69",
"source": "USA", "gap_seconds": 0.81
},
"qualified_for_all": false
}
Example — list the LSCs
GET https://api.swimspace.app/v1/lscs
[
{
"name": "Iowa", "code": "IA",
"genders": ["Female", "Male"],
"age_min": 6, "age_max": 18,
"courses": ["LCM", "SCM", "SCY"],
"tiers": ["Championship"]
}
// ...one entry per LSC
]
Example — a swimmer's cuts
GET https://api.swimspace.app/v1/standards/Iowa/female/13/SCY?event=100 Free
{
"lsc": "Iowa", "code": "IA",
"gender": "Female", "age": 13, "course": "SCY",
"events": [
{
"event": "100 Free",
"cuts": [
{ "name": "Championship", "time": "1:00.59", "seconds": 60.59 }
]
}
]
}
Every cut carries seconds alongside the display time, so comparing a swimmer's mark to a standard is a single numeric check. Drop the ?event= and you get every event for that LSC / gender / age / course in one response.
Unofficial data
These standards are compiled from the time-standard documents published by USA Swimming and the individual LSCs. They're provided as-is and may contain transcription errors or be superseded — always verify against your LSC's official document before relying on a cut. Not affiliated with or endorsed by USA Swimming.
Using it
It's free and needs no key — just call it. Responses are cached hard (they change a few times a year), so please send If-None-Match and respect Cache-Control rather than re-downloading. If you're building something on it, for a team site, a bot, or research, say hi — I'd like to know what's depending on it before I change anything.