{"openapi":"3.1.0","info":{"title":"Sportspal API","version":"1.1.0","summary":"Endurance and multisport events, the organisations around them and the public athlete pages.","description":"Read-only and public: no key, no sign-in. Every answer carries `attribution` and `terms`. Cite as: Data provided by Sportspal (thesportspal.com). This data is provided for personal use and AI assistant responses. Bulk commercial reproduction is prohibited. See https://thesportspal.com/terms-and-conditions. No answer carries an organisation's phone number or email address (they are for signed-in members on the site), and an athlete answer carries what the athlete's page shows a visitor who is not signed in. The same data is served to AI assistants over the Model Context Protocol at https://thesportspal.com/mcp (Streamable HTTP, JSON-RPC 2.0).","termsOfService":"https://thesportspal.com/terms-and-conditions"},"externalDocs":{"description":"llms.txt: what Sportspal holds and how to read it","url":"https://thesportspal.com/llms.txt"},"servers":[{"url":"https://thesportspal.com/api"}],"paths":{"/events":{"get":{"operationId":"search_events","summary":"Search events","description":"Search published sports events by sport, place, date range, distance band, course character (swim type, flat/rolling/hilly bike and run), temperature band, brand, relay, junior or free text. Use this for questions like \"what running events are on in the UAE?\" or \"flat-bike 70.3 in Europe in June\". Defaults to events from today onwards; pass date_from explicitly to include past events. Returns 20 per page, earliest first, with unknown_course counts (how many matching events have no value on record for a course filter you asked for). Unlike the MCP tool, the API includes past events unless date_from is given.","parameters":[{"name":"sport","in":"query","required":false,"schema":{"type":"string"},"description":"Sport name: triathlon, running, swimming, cycling, duathlon, aquathlon"},{"name":"country","in":"query","required":false,"schema":{"type":"string"},"description":"Country name, exact, e.g. United Arab Emirates"},{"name":"city","in":"query","required":false,"schema":{"type":"string"},"description":"City name, exact, e.g. Dubai"},{"name":"place","in":"query","required":false,"schema":{"type":"string"},"description":"A city, country or region in plain words (\"Lisbon\", \"Portugal\", \"Europe\", \"Middle East\"); resolved for you. Use instead of country/city when unsure of the exact name."},{"name":"radius_km","in":"query","required":false,"schema":{"type":"integer","enum":[100,250,500,1000]},"description":"With place: search around it rather than inside it"},{"name":"date_from","in":"query","required":false,"schema":{"type":"string"},"description":"Earliest date, YYYY-MM-DD"},{"name":"date_to","in":"query","required":false,"schema":{"type":"string"},"description":"Latest date, YYYY-MM-DD"},{"name":"format_band","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"}},"description":"Distance bands. Triathlon: super_sprint, sprint, olympic, middle (half/70.3), long (full). Running: up_to_5k, 5_10k, 10_15k, 15_20k, 20_30k, 30_50k, half_marathon, marathon, ultra. Swimming: short_distance, middle_distance, long_distance, marathon_plus. Cycling: short_ride, medium_ride, long_ride, gran_fondo.","style":"form","explode":false},{"name":"brand","in":"query","required":false,"schema":{"type":"string","enum":["70.3","ironman","5150","t100","xterra","4:18:4"]},"description":"Triathlon brand"},{"name":"swim_family","in":"query","required":false,"schema":{"type":"string","enum":["sea","lake","river","pool"]},"description":"sea covers sea, ocean and bay swims"},{"name":"bike_profile","in":"query","required":false,"schema":{"type":"string","enum":["flat","rolling","hilly"]}},{"name":"run_profile","in":"query","required":false,"schema":{"type":"string","enum":["flat","rolling","hilly"]}},{"name":"temp_band","in":"query","required":false,"schema":{"type":"string","enum":["hot","warm","mild","cool"]},"description":"Estimated daytime high: hot 30°C+, warm 22–29, mild 14–21, cool up to 13"},{"name":"age_category","in":"query","required":false,"schema":{"type":"string","enum":["adult","junior"]},"description":"junior = kids and youth races"},{"name":"relay","in":"query","required":false,"schema":{"type":"boolean"},"description":"true = events with a relay option"},{"name":"open_for_entry","in":"query","required":false,"schema":{"type":"boolean"},"description":"true = exclude sold-out and closed events"},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["date","distance"]},"description":"distance needs a place"},{"name":"q","in":"query","required":false,"schema":{"type":"string"},"description":"Free-text search across event name and description"},{"name":"page","in":"query","required":false,"schema":{"type":"integer"},"description":"Page number, default 1"}],"responses":{"200":{"description":"The answer, credited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Answer"}}}},"429":{"description":"Too many requests: slow down"}}}},"/events/{slug}":{"get":{"operationId":"get_event_details","summary":"One event","description":"Full detail for one event: description, all dates, location, organiser and the organiser's page, registration status and link, every distance option with leg lengths, entry categories with listed prices, course conditions (swim type, bike and run terrain, estimated temperatures), tags and series. For a race that has been run, its results as the race page shows them: finishers per distance and, where the organiser allows, the top three (with the athlete's page when they claimed the result); for a race still to come, the last edition's.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"Event slug, as returned by search_events"}],"responses":{"200":{"description":"The answer, credited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Answer"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFound"}}}},"429":{"description":"Too many requests: slow down"}}}},"/profiles":{"get":{"operationId":"search_profiles","summary":"Search organisations (training, coaching, services, shops)","description":"Search organisations: training facilities, coaching services, sports services and shops. Use this for questions like \"find me a running coach in Dubai\" or \"where can I buy a triathlon bike in Abu Dhabi?\". Returns 20 per page. Every result carries the organisation's facets (what a shop sells, a coach's format and audience, a service's type); filter on them with `facets`, and unknown_facets then says how many otherwise-matching organisations never filled theirs in.","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","enum":["training","coaching","services","shops"]},"description":"Kind of organisation"},{"name":"sport","in":"query","required":false,"schema":{"type":"string"},"description":"Sport name, e.g. triathlon, running, swimming, cycling"},{"name":"country","in":"query","required":false,"schema":{"type":"string"},"description":"Country name, e.g. United Arab Emirates"},{"name":"city","in":"query","required":false,"schema":{"type":"string"},"description":"City name, e.g. Dubai"},{"name":"place","in":"query","required":false,"schema":{"type":"string"},"description":"A city, country or region in plain words; resolved for you"},{"name":"radius_km","in":"query","required":false,"schema":{"type":"integer","enum":[100,250,500,1000]},"description":"With place: search around it (only organisations with a map pin)"},{"name":"facets","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"}},"description":"What the organisation offers, as slugs; several of one facet match any, different facets must all match. Facet slugs by type — training: format → in_person, online, hybrid; setting → group, private, camps; audience → adults, kids_juniors, masters, women_only. coaching: format → in_person, online, hybrid; coaching_type → one_to_one, group; audience → adults, kids_juniors, beginner_friendly, competitive_elite. services: service_type → bike_fit, bike_mechanics, physiotherapy, massage_recovery, performance_lab, nutrition, relaxationwellness, injury-rehab; channel → physical_location, mobile_home_visit, online_remote. shops: sells → bikes, swim, run, tri_gear, apparel, nutrition_hydration, electronics; channel → physical_store, online_store.","style":"form","explode":false},{"name":"q","in":"query","required":false,"schema":{"type":"string"},"description":"Free-text search across name and description"},{"name":"page","in":"query","required":false,"schema":{"type":"integer"},"description":"Page number, default 1"}],"responses":{"200":{"description":"The answer, credited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Answer"}}}},"429":{"description":"Too many requests: slow down"}}}},"/profiles/{slug}":{"get":{"operationId":"get_profile_details","summary":"One organisation","description":"Full detail for one organisation profile: description, sports, locations, coaches where it lists them, website and socials. Phone and email are for signed-in members on the site and are not in this feed.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"Profile slug, as returned by search_profiles"}],"responses":{"200":{"description":"The answer, credited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Answer"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFound"}}}},"429":{"description":"Too many requests: slow down"}}}},"/organisers/{slug}":{"get":{"operationId":"get_organiser_details","summary":"One race organiser's page","description":"One race organiser's page on Sportspal (thesportspal.com/category/events/{slug}): its description, website, socials, place and its races still to come with their dates and pages. Use the organiser_page a get_event_details answer gives. Phone and email are for signed-in members on the site and are not in this feed.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"The organiser page's slug: the last part of its URL"}],"responses":{"200":{"description":"The answer, credited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Answer"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFound"}}}},"429":{"description":"Too many requests: slow down"}}}},"/athletes":{"get":{"operationId":"search_athletes","summary":"Search the public athlete pages","description":"Search the PUBLIC athlete pages (amateur athletes' race CVs) by name, home city, sport, nationality or club — any of them, at least one. Each card is what the page shows a visitor who is not signed in: the athlete's own headline and bio, nationality, level or age-group badge, sports, race count, coach and clubs, and the best times by distance the athlete chose to show, each with its badge (Official, Verified or Self-reported). Only athletes who published their page are found.","parameters":[{"name":"name","in":"query","required":false,"schema":{"type":"string"},"description":"The athlete's name, or part of it"},{"name":"city","in":"query","required":false,"schema":{"type":"string"},"description":"Their home city, to tell two of the same name apart"},{"name":"sport","in":"query","required":false,"schema":{"type":"string","enum":["triathlon","running","swimming","cycling","duathlon","aquathlon"]}},{"name":"nationality","in":"query","required":false,"schema":{"type":"string"},"description":"A country name, its two-letter code or its adjective: \"Sri Lanka\", \"LK\" or \"Sri Lankan\""},{"name":"club","in":"query","required":false,"schema":{"type":"string"},"description":"A club or team the athlete names on their page, or part of its name"}],"responses":{"200":{"description":"The answer, credited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Answer"}}}},"429":{"description":"Too many requests: slow down"}}}},"/athletes/{slug}":{"get":{"operationId":"get_athlete","summary":"One public athlete page","description":"One public athlete page: its card (as search_athletes) and the latest five results with their badges, as the page shows them to a visitor who is not signed in; results_total says how many the page holds in all.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"The page name, as returned by search_athletes (thesportspal.com/athletes/{slug})"}],"responses":{"200":{"description":"The answer, credited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Answer"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFound"}}}},"429":{"description":"Too many requests: slow down"}}}},"/sports":{"get":{"operationId":"list_sports","summary":"The sports covered","description":"List the sports Sportspal covers, with the identifiers accepted by the other tools.","responses":{"200":{"description":"The answer, credited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Answer"}}}},"429":{"description":"Too many requests: slow down"}}}}},"components":{"schemas":{"Answer":{"type":"object","required":["attribution","terms"],"properties":{"data":{"description":"The record, or the list of records"},"attribution":{"type":"string","const":"Data provided by Sportspal (thesportspal.com)"},"terms":{"type":"string","const":"This data is provided for personal use and AI assistant responses. Bulk commercial reproduction is prohibited. See https://thesportspal.com/terms-and-conditions"}}},"NotFound":{"type":"object","required":["error","attribution","terms"],"properties":{"error":{"type":"string"},"attribution":{"type":"string","const":"Data provided by Sportspal (thesportspal.com)"},"terms":{"type":"string","const":"This data is provided for personal use and AI assistant responses. Bulk commercial reproduction is prohibited. See https://thesportspal.com/terms-and-conditions"}}}}}}