Navigating a competition¶
To be deprecated
The legacy read-only JSON endpoints documented on these pages are being phased out. New work should use the new DRAPI instead — see Manipulating Competitions (and the Units API for per-unit results).
To simply fetch information, you do NOT need to authenticate. We encourage you to use these APIs to build results into your own event websites, which you can do with pure JavaScript.
OpenTrack believes that, as far as possible, Athletics Data should be open data and freely available. The only exception to this is dates of birth; generally, APIs will give the age of the competitor, unless you are logged in as an authorised director of that competition, a national federation or an approved statistician.
You can therefore download data from any competition at any stage in its life cycle:
- Calendar entries only saying what/where when.
- Entries - when people or teams have stated their intent to enter. The programme of events is usually available at this stage.
- Start lists - after seeding and detailed planning.
- Results - when the competition is in progress or finished.
Using the Welsh Championships (28-29 June 2025) as an example:
Getting the timetable / event list¶
The following URL is fast and gives you both some top-level descriptive data, and a summary of each heat...
https://data.opentrack.run/en-gb/x/2025/GBR/wa-scjc/tt/json/
The timetable node will contain a list of units, each a heat or field event pool. These are grouped into events sharing a common event_id ("T15" in this case), and identified by a round and heat. So, the final is round 3, heat 1, using the same notation FinishLynx follows.
Here's a section from the json it returns, showing just one heat (the men's 100m final):
Competition Timetable JSON Example
{
"name": "107th Welsh Senior, U17 & Para Outdoor Track & Field Championships (Incorporating British U23 Championships)",
"shortName": "107th Welsh Senior, U17 & Para Outdoor Champs",
"englishName": "",
"nameLocal": "",
"date": "2025-06-28",
"venue": "3ba78509-5777-4859-aec9-c8facda812ed",
"timetable": [
...many events omitted...
{
"event__event_id": "T15",
"event__category": "SM_U23M",
"event_code": "100",
"event_name": "SENM/U23M 100M",
"day": 1,
"round": 3,
"round_name": "",
"heat": 1,
"heat_name": "Final",
"mongo_unit_id": "337d675a-65e9-42e1-bed0-697a7df69c3b",
"scheduled_start_time": "17:56",
"status": "finished",
"results_status": "official",
"participant_count": 9,
"winner_performance": "10.32",
"winner_first_name": "Michael",
"winner_last_name": "Onilogbo",
"winner_team": "",
"url": "/x/2025/GBR/wa-scjc/event/T15/3/1/json/"
},
...
]
}
Please note that you may see empty heats that were planned but never took place. We try to add in the winner's details and performance, so you can quickly build high level information screens.
Details of one unit¶
You can then take the URL of any one unit to get the full details:
https://data.opentrack.run/en-gb/x/2025/GBR/wa-scjc/event/T15/3/1/json/
This will return a nested structure with each starter or finisher's details. It's the same link, whether the race has happened or not.
Competition Event Unit JSON Example
{
"day": 1,
"distance": 100,
"event_code": "100",
"event_id": "T15",
"event_name": "SENM/U23M 100M",
"heat": 1,
"heat_name": "Final",
"id": "337d675a-65e9-42e1-bed0-697a7df69c3b",
"original_results_status": "none",
"override_ce_scores": false,
"override_places": false,
"paces": [],
"precision": 2,
"published": true,
"results": [
....(see below)....
]
"results_status": "official",
"round": 3,
"round_name": "Final",
"scheduled_start_time": "17:56",
"show_athlete_details": false,
"show_handicap": false,
"show_points": false,
"show_raw_time": false,
"show_reaction_time": false,
"source": "T15-3-01.lif",
"split_distances": [],
"splits_lap": 200,
"splits_start": 200,
"sql_unit_id": 207558,
"status": "finished",
"unit_code": "FINAL",
"wind_assistance": "+1.6"
}
The list of results shows a structure for each athlete...
Competition Event Unit JSON Example
{
"advancement": "",
"age_grade": null,
"age_group": "U23",
"athlon_points": "",
"bib": "81",
"category": "U23M",
"catpos": 1,
"checked_in_callroom": "",
"extra_url": "",
"finish_time": "",
"first_name": "Michael",
"first_name_local": "",
"flag": "//files.opentrack.run/live/clubflags/GBR/NEB.png",
"gender": "M",
"ipc_classification_field": "",
"ipc_classification_track": "",
"lane": 5,
"last_name": "Onilogbo",
"last_name_local": "",
"nationality": "GBR",
"needs_review": "",
"non_scorer": false,
"note": "PB",
"nr": null,
"nr_country": null,
"ns": "",
"pb": "10.38",
"performance": "10.32",
"perfsource": "lif",
"place": 1,
"points": "",
"qp": "10.41",
"raw_time": "10.312",
"raza_points": "",
"reaction_time": "",
"sb": "10.41",
"score_index": "",
"secondary_team": "NW",
"sp": "10.29",
"start_time": "",
"team": "NEB",
"team_category": "",
"team_name": "Newham & Essex Beagles AC",
"team_name_local": "Newham & Essex Beagles AC",
"wa_points": 1099,
"wr": null
}
Note that fields may vary depending on the type of unit (sprint, throw, horizontal or vertical jump), and we reserve the right to add fields. The key ones you can count on are place, bib and performance
Competitor list¶
A full list of competitors is available at
https://data.opentrack.run/en-gb/x/2025/GBR/wa-scjc/competitor/json/
Note that this has to 'join' to quite a lot of information to access club and team names, so please use sparingly.