{"openapi":"3.1.0","info":{"title":"World Cup 2026 Tour Public API","version":"2026.06.13.54","description":"Free cache-friendly JSON API for the 2026 FIFA World Cup static schedule, local kickoff conversion, match links, and share-card links."},"servers":[{"url":"https://ay-worldcup2026.zeabur.app/api/public/v1"}],"externalDocs":{"description":"Developer documentation","url":"https://ay-worldcup2026.zeabur.app/developers"},"paths":{"/metadata":{"get":{"summary":"API metadata","operationId":"getWorldCup2026ApiMetadata","responses":{"200":{"description":"API metadata and schema notes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Metadata"}}}}}}},"/matches":{"get":{"summary":"List all matches","operationId":"listWorldCup2026Matches","parameters":[{"$ref":"#/components/parameters/Timezone"}],"responses":{"200":{"description":"All 104 World Cup 2026 matches","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MatchListResponse"}}}}}}},"/matches/{id}":{"get":{"summary":"Get one match","operationId":"getWorldCup2026Match","parameters":[{"$ref":"#/components/parameters/MatchId"},{"$ref":"#/components/parameters/Timezone"}],"responses":{"200":{"description":"One World Cup 2026 match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MatchResponse"}}}},"404":{"description":"Match not found"}}}},"/matches/{id}/share":{"get":{"summary":"Get a match sharing pack","operationId":"getWorldCup2026MatchSharePack","parameters":[{"$ref":"#/components/parameters/MatchId"},{"$ref":"#/components/parameters/Timezone"}],"responses":{"200":{"description":"Localized sharing links and text for one match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SharePackResponse"}}}},"404":{"description":"Match not found"}}}},"/next":{"get":{"summary":"Get the nearest upcoming match","operationId":"getNextWorldCup2026Match","parameters":[{"$ref":"#/components/parameters/Timezone"}],"responses":{"200":{"description":"Nearest upcoming match relative to the server clock","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NextMatchResponse"}}}}}}}},"components":{"parameters":{"Timezone":{"name":"timezone","in":"query","required":false,"schema":{"type":"string","default":"UTC","example":"Europe/London"},"description":"IANA time zone used for requestedLocalTime."},"MatchId":{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1,"maximum":104},"description":"World Cup 2026 match id."}},"schemas":{"Metadata":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"canonicalUrl":{"type":"string","format":"uri"},"baseUrl":{"type":"string","format":"uri"},"openapiUrl":{"type":"string","format":"uri"},"isFree":{"type":"boolean"},"endpoints":{"type":"array","items":{"type":"object"}}}},"MatchListResponse":{"type":"object","properties":{"version":{"type":"string"},"count":{"type":"integer","example":104},"timeZone":{"type":"string","example":"Europe/London"},"matches":{"type":"array","items":{"type":"object","required":["id","stage","stageName","venue","kickoff","home","away","links"],"properties":{"id":{"type":"integer","example":1},"stage":{"type":"string","example":"group"},"stageName":{"type":"string","example":"Group stage"},"group":{"type":["string","null"],"example":"A"},"venue":{"type":"string","example":"Estadio Azteca"},"kickoff":{"$ref":"#/components/schemas/Kickoff"},"home":{"$ref":"#/components/schemas/Team"},"away":{"$ref":"#/components/schemas/Team"},"links":{"$ref":"#/components/schemas/Links"}}}}}},"MatchResponse":{"type":"object","properties":{"version":{"type":"string"},"timeZone":{"type":"string"},"match":{"type":"object","required":["id","stage","stageName","venue","kickoff","home","away","links"],"properties":{"id":{"type":"integer","example":1},"stage":{"type":"string","example":"group"},"stageName":{"type":"string","example":"Group stage"},"group":{"type":["string","null"],"example":"A"},"venue":{"type":"string","example":"Estadio Azteca"},"kickoff":{"$ref":"#/components/schemas/Kickoff"},"home":{"$ref":"#/components/schemas/Team"},"away":{"$ref":"#/components/schemas/Team"},"links":{"$ref":"#/components/schemas/Links"}}}}},"NextMatchResponse":{"type":"object","properties":{"version":{"type":"string"},"timeZone":{"type":"string"},"match":{"type":"object","required":["id","stage","stageName","venue","kickoff","home","away","links"],"properties":{"id":{"type":"integer","example":1},"stage":{"type":"string","example":"group"},"stageName":{"type":"string","example":"Group stage"},"group":{"type":["string","null"],"example":"A"},"venue":{"type":"string","example":"Estadio Azteca"},"kickoff":{"$ref":"#/components/schemas/Kickoff"},"home":{"$ref":"#/components/schemas/Team"},"away":{"$ref":"#/components/schemas/Team"},"links":{"$ref":"#/components/schemas/Links"}}}}},"SharePackResponse":{"type":"object","properties":{"version":{"type":"string"},"share":{"$ref":"#/components/schemas/SharePack"}}},"Kickoff":{"type":"object","properties":{"sourceTimeZone":{"type":"string","example":"Asia/Taipei"},"taipeiDate":{"type":"string","example":"2026-06-12"},"taipeiTime":{"type":"string","example":"03:00"},"utc":{"type":"string","format":"date-time"},"requestedTimeZone":{"type":"string","example":"Europe/London"},"requestedLocalTime":{"type":"string"}}},"Team":{"type":"object","properties":{"code":{"type":"string","example":"MEX"},"name":{"type":"string","example":"Mexico"},"flag":{"type":"string","example":"🇲🇽"}}},"Links":{"type":"object","properties":{"app":{"type":"string","format":"uri"},"shareCardSvg":{"type":"string","format":"uri"},"storyCardSvg":{"type":"string","format":"uri"},"calendarIcs":{"type":"string","format":"uri"},"sharePack":{"type":"string","format":"uri"}}},"SharePack":{"type":"object","properties":{"matchId":{"type":"integer"},"title":{"type":"string"},"stage":{"type":"string"},"venue":{"type":"string"},"timeZone":{"type":"string"},"localTime":{"type":"string"},"message":{"type":"string"},"links":{"type":"object","properties":{"match":{"type":"string","format":"uri"},"shareCardSvg":{"type":"string","format":"uri"},"storyCardSvg":{"type":"string","format":"uri"},"calendarIcs":{"type":"string","format":"uri"},"whatsapp":{"type":"string","format":"uri"},"telegram":{"type":"string","format":"uri"},"x":{"type":"string","format":"uri"},"email":{"type":"string","format":"uri"}}}}}}}}