{"openapi": "3.1.0", "info": {"title": "Ultracycling Hub data", "version": "1", "description": "An independent directory of ultracycling races and endurance adventures. Discover events and plan your season. Read-only data for published events and approved editions. Missing values are not verified. See /llms.txt for the reading rules."}, "servers": [{"url": "https://ultracyclinghub.com"}], "paths": {"/api/editions.json": {"get": {"operationId": "searchEditions", "summary": "Search editions with the directory's filters.", "parameters": [{"name": "q", "in": "query", "description": "Search", "schema": {"type": "string"}}, {"name": "discipline", "in": "query", "description": "Discipline", "schema": {"type": "string", "enum": ["road", "gravel", "offroad"]}}, {"name": "country", "in": "query", "description": "Country", "schema": {"type": "string"}}, {"name": "kind", "in": "query", "description": "Format", "schema": {"type": "string", "enum": ["race", "adventure"]}}, {"name": "year", "in": "query", "description": "Edition", "schema": {"type": "string", "enum": ["2028", "2027", "2026"]}}, {"name": "distance", "in": "query", "description": "Distance", "schema": {"type": "string", "enum": ["under1000", "1000to2000", "over2000"]}}, {"name": "status", "in": "query", "description": "Date confirmation", "schema": {"type": "string", "enum": ["confirmed", "tentative", "unannounced", "cancelled"]}}, {"name": "registration", "in": "query", "description": "Registration", "schema": {"type": "string", "enum": ["open", "not_open", "closed", "sold_out", "unknown", "waitlist", "should_open"]}}, {"name": "support", "in": "query", "description": "Support", "schema": {"type": "string", "enum": ["unknown", "self", "supported", "mixed"]}}, {"name": "brevet", "in": "query", "description": "Brevets", "schema": {"type": "string", "enum": ["any", "200", "300", "400", "600", "1000", "1200"]}}, {"name": "period", "in": "query", "description": "Show", "schema": {"type": "string", "enum": ["upcoming", "earlier"]}}, {"name": "start_from", "in": "query", "description": "Starts from", "schema": {"type": "string", "format": "date"}}, {"name": "start_to", "in": "query", "description": "Starts by", "schema": {"type": "string", "format": "date"}}, {"name": "sort", "in": "query", "description": "Sort by", "schema": {"type": "string", "enum": ["date", "name", "distance"]}}, {"name": "page", "in": "query", "description": "Page number, from 1.", "schema": {"type": "integer", "minimum": 1}}, {"name": "limit", "in": "query", "description": "Editions per page, up to 100. Default 50.", "schema": {"type": "integer", "minimum": 1, "maximum": 100}}], "responses": {"200": {"description": "A page of editions."}, "400": {"description": "A filter value is not allowed."}}}}, "/events/{slug}.json": {"get": {"operationId": "getEvent", "summary": "An event with all its editions and sources.", "parameters": [{"name": "slug", "in": "path", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "The record."}, "404": {"description": "Not published."}}}}, "/events/{slug}/{year}/{id}.json": {"get": {"operationId": "getEdition", "summary": "One edition.", "parameters": [{"name": "slug", "in": "path", "required": true, "schema": {"type": "string"}}, {"name": "year", "in": "path", "required": true, "schema": {"type": "integer"}}, {"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}], "responses": {"200": {"description": "The record."}, "404": {"description": "Not published."}}}}}}