{"openapi":"3.0.3","info":{"title":"WaitTimes API","description":"Proxy API for theme park wait times. Transforms data from ThemeParks.wiki v1 into a stable, app-friendly format.","version":"1.0.0","contact":{"name":"WaitTimes"}},"servers":[{"url":"/","description":"Current server"}],"paths":{"/api/parks":{"get":{"tags":["Parks"],"summary":"Get all parks","description":"Returns a flat list of all theme parks with location, open/closed status, and destination info.","responses":{"200":{"description":"List of parks","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParksListResponse"}}}},"401":{"description":"Unauthorized — missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/parks/{id}":{"get":{"tags":["Parks"],"summary":"Get park details","description":"Returns details for a single park including location, timezone, and current open/closed status.","parameters":[{"name":"id","in":"path","required":true,"description":"Park UUID","schema":{"type":"string","format":"uuid","example":"75ea578a-adc8-4116-a54d-dccb60765ef9"}}],"responses":{"200":{"description":"Park details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParkResponse"}}}},"401":{"description":"Unauthorized — missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/parks/{id}/live":{"get":{"tags":["Live Data"],"summary":"Get live attraction data","description":"Returns live wait times, queue info, and status for all attractions in a park. Data is passed through from ThemeParks.wiki with 30-second caching.","parameters":[{"name":"id","in":"path","required":true,"description":"Park UUID","schema":{"type":"string","format":"uuid","example":"75ea578a-adc8-4116-a54d-dccb60765ef9"}}],"responses":{"200":{"description":"Live data for all attractions in the park","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LiveDataResponse"}}}},"401":{"description":"Unauthorized — missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/parks/{id}/schedule":{"get":{"tags":["Schedule"],"summary":"Get park schedule","description":"Returns operating hours and schedule entries for a park. Data is passed through from ThemeParks.wiki with 15-minute caching.","parameters":[{"name":"id","in":"path","required":true,"description":"Park UUID","schema":{"type":"string","format":"uuid","example":"75ea578a-adc8-4116-a54d-dccb60765ef9"}}],"responses":{"200":{"description":"Park schedule","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleResponse"}}}},"401":{"description":"Unauthorized — missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}},"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-Api-Key","description":"API key required for all /api/parks endpoints"}},"schemas":{"ParksListResponse":{"type":"object","required":["parks"],"properties":{"parks":{"type":"array","items":{"$ref":"#/components/schemas/ParkResponse"}}}},"ParkResponse":{"type":"object","required":["id","name","slug","latitude","longitude","timezone","imageUrl","locationLabel","isOpen","destinationId"],"properties":{"id":{"type":"string","format":"uuid","description":"Unique park identifier","example":"75ea578a-adc8-4116-a54d-dccb60765ef9"},"name":{"type":"string","description":"Park display name","example":"Magic Kingdom Park"},"slug":{"type":"string","description":"URL-friendly park name","example":"magickingdompark"},"latitude":{"type":"number","nullable":true,"description":"Park latitude coordinate","example":28.4177},"longitude":{"type":"number","nullable":true,"description":"Park longitude coordinate","example":-81.5812},"timezone":{"type":"string","nullable":true,"description":"IANA timezone identifier","example":"America/New_York"},"imageUrl":{"type":"string","nullable":true,"description":"Park image URL (null until manually curated)","example":null},"locationLabel":{"type":"string","description":"Parent destination / resort name","example":"Walt Disney World Resort"},"isOpen":{"type":"boolean","description":"Whether the park is currently within operating hours","example":true},"destinationId":{"type":"string","format":"uuid","description":"Parent destination UUID","example":"e957da41-3552-4cf6-b636-5babc5cbc4e5"}}},"LiveDataResponse":{"type":"object","required":["id","name","entityType","liveData"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"entityType":{"type":"string","example":"PARK"},"liveData":{"type":"array","description":"Array of live attraction/show/restaurant entries","items":{"$ref":"#/components/schemas/LiveEntity"}}}},"LiveEntity":{"type":"object","required":["id","name","entityType"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string","example":"Space Mountain"},"entityType":{"type":"string","enum":["ATTRACTION","SHOW","RESTAURANT"]},"parkId":{"type":"string","format":"uuid","nullable":true},"status":{"type":"string","enum":["OPERATING","CLOSED","DOWN","REFURBISHMENT"],"nullable":true},"lastUpdated":{"type":"string","format":"date-time","nullable":true},"queue":{"type":"object","nullable":true,"description":"Queue data keyed by type (STANDBY, SINGLE_RIDER, RETURN_TIME, PAID_RETURN_TIME)","additionalProperties":true},"forecast":{"type":"array","nullable":true,"items":{"type":"object","properties":{"time":{"type":"string"},"waitTime":{"type":"integer"},"percentage":{"type":"integer"}}}},"showtimes":{"type":"array","nullable":true,"items":{"type":"object","properties":{"type":{"type":"string"},"startTime":{"type":"string"},"endTime":{"type":"string"}}}}}},"ScheduleResponse":{"type":"object","required":["id","name","entityType","schedule"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"entityType":{"type":"string"},"timezone":{"type":"string","nullable":true},"schedule":{"type":"array","items":{"$ref":"#/components/schemas/ScheduleEntry"}}}},"ScheduleEntry":{"type":"object","required":["date","type","openingTime","closingTime"],"properties":{"date":{"type":"string","format":"date","example":"2026-02-11"},"type":{"type":"string","enum":["OPERATING","TICKETED_EVENT"],"example":"OPERATING"},"openingTime":{"type":"string","format":"date-time","example":"2026-02-11T08:30:00-05:00"},"closingTime":{"type":"string","format":"date-time","example":"2026-02-11T23:00:00-05:00"},"description":{"type":"string","nullable":true,"example":"Early Entry"}}},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Error message","example":"Internal server error"}}}}},"tags":[{"name":"Parks","description":"Park information and status"},{"name":"Live Data","description":"Real-time attraction wait times and queue data"},{"name":"Schedule","description":"Park operating hours and schedule"}]}