{"openapi":"3.1.0","info":{"title":"Attraction Tracker API","version":"1.0.0","summary":"A history-first database of UK theme parks, attractions and seasonal events.","description":"Read-only. Everything is a GET.\n\nTHE PRESENT AND THE PAST\n\n/v1/parks is theme parks and amusement parks. The database holds twelve other kinds\nof venue — piers, escape rooms, fair sites, immersive venues — and they are not\npublished yet, because calling them parks would be wrong.\n\nThe current state of a resource lives under /v1/parks/… and the same resource as it\nstood in a given year lives under /v1/{year}/parks/… . The year prefix is the only\ndifference — the response has the same shape either way, so nothing new has to be\nlearned to read history. /v1/parks/ven00001/attractions is what that park has now;\n/v1/1994/parks/ven00001/attractions is what it had in 1994.\n\nPresent-tense listings mean the present: /v1/parks/{id}/attractions is what is at\nthe park now, and what has closed or been removed is history, reachable through a\nyear or through /history. `status=all` widens it.\n\nA record belongs to a year if any part of its life touched it. Under a year, names\nare the names held then: rides get rethemed and parks get rebranded, and asking for\n1979 should not return 2026's marketing. Where a name has since changed,\ncurrent_name and renamed_since are included so the record can still be followed\nforward.\n\nA year listing only includes records whose existence that year can be shown. Where\nan opening date was never recorded the record is left out and counted in `undated`,\nrather than assumed into a year it may not belong to. Ask for such a record\ndirectly and you get it, flagged dates_unknown.\n\nHISTORY\n\n/history on any park, area or attraction returns everything the database knows\nhappened to it as one stream sorted by date — renames, moves between areas, spec\nrevisions, operators, investments, records held, yearly figures, incidents and\ntimeline events — each entry tagged with its kind.\n\nIDENTIFIERS\n\npublic_id (ven00001, attr00001) is generated by the database and never changes.\nNames and slugs do change — a rethemed ride keeps its public_id and gets a new\nname — so cite the public_id.\n\nDATES\n\nDates are ISO-8601 text. The from and to filters accept YYYY-MM-DD, YYYYMMDD and\nddmmyy; prefer the first, because a two-digit year cannot express 1896 and this\ndatabase contains piers that opened in the 1800s.","license":{"name":"See the project","url":"https://attractiontracker.com"}},"servers":[{"url":"https://wiki.attractiontracker.com","description":"This server"}],"tags":[{"name":"Parks","description":"Venues — theme parks, but also piers, escape rooms, fair sites and immersive venues."},{"name":"Queue times","description":"Live waits and their history, from the daily rollup or the raw readings."},{"name":"Venues","description":"Everything that is not a park — piers, escape rooms, fair sites and the rest."},{"name":"Attractions","description":"Everything guest-facing: rides, mazes, shows, shops, restaurants and hotels."},{"name":"Calendar","description":"Published opening hours, last entry, and the days a park names an event."},{"name":"Areas","description":"The lands a park is divided into, and what stands in them."},{"name":"Media","description":"Images, video, audio and documents, addressed by an immutable uid."},{"name":"Meta","description":"The API describing itself."}],"security":[{},{"bearerAuth":[]},{"apiKeyHeader":[]},{"apiKeyQuery":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"`Authorization: Bearer atk_…`. Optional — anonymous callers get a smaller per-IP allowance."},"apiKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key"},"apiKeyQuery":{"type":"apiKey","in":"query","name":"api_key"}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable code, e.g. `not_found`, `bad_date`."},"message":{"type":"string","description":"What went wrong, in a sentence."}},"required":["error"],"additionalProperties":true}}},"paths":{"/v1/parks":{"get":{"operationId":"parks","tags":["Parks"],"summary":"Every park","description":"Theme parks and amusement parks. The database holds twelve other kinds of venue — piers, escape rooms, fair sites, immersive venues — and they are deliberately not here, because calling them parks would be wrong. They get their own resources when those are designed; asking for one by id returns `not_a_park` rather than a bare 404.","parameters":[{"name":"kind","in":"query","required":false,"description":"theme_park or amusement_park.","schema":{"type":"string","enum":["theme_park","amusement_park"]}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"},"parks":{"type":"array","items":{"type":"object","additionalProperties":true}},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/{year}/parks":{"get":{"operationId":"historic_parks","tags":["Parks"],"summary":"Every park, as it stood in a given year","description":"Theme parks and amusement parks. The database holds twelve other kinds of venue — piers, escape rooms, fair sites, immersive venues — and they are deliberately not here, because calling them parks would be wrong. They get their own resources when those are designed; asking for one by id returns `not_a_park` rather than a bare 404.","parameters":[{"name":"year","in":"path","required":true,"description":"The year to view the resource as it stood. A record is included if any part of its life touched that year, so a ride that closed in the March is part of that season.","schema":{"type":"string","pattern":"^\\d{4}$","minimum":1700,"maximum":2100},"example":"2005"},{"name":"kind","in":"query","required":false,"description":"theme_park or amusement_park.","schema":{"type":"string","enum":["theme_park","amusement_park"]}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"},"parks":{"type":"array","items":{"type":"object","additionalProperties":true}},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/parks/{park}":{"get":{"operationId":"parks_park","tags":["Parks"],"summary":"One park","description":"Park record, its name history, the operators in place, its areas and its timeline. Under a year, the name and operators are the ones in force that year and the timeline is narrowed to that year.","parameters":[{"name":"park","in":"path","required":true,"description":"Park public id, e.g. `ven00001`. Stable — it never changes, even when the park is renamed.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"park":{"type":"object","additionalProperties":true},"names":{"type":"array","items":{"type":"object","additionalProperties":true}},"operators":{"type":"array","items":{"type":"object","additionalProperties":true}},"areas":{"type":"array","items":{"type":"object","additionalProperties":true}},"attraction_count":{"type":"integer"},"timeline":{"type":"array","items":{"type":"object","additionalProperties":true}},"links":{"type":"object","additionalProperties":true},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/{year}/parks/{park}":{"get":{"operationId":"historic_parks_park","tags":["Parks"],"summary":"One park, as it stood in a given year","description":"Park record, its name history, the operators in place, its areas and its timeline. Under a year, the name and operators are the ones in force that year and the timeline is narrowed to that year.","parameters":[{"name":"year","in":"path","required":true,"description":"The year to view the resource as it stood. A record is included if any part of its life touched that year, so a ride that closed in the March is part of that season.","schema":{"type":"string","pattern":"^\\d{4}$","minimum":1700,"maximum":2100},"example":"2005"},{"name":"park","in":"path","required":true,"description":"Park public id, e.g. `ven00001`. Stable — it never changes, even when the park is renamed.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"park":{"type":"object","additionalProperties":true},"names":{"type":"array","items":{"type":"object","additionalProperties":true}},"operators":{"type":"array","items":{"type":"object","additionalProperties":true}},"areas":{"type":"array","items":{"type":"object","additionalProperties":true}},"attraction_count":{"type":"integer"},"timeline":{"type":"array","items":{"type":"object","additionalProperties":true}},"links":{"type":"object","additionalProperties":true},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/parks/{park}/attractions":{"get":{"operationId":"parks_park_attractions","tags":["Parks"],"summary":"What a park contains","description":"What is at the park now: rides, mazes, shows, shops, restaurants and hotels alike. Present tense means present tense — attractions that have closed, been removed, demolished or relocated are history and live at `/{year}/parks/{park}/attractions` and `/attractions/{id}/history`. This is the same set `attraction_count` counts, so the two always agree. Use `status` to widen it: `status=all` for everything ever recorded here, `status=announced` for what is coming. Under a year the status filter does not apply — a ride closed today was open in 1994 — and each entry appears under the name it held then.","parameters":[{"name":"park","in":"path","required":true,"description":"Park public id, e.g. `ven00001`. Stable — it never changes, even when the park is renamed.","schema":{"type":"string"}},{"name":"kind","in":"query","required":false,"description":"Restrict to one attraction kind.","schema":{"type":"string","enum":["animal_exhibit","app","arcade","bar","cafe","dark_ride","drop_tower","escape_room","experience_trail","flat_ride","food_kiosk","guest_service","hotel","kiosk","lodge","midway_game","museum_exhibit","other","photo_point","play_area","powered_coaster","quick_service","restaurant","roaming_entertainment","roller_coaster","scare_maze","scare_zone","shop","show","transport_ride","vr_experience","walkthrough","water_ride"]}},{"name":"category","in":"query","required":false,"description":"Restrict to one kind category.","schema":{"type":"string","enum":["accommodation","dining","exhibit","experience","game","other","retail","ride","service","show"]}},{"name":"status","in":"query","required":false,"description":"Present-tense listings show operating and seasonal attractions only. `all` returns every attraction ever recorded at the park; any single status value returns just that one. Ignored under a year.","schema":{"type":"string"},"example":"all"}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"park":{"type":"object","additionalProperties":true},"showing":{"type":"object","additionalProperties":true},"count":{"type":"integer"},"attractions":{"type":"array","items":{"type":"object","additionalProperties":true}},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/{year}/parks/{park}/attractions":{"get":{"operationId":"historic_parks_park_attractions","tags":["Parks"],"summary":"What a park contains, as it stood in a given year","description":"What is at the park now: rides, mazes, shows, shops, restaurants and hotels alike. Present tense means present tense — attractions that have closed, been removed, demolished or relocated are history and live at `/{year}/parks/{park}/attractions` and `/attractions/{id}/history`. This is the same set `attraction_count` counts, so the two always agree. Use `status` to widen it: `status=all` for everything ever recorded here, `status=announced` for what is coming. Under a year the status filter does not apply — a ride closed today was open in 1994 — and each entry appears under the name it held then.","parameters":[{"name":"year","in":"path","required":true,"description":"The year to view the resource as it stood. A record is included if any part of its life touched that year, so a ride that closed in the March is part of that season.","schema":{"type":"string","pattern":"^\\d{4}$","minimum":1700,"maximum":2100},"example":"2005"},{"name":"park","in":"path","required":true,"description":"Park public id, e.g. `ven00001`. Stable — it never changes, even when the park is renamed.","schema":{"type":"string"}},{"name":"kind","in":"query","required":false,"description":"Restrict to one attraction kind.","schema":{"type":"string","enum":["animal_exhibit","app","arcade","bar","cafe","dark_ride","drop_tower","escape_room","experience_trail","flat_ride","food_kiosk","guest_service","hotel","kiosk","lodge","midway_game","museum_exhibit","other","photo_point","play_area","powered_coaster","quick_service","restaurant","roaming_entertainment","roller_coaster","scare_maze","scare_zone","shop","show","transport_ride","vr_experience","walkthrough","water_ride"]}},{"name":"category","in":"query","required":false,"description":"Restrict to one kind category.","schema":{"type":"string","enum":["accommodation","dining","exhibit","experience","game","other","retail","ride","service","show"]}},{"name":"status","in":"query","required":false,"description":"Present-tense listings show operating and seasonal attractions only. `all` returns every attraction ever recorded at the park; any single status value returns just that one. Ignored under a year.","schema":{"type":"string"},"example":"all"}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"park":{"type":"object","additionalProperties":true},"showing":{"type":"object","additionalProperties":true},"count":{"type":"integer"},"attractions":{"type":"array","items":{"type":"object","additionalProperties":true}},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/parks/{park}/queue-times":{"get":{"operationId":"parks_park_queue-times","tags":["Queue times"],"summary":"Queue times, current or historical","description":"Without a year, the latest reading for every attraction at the park. Under a year, the history: the daily rollup by default, or the raw readings with `detail=observations`. `from` and `to` only exist on the year form, because filtering a range is a question about history. Every reading carries `status_message`, the park's own words about that queue — usually null, but where a closure gets explained. Any on the current readings are collected into `notices` at the top of the response.","parameters":[{"name":"park","in":"path","required":true,"description":"Park public id, e.g. `ven00001`. Stable — it never changes, even when the park is renamed.","schema":{"type":"string"}},{"name":"within_hours","in":"query","required":false,"description":"How recent a reading must be to count as current. Default 3. Readings older than this are still returned — a response that empties overnight reads as a broken API rather than a closed park — but marked `is_current: false` with `age_minutes`. Read `live` for whether any of it is happening now.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"park":{"type":"object","additionalProperties":true},"count":{"type":"integer"},"queue_times":{"type":"array","items":{"type":"object","additionalProperties":true}},"notices":{"type":"array","items":{"type":"object","additionalProperties":true}},"within_hours":{"type":"object","additionalProperties":true},"live":{"type":"object","additionalProperties":true},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/{year}/parks/{park}/queue-times":{"get":{"operationId":"historic_parks_park_queue-times","tags":["Queue times"],"summary":"Queue times, current or historical, as it stood in a given year","description":"Without a year, the latest reading for every attraction at the park. Under a year, the history: the daily rollup by default, or the raw readings with `detail=observations`. `from` and `to` only exist on the year form, because filtering a range is a question about history. Every reading carries `status_message`, the park's own words about that queue — usually null, but where a closure gets explained. Any on the current readings are collected into `notices` at the top of the response.","parameters":[{"name":"year","in":"path","required":true,"description":"The year to view the resource as it stood. A record is included if any part of its life touched that year, so a ride that closed in the March is part of that season.","schema":{"type":"string","pattern":"^\\d{4}$","minimum":1700,"maximum":2100},"example":"2005"},{"name":"park","in":"path","required":true,"description":"Park public id, e.g. `ven00001`. Stable — it never changes, even when the park is renamed.","schema":{"type":"string"}},{"name":"within_hours","in":"query","required":false,"description":"How recent a reading must be to count as current. Default 3. Readings older than this are still returned — a response that empties overnight reads as a broken API rather than a closed park — but marked `is_current: false` with `age_minutes`. Read `live` for whether any of it is happening now.","schema":{"type":"integer"}},{"name":"from","in":"query","required":false,"description":"Start of the range, inclusive. `YYYY-MM-DD` is preferred; `ddmmyy` and `YYYYMMDD` are accepted. Clamped to the year in the path. Defaults to 1 January.","schema":{"type":"string"},"example":"2026-08-01"},{"name":"to","in":"query","required":false,"description":"End of the range, inclusive. Same formats. Defaults to 31 December.","schema":{"type":"string"},"example":"2026-08-31"},{"name":"attraction","in":"query","required":false,"description":"Restrict to one attraction public id.","schema":{"type":"string"},"example":"attr00001"},{"name":"detail","in":"query","required":false,"description":"`daily` (the rollup, default) or `observations` (raw readings).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum rows to return.","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"Rows to skip, for paging.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"park":{"type":"object","additionalProperties":true},"count":{"type":"integer"},"queue_times":{"type":"array","items":{"type":"object","additionalProperties":true}},"notices":{"type":"array","items":{"type":"object","additionalProperties":true}},"within_hours":{"type":"object","additionalProperties":true},"live":{"type":"object","additionalProperties":true},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/queue-times/stream/{park}":{"get":{"operationId":"queue-times_stream_park","tags":["Queue times"],"summary":"Live queue-time updates, pushed as they land","description":"A WebSocket, not a JSON GET: connect with `wss://` and an `Upgrade: websocket` header rather than sending one. The server pushes one message per update — the same envelope `/parks/{park}/queue-times` returns — the instant a poll writes new readings, instead of the client having to ask again. Send the text frame `ping` for a keepalive `pong`; nothing else is expected from the client. Authenticates the same way as everything else (a key, or anonymous under the per-IP limits), since a browser's WebSocket handshake cannot carry an Authorization header — pass the key as `?api_key=`.","x-websocket":true,"parameters":[{"name":"park","in":"path","required":true,"description":"Park public id, e.g. `ven00001`. Stable — it never changes, even when the park is renamed.","schema":{"type":"string"}}],"responses":{"101":{"description":"Switching Protocols — the connection is now a WebSocket. Each message pushed afterwards has this shape.","content":{"application/json":{"schema":{"type":"object","properties":{"park":{"type":"object","additionalProperties":true},"count":{"type":"integer"},"queue_times":{"type":"array","items":{"type":"object","additionalProperties":true}},"notices":{"type":"array","items":{"type":"object","additionalProperties":true}},"within_hours":{"type":"object","additionalProperties":true},"live":{"type":"object","additionalProperties":true},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"The request did not carry an Upgrade: websocket header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/queue-times/stream":{"get":{"operationId":"queue-times_stream","tags":["Queue times"],"summary":"Live queue-time updates for every park, on one connection","description":"The same WebSocket as `/queue-times/stream/{park}`, without being scoped to one park — every park's updates arrive on this one connection instead, each message still carrying `park` so a caller who only wants one can filter client-side. Meant for a client that wants one persistent connection for a whole session rather than reconnecting every time what it's watching changes — the PWA's own park switcher works this way. A client that only ever cares about one park is better served by the scoped form above, which never sends it a message it has to discard.","x-websocket":true,"parameters":[],"responses":{"101":{"description":"Switching Protocols — the connection is now a WebSocket. Each message pushed afterwards has this shape.","content":{"application/json":{"schema":{"type":"object","properties":{"park":{"type":"object","additionalProperties":true},"count":{"type":"integer"},"queue_times":{"type":"array","items":{"type":"object","additionalProperties":true}},"notices":{"type":"array","items":{"type":"object","additionalProperties":true}},"within_hours":{"type":"object","additionalProperties":true},"live":{"type":"object","additionalProperties":true},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"426":{"description":"The request did not carry an Upgrade: websocket header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/venues":{"get":{"operationId":"venues","tags":["Venues"],"summary":"Every venue that is not a park","description":"Everything that is not a theme park or an amusement park: piers, water parks, safari parks, escape rooms, family entertainment centres, immersive venues, fair sites, showgrounds and seasonal event sites. This and `/parks` partition the collection rather than overlapping — a record in both is confusing in exactly the way two categories holding the same thing are. `include=all` returns the complete set. Narrow with `category` or `kind`.","parameters":[{"name":"kind","in":"query","required":false,"description":"One venue kind.","schema":{"type":"string","enum":["amusement_park","escape_room_venue","fair_site","fec","immersive_venue","indoor_attraction","other","pier","pleasure_beach","safari_park","seasonal_event_site","showground","theme_park","water_park"]}},{"name":"category","in":"query","required":false,"description":"A group of kinds.","schema":{"type":"string","enum":["indoor","other","park","seasonal","site"]}},{"name":"status","in":"query","required":false,"description":"Restrict to one operating status.","schema":{"type":"string"},"example":"operating"},{"name":"q","in":"query","required":false,"description":"Name search, including former names.","schema":{"type":"string"}},{"name":"include","in":"query","required":false,"description":"`all` to include theme and amusement parks, which are otherwise at /parks.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"},"venues":{"type":"array","items":{"type":"object","additionalProperties":true}},"scope":{"type":"object","additionalProperties":true},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/{year}/venues":{"get":{"operationId":"historic_venues","tags":["Venues"],"summary":"Every venue that is not a park, as it stood in a given year","description":"Everything that is not a theme park or an amusement park: piers, water parks, safari parks, escape rooms, family entertainment centres, immersive venues, fair sites, showgrounds and seasonal event sites. This and `/parks` partition the collection rather than overlapping — a record in both is confusing in exactly the way two categories holding the same thing are. `include=all` returns the complete set. Narrow with `category` or `kind`.","parameters":[{"name":"year","in":"path","required":true,"description":"The year to view the resource as it stood. A record is included if any part of its life touched that year, so a ride that closed in the March is part of that season.","schema":{"type":"string","pattern":"^\\d{4}$","minimum":1700,"maximum":2100},"example":"2005"},{"name":"kind","in":"query","required":false,"description":"One venue kind.","schema":{"type":"string","enum":["amusement_park","escape_room_venue","fair_site","fec","immersive_venue","indoor_attraction","other","pier","pleasure_beach","safari_park","seasonal_event_site","showground","theme_park","water_park"]}},{"name":"category","in":"query","required":false,"description":"A group of kinds.","schema":{"type":"string","enum":["indoor","other","park","seasonal","site"]}},{"name":"status","in":"query","required":false,"description":"Restrict to one operating status.","schema":{"type":"string"},"example":"operating"},{"name":"q","in":"query","required":false,"description":"Name search, including former names.","schema":{"type":"string"}},{"name":"include","in":"query","required":false,"description":"`all` to include theme and amusement parks, which are otherwise at /parks.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"},"venues":{"type":"array","items":{"type":"object","additionalProperties":true}},"scope":{"type":"object","additionalProperties":true},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/venues/{park}":{"get":{"operationId":"venues_park","tags":["Venues"],"summary":"One venue of any kind","description":"The same record as /parks/{park}, without requiring it to be a park.","parameters":[{"name":"park","in":"path","required":true,"description":"Park public id, e.g. `ven00001`. Stable — it never changes, even when the park is renamed.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"park":{"type":"object","additionalProperties":true},"names":{"type":"array","items":{"type":"object","additionalProperties":true}},"operators":{"type":"array","items":{"type":"object","additionalProperties":true}},"areas":{"type":"array","items":{"type":"object","additionalProperties":true}},"attraction_count":{"type":"integer"},"timeline":{"type":"array","items":{"type":"object","additionalProperties":true}},"links":{"type":"object","additionalProperties":true},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/{year}/venues/{park}":{"get":{"operationId":"historic_venues_park","tags":["Venues"],"summary":"One venue of any kind, as it stood in a given year","description":"The same record as /parks/{park}, without requiring it to be a park.","parameters":[{"name":"year","in":"path","required":true,"description":"The year to view the resource as it stood. A record is included if any part of its life touched that year, so a ride that closed in the March is part of that season.","schema":{"type":"string","pattern":"^\\d{4}$","minimum":1700,"maximum":2100},"example":"2005"},{"name":"park","in":"path","required":true,"description":"Park public id, e.g. `ven00001`. Stable — it never changes, even when the park is renamed.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"park":{"type":"object","additionalProperties":true},"names":{"type":"array","items":{"type":"object","additionalProperties":true}},"operators":{"type":"array","items":{"type":"object","additionalProperties":true}},"areas":{"type":"array","items":{"type":"object","additionalProperties":true}},"attraction_count":{"type":"integer"},"timeline":{"type":"array","items":{"type":"object","additionalProperties":true}},"links":{"type":"object","additionalProperties":true},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/venues/{park}/attractions":{"get":{"operationId":"venues_park_attractions","tags":["Venues"],"summary":"What a venue contains","parameters":[{"name":"park","in":"path","required":true,"description":"Park public id, e.g. `ven00001`. Stable — it never changes, even when the park is renamed.","schema":{"type":"string"}},{"name":"kind","in":"query","required":false,"description":"Restrict to one attraction kind.","schema":{"type":"string","enum":["animal_exhibit","app","arcade","bar","cafe","dark_ride","drop_tower","escape_room","experience_trail","flat_ride","food_kiosk","guest_service","hotel","kiosk","lodge","midway_game","museum_exhibit","other","photo_point","play_area","powered_coaster","quick_service","restaurant","roaming_entertainment","roller_coaster","scare_maze","scare_zone","shop","show","transport_ride","vr_experience","walkthrough","water_ride"]}},{"name":"category","in":"query","required":false,"description":"Restrict to one kind category.","schema":{"type":"string","enum":["accommodation","dining","exhibit","experience","game","other","retail","ride","service","show"]}},{"name":"status","in":"query","required":false,"description":"`all`, or a single status. Ignored under a year.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"park":{"type":"object","additionalProperties":true},"showing":{"type":"object","additionalProperties":true},"count":{"type":"integer"},"attractions":{"type":"array","items":{"type":"object","additionalProperties":true}},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/{year}/venues/{park}/attractions":{"get":{"operationId":"historic_venues_park_attractions","tags":["Venues"],"summary":"What a venue contains, as it stood in a given year","parameters":[{"name":"year","in":"path","required":true,"description":"The year to view the resource as it stood. A record is included if any part of its life touched that year, so a ride that closed in the March is part of that season.","schema":{"type":"string","pattern":"^\\d{4}$","minimum":1700,"maximum":2100},"example":"2005"},{"name":"park","in":"path","required":true,"description":"Park public id, e.g. `ven00001`. Stable — it never changes, even when the park is renamed.","schema":{"type":"string"}},{"name":"kind","in":"query","required":false,"description":"Restrict to one attraction kind.","schema":{"type":"string","enum":["animal_exhibit","app","arcade","bar","cafe","dark_ride","drop_tower","escape_room","experience_trail","flat_ride","food_kiosk","guest_service","hotel","kiosk","lodge","midway_game","museum_exhibit","other","photo_point","play_area","powered_coaster","quick_service","restaurant","roaming_entertainment","roller_coaster","scare_maze","scare_zone","shop","show","transport_ride","vr_experience","walkthrough","water_ride"]}},{"name":"category","in":"query","required":false,"description":"Restrict to one kind category.","schema":{"type":"string","enum":["accommodation","dining","exhibit","experience","game","other","retail","ride","service","show"]}},{"name":"status","in":"query","required":false,"description":"`all`, or a single status. Ignored under a year.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"park":{"type":"object","additionalProperties":true},"showing":{"type":"object","additionalProperties":true},"count":{"type":"integer"},"attractions":{"type":"array","items":{"type":"object","additionalProperties":true}},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/venues/{park}/areas":{"get":{"operationId":"venues_park_areas","tags":["Venues"],"summary":"A venue's areas","parameters":[{"name":"park","in":"path","required":true,"description":"Park public id, e.g. `ven00001`. Stable — it never changes, even when the park is renamed.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"park":{"type":"object","additionalProperties":true},"count":{"type":"integer"},"areas":{"type":"array","items":{"type":"object","additionalProperties":true}},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/{year}/venues/{park}/areas":{"get":{"operationId":"historic_venues_park_areas","tags":["Venues"],"summary":"A venue's areas, as it stood in a given year","parameters":[{"name":"year","in":"path","required":true,"description":"The year to view the resource as it stood. A record is included if any part of its life touched that year, so a ride that closed in the March is part of that season.","schema":{"type":"string","pattern":"^\\d{4}$","minimum":1700,"maximum":2100},"example":"2005"},{"name":"park","in":"path","required":true,"description":"Park public id, e.g. `ven00001`. Stable — it never changes, even when the park is renamed.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"park":{"type":"object","additionalProperties":true},"count":{"type":"integer"},"areas":{"type":"array","items":{"type":"object","additionalProperties":true}},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/venues/{park}/history":{"get":{"operationId":"venues_park_history","tags":["Venues"],"summary":"Everything that happened to a venue","description":"Everything the database knows happened to this item, merged into one stream and sorted by date: renames, moves between areas, spec revisions, operators, investments, records held, yearly figures, incidents and curated timeline events. Each entry carries a `kind` saying which of those it is. Undated entries sort last and are counted, never dropped. Under a year, the stream is narrowed to that year.","parameters":[{"name":"park","in":"path","required":true,"description":"Park public id, e.g. `ven00001`. Stable — it never changes, even when the park is renamed.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"subject":{"type":"object","additionalProperties":true},"span":{"type":"object","additionalProperties":true},"count":{"type":"integer"},"undated":{"type":"object","additionalProperties":true},"by_kind":{"type":"object","additionalProperties":true},"history":{"type":"object","additionalProperties":true},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/{year}/venues/{park}/history":{"get":{"operationId":"historic_venues_park_history","tags":["Venues"],"summary":"Everything that happened to a venue, as it stood in a given year","description":"Everything the database knows happened to this item, merged into one stream and sorted by date: renames, moves between areas, spec revisions, operators, investments, records held, yearly figures, incidents and curated timeline events. Each entry carries a `kind` saying which of those it is. Undated entries sort last and are counted, never dropped. Under a year, the stream is narrowed to that year.","parameters":[{"name":"year","in":"path","required":true,"description":"The year to view the resource as it stood. A record is included if any part of its life touched that year, so a ride that closed in the March is part of that season.","schema":{"type":"string","pattern":"^\\d{4}$","minimum":1700,"maximum":2100},"example":"2005"},{"name":"park","in":"path","required":true,"description":"Park public id, e.g. `ven00001`. Stable — it never changes, even when the park is renamed.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"subject":{"type":"object","additionalProperties":true},"span":{"type":"object","additionalProperties":true},"count":{"type":"integer"},"undated":{"type":"object","additionalProperties":true},"by_kind":{"type":"object","additionalProperties":true},"history":{"type":"object","additionalProperties":true},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/venues/{park}/calendar":{"get":{"operationId":"venues_park_calendar","tags":["Venues"],"summary":"A venue's published opening hours","parameters":[{"name":"park","in":"path","required":true,"description":"Park public id, e.g. `ven00001`. Stable — it never changes, even when the park is renamed.","schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"First date, inclusive.","schema":{"type":"string"},"example":"2026-10-01"},{"name":"to","in":"query","required":false,"description":"Last date, inclusive.","schema":{"type":"string"},"example":"2026-10-31"},{"name":"limit","in":"query","required":false,"description":"Maximum rows to return.","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"Rows to skip, for paging.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"subject":{"type":"object","additionalProperties":true},"span":{"type":"object","additionalProperties":true},"count":{"type":"integer"},"calendar":{"type":"array","items":{"type":"object","additionalProperties":true}},"events":{"type":"array","items":{"type":"object","additionalProperties":true}},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/{year}/venues/{park}/calendar":{"get":{"operationId":"historic_venues_park_calendar","tags":["Venues"],"summary":"A venue's published opening hours, as it stood in a given year","parameters":[{"name":"year","in":"path","required":true,"description":"The year to view the resource as it stood. A record is included if any part of its life touched that year, so a ride that closed in the March is part of that season.","schema":{"type":"string","pattern":"^\\d{4}$","minimum":1700,"maximum":2100},"example":"2005"},{"name":"park","in":"path","required":true,"description":"Park public id, e.g. `ven00001`. Stable — it never changes, even when the park is renamed.","schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"First date, inclusive.","schema":{"type":"string"},"example":"2026-10-01"},{"name":"to","in":"query","required":false,"description":"Last date, inclusive.","schema":{"type":"string"},"example":"2026-10-31"},{"name":"limit","in":"query","required":false,"description":"Maximum rows to return.","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"Rows to skip, for paging.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"subject":{"type":"object","additionalProperties":true},"span":{"type":"object","additionalProperties":true},"count":{"type":"integer"},"calendar":{"type":"array","items":{"type":"object","additionalProperties":true}},"events":{"type":"array","items":{"type":"object","additionalProperties":true}},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/venues/{park}/queue-times":{"get":{"operationId":"venues_park_queue-times","tags":["Venues"],"summary":"A venue's queue times, current or historical","parameters":[{"name":"park","in":"path","required":true,"description":"Park public id, e.g. `ven00001`. Stable — it never changes, even when the park is renamed.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"park":{"type":"object","additionalProperties":true},"count":{"type":"integer"},"queue_times":{"type":"array","items":{"type":"object","additionalProperties":true}},"notices":{"type":"array","items":{"type":"object","additionalProperties":true}},"within_hours":{"type":"object","additionalProperties":true},"live":{"type":"object","additionalProperties":true},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/{year}/venues/{park}/queue-times":{"get":{"operationId":"historic_venues_park_queue-times","tags":["Venues"],"summary":"A venue's queue times, current or historical, as it stood in a given year","parameters":[{"name":"year","in":"path","required":true,"description":"The year to view the resource as it stood. A record is included if any part of its life touched that year, so a ride that closed in the March is part of that season.","schema":{"type":"string","pattern":"^\\d{4}$","minimum":1700,"maximum":2100},"example":"2005"},{"name":"park","in":"path","required":true,"description":"Park public id, e.g. `ven00001`. Stable — it never changes, even when the park is renamed.","schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"Start of the range, inclusive. `YYYY-MM-DD` is preferred; `ddmmyy` and `YYYYMMDD` are accepted. Clamped to the year in the path. Defaults to 1 January.","schema":{"type":"string"},"example":"2026-08-01"},{"name":"to","in":"query","required":false,"description":"End of the range, inclusive. Same formats. Defaults to 31 December.","schema":{"type":"string"},"example":"2026-08-31"},{"name":"limit","in":"query","required":false,"description":"Maximum rows to return.","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"Rows to skip, for paging.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"park":{"type":"object","additionalProperties":true},"count":{"type":"integer"},"queue_times":{"type":"array","items":{"type":"object","additionalProperties":true}},"notices":{"type":"array","items":{"type":"object","additionalProperties":true}},"within_hours":{"type":"object","additionalProperties":true},"live":{"type":"object","additionalProperties":true},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/attractions":{"get":{"operationId":"attractions","tags":["Attractions"],"summary":"Every attraction","parameters":[{"name":"kind","in":"query","required":false,"description":"Restrict to one attraction kind.","schema":{"type":"string","enum":["animal_exhibit","app","arcade","bar","cafe","dark_ride","drop_tower","escape_room","experience_trail","flat_ride","food_kiosk","guest_service","hotel","kiosk","lodge","midway_game","museum_exhibit","other","photo_point","play_area","powered_coaster","quick_service","restaurant","roaming_entertainment","roller_coaster","scare_maze","scare_zone","shop","show","transport_ride","vr_experience","walkthrough","water_ride"]}},{"name":"category","in":"query","required":false,"description":"Restrict to one kind category.","schema":{"type":"string","enum":["accommodation","dining","exhibit","experience","game","other","retail","ride","service","show"]}},{"name":"park","in":"query","required":false,"description":"Restrict to one venue, by public id.","schema":{"type":"string"},"example":"ven00001"},{"name":"status","in":"query","required":false,"description":"One status, or `all`.","schema":{"type":"string"},"example":"operating"},{"name":"manufacturer","in":"query","required":false,"description":"Everything one firm built, by public id or name.","schema":{"type":"string"},"example":"Bolliger & Mabillard"},{"name":"opened_from","in":"query","required":false,"description":"Opened on or after this date.","schema":{"type":"string"},"example":"1990-01-01"},{"name":"opened_to","in":"query","required":false,"description":"Opened on or before this date.","schema":{"type":"string"},"example":"1999-12-31"},{"name":"q","in":"query","required":false,"description":"Name search, including names the attraction used to have.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum rows to return.","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"Rows to skip, for paging.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"},"attractions":{"type":"array","items":{"type":"object","additionalProperties":true}},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/{year}/attractions":{"get":{"operationId":"historic_attractions","tags":["Attractions"],"summary":"Every attraction, as it stood in a given year","parameters":[{"name":"year","in":"path","required":true,"description":"The year to view the resource as it stood. A record is included if any part of its life touched that year, so a ride that closed in the March is part of that season.","schema":{"type":"string","pattern":"^\\d{4}$","minimum":1700,"maximum":2100},"example":"2005"},{"name":"kind","in":"query","required":false,"description":"Restrict to one attraction kind.","schema":{"type":"string","enum":["animal_exhibit","app","arcade","bar","cafe","dark_ride","drop_tower","escape_room","experience_trail","flat_ride","food_kiosk","guest_service","hotel","kiosk","lodge","midway_game","museum_exhibit","other","photo_point","play_area","powered_coaster","quick_service","restaurant","roaming_entertainment","roller_coaster","scare_maze","scare_zone","shop","show","transport_ride","vr_experience","walkthrough","water_ride"]}},{"name":"category","in":"query","required":false,"description":"Restrict to one kind category.","schema":{"type":"string","enum":["accommodation","dining","exhibit","experience","game","other","retail","ride","service","show"]}},{"name":"park","in":"query","required":false,"description":"Restrict to one venue, by public id.","schema":{"type":"string"},"example":"ven00001"},{"name":"status","in":"query","required":false,"description":"One status, or `all`.","schema":{"type":"string"},"example":"operating"},{"name":"manufacturer","in":"query","required":false,"description":"Everything one firm built, by public id or name.","schema":{"type":"string"},"example":"Bolliger & Mabillard"},{"name":"opened_from","in":"query","required":false,"description":"Opened on or after this date.","schema":{"type":"string"},"example":"1990-01-01"},{"name":"opened_to","in":"query","required":false,"description":"Opened on or before this date.","schema":{"type":"string"},"example":"1999-12-31"},{"name":"q","in":"query","required":false,"description":"Name search, including names the attraction used to have.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum rows to return.","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"Rows to skip, for paging.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"},"attractions":{"type":"array","items":{"type":"object","additionalProperties":true}},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/attractions/{attraction}":{"get":{"operationId":"attractions_attraction","tags":["Attractions"],"summary":"One attraction","description":"The full record: every name it has held, every area it has sat in, its spec revisions, its timeline and its media. Under a year, the name, area and spec are the ones in force that year.","parameters":[{"name":"attraction","in":"path","required":true,"description":"Attraction public id, e.g. `attr00001`. Stable across rethemes and renames.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"attraction":{"type":"object","additionalProperties":true},"names":{"type":"array","items":{"type":"object","additionalProperties":true}},"areas":{"type":"array","items":{"type":"object","additionalProperties":true}},"specs":{"type":"array","items":{"type":"object","additionalProperties":true}},"timeline":{"type":"array","items":{"type":"object","additionalProperties":true}},"media":{"type":"array","items":{"type":"object","additionalProperties":true}},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/{year}/attractions/{attraction}":{"get":{"operationId":"historic_attractions_attraction","tags":["Attractions"],"summary":"One attraction, as it stood in a given year","description":"The full record: every name it has held, every area it has sat in, its spec revisions, its timeline and its media. Under a year, the name, area and spec are the ones in force that year.","parameters":[{"name":"year","in":"path","required":true,"description":"The year to view the resource as it stood. A record is included if any part of its life touched that year, so a ride that closed in the March is part of that season.","schema":{"type":"string","pattern":"^\\d{4}$","minimum":1700,"maximum":2100},"example":"2005"},{"name":"attraction","in":"path","required":true,"description":"Attraction public id, e.g. `attr00001`. Stable across rethemes and renames.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"attraction":{"type":"object","additionalProperties":true},"names":{"type":"array","items":{"type":"object","additionalProperties":true}},"areas":{"type":"array","items":{"type":"object","additionalProperties":true}},"specs":{"type":"array","items":{"type":"object","additionalProperties":true}},"timeline":{"type":"array","items":{"type":"object","additionalProperties":true}},"media":{"type":"array","items":{"type":"object","additionalProperties":true}},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/parks/{park}/calendar":{"get":{"operationId":"parks_park_calendar","tags":["Calendar"],"summary":"Published opening hours","description":"What the park has said about its opening: hours, last entry, ride hours where they differ from the gates, and the park's own message for the day, which is where a special event gets named. Days carrying one are also collected into `events`. Only published days appear — a date missing here is a date the park said nothing about, not one it said it would be shut.","parameters":[{"name":"park","in":"path","required":true,"description":"Park public id, e.g. `ven00001`. Stable — it never changes, even when the park is renamed.","schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"First date, inclusive. YYYY-MM-DD.","schema":{"type":"string"},"example":"2026-10-01"},{"name":"to","in":"query","required":false,"description":"Last date, inclusive.","schema":{"type":"string"},"example":"2026-10-31"},{"name":"kind","in":"query","required":false,"description":"`published` (the park's own) or `actual`.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum rows to return.","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"Rows to skip, for paging.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"subject":{"type":"object","additionalProperties":true},"span":{"type":"object","additionalProperties":true},"count":{"type":"integer"},"calendar":{"type":"array","items":{"type":"object","additionalProperties":true}},"events":{"type":"array","items":{"type":"object","additionalProperties":true}},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/{year}/parks/{park}/calendar":{"get":{"operationId":"historic_parks_park_calendar","tags":["Calendar"],"summary":"Published opening hours, as it stood in a given year","description":"What the park has said about its opening: hours, last entry, ride hours where they differ from the gates, and the park's own message for the day, which is where a special event gets named. Days carrying one are also collected into `events`. Only published days appear — a date missing here is a date the park said nothing about, not one it said it would be shut.","parameters":[{"name":"year","in":"path","required":true,"description":"The year to view the resource as it stood. A record is included if any part of its life touched that year, so a ride that closed in the March is part of that season.","schema":{"type":"string","pattern":"^\\d{4}$","minimum":1700,"maximum":2100},"example":"2005"},{"name":"park","in":"path","required":true,"description":"Park public id, e.g. `ven00001`. Stable — it never changes, even when the park is renamed.","schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"First date, inclusive. YYYY-MM-DD.","schema":{"type":"string"},"example":"2026-10-01"},{"name":"to","in":"query","required":false,"description":"Last date, inclusive.","schema":{"type":"string"},"example":"2026-10-31"},{"name":"kind","in":"query","required":false,"description":"`published` (the park's own) or `actual`.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum rows to return.","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"Rows to skip, for paging.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"subject":{"type":"object","additionalProperties":true},"span":{"type":"object","additionalProperties":true},"count":{"type":"integer"},"calendar":{"type":"array","items":{"type":"object","additionalProperties":true}},"events":{"type":"array","items":{"type":"object","additionalProperties":true}},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/attractions/{attraction}/calendar":{"get":{"operationId":"attractions_attraction_calendar","tags":["Calendar"],"summary":"An attraction's own opening hours","description":"Some things inside a park keep their own calendar — Alton's waterpark and golf course open on different days from the park around them. Empty for an attraction that simply follows its park; that is not the same as an attraction that is shut.","parameters":[{"name":"attraction","in":"path","required":true,"description":"Attraction public id, e.g. `attr00001`. Stable across rethemes and renames.","schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"First date, inclusive. YYYY-MM-DD.","schema":{"type":"string"},"example":"2026-10-01"},{"name":"to","in":"query","required":false,"description":"Last date, inclusive.","schema":{"type":"string"},"example":"2026-10-31"},{"name":"limit","in":"query","required":false,"description":"Maximum rows to return.","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"Rows to skip, for paging.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"subject":{"type":"object","additionalProperties":true},"span":{"type":"object","additionalProperties":true},"count":{"type":"integer"},"calendar":{"type":"array","items":{"type":"object","additionalProperties":true}},"events":{"type":"array","items":{"type":"object","additionalProperties":true}},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/{year}/attractions/{attraction}/calendar":{"get":{"operationId":"historic_attractions_attraction_calendar","tags":["Calendar"],"summary":"An attraction's own opening hours, as it stood in a given year","description":"Some things inside a park keep their own calendar — Alton's waterpark and golf course open on different days from the park around them. Empty for an attraction that simply follows its park; that is not the same as an attraction that is shut.","parameters":[{"name":"year","in":"path","required":true,"description":"The year to view the resource as it stood. A record is included if any part of its life touched that year, so a ride that closed in the March is part of that season.","schema":{"type":"string","pattern":"^\\d{4}$","minimum":1700,"maximum":2100},"example":"2005"},{"name":"attraction","in":"path","required":true,"description":"Attraction public id, e.g. `attr00001`. Stable across rethemes and renames.","schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"First date, inclusive. YYYY-MM-DD.","schema":{"type":"string"},"example":"2026-10-01"},{"name":"to","in":"query","required":false,"description":"Last date, inclusive.","schema":{"type":"string"},"example":"2026-10-31"},{"name":"limit","in":"query","required":false,"description":"Maximum rows to return.","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"Rows to skip, for paging.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"subject":{"type":"object","additionalProperties":true},"span":{"type":"object","additionalProperties":true},"count":{"type":"integer"},"calendar":{"type":"array","items":{"type":"object","additionalProperties":true}},"events":{"type":"array","items":{"type":"object","additionalProperties":true}},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/parks/{park}/history":{"get":{"operationId":"parks_park_history","tags":["Parks"],"summary":"Everything that happened to a park","description":"Everything the database knows happened to this item, merged into one stream and sorted by date: renames, moves between areas, spec revisions, operators, investments, records held, yearly figures, incidents and curated timeline events. Each entry carries a `kind` saying which of those it is. Undated entries sort last and are counted, never dropped. Under a year, the stream is narrowed to that year.","parameters":[{"name":"park","in":"path","required":true,"description":"Park public id, e.g. `ven00001`. Stable — it never changes, even when the park is renamed.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"subject":{"type":"object","additionalProperties":true},"span":{"type":"object","additionalProperties":true},"count":{"type":"integer"},"undated":{"type":"object","additionalProperties":true},"by_kind":{"type":"object","additionalProperties":true},"history":{"type":"object","additionalProperties":true},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/{year}/parks/{park}/history":{"get":{"operationId":"historic_parks_park_history","tags":["Parks"],"summary":"Everything that happened to a park, as it stood in a given year","description":"Everything the database knows happened to this item, merged into one stream and sorted by date: renames, moves between areas, spec revisions, operators, investments, records held, yearly figures, incidents and curated timeline events. Each entry carries a `kind` saying which of those it is. Undated entries sort last and are counted, never dropped. Under a year, the stream is narrowed to that year.","parameters":[{"name":"year","in":"path","required":true,"description":"The year to view the resource as it stood. A record is included if any part of its life touched that year, so a ride that closed in the March is part of that season.","schema":{"type":"string","pattern":"^\\d{4}$","minimum":1700,"maximum":2100},"example":"2005"},{"name":"park","in":"path","required":true,"description":"Park public id, e.g. `ven00001`. Stable — it never changes, even when the park is renamed.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"subject":{"type":"object","additionalProperties":true},"span":{"type":"object","additionalProperties":true},"count":{"type":"integer"},"undated":{"type":"object","additionalProperties":true},"by_kind":{"type":"object","additionalProperties":true},"history":{"type":"object","additionalProperties":true},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/parks/{park}/areas":{"get":{"operationId":"parks_park_areas","tags":["Areas"],"summary":"A park's areas","description":"The lands a park is divided into. Under a year, the areas it had that year, under the names they carried then.","parameters":[{"name":"park","in":"path","required":true,"description":"Park public id, e.g. `ven00001`. Stable — it never changes, even when the park is renamed.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"park":{"type":"object","additionalProperties":true},"count":{"type":"integer"},"areas":{"type":"array","items":{"type":"object","additionalProperties":true}},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/{year}/parks/{park}/areas":{"get":{"operationId":"historic_parks_park_areas","tags":["Areas"],"summary":"A park's areas, as it stood in a given year","description":"The lands a park is divided into. Under a year, the areas it had that year, under the names they carried then.","parameters":[{"name":"year","in":"path","required":true,"description":"The year to view the resource as it stood. A record is included if any part of its life touched that year, so a ride that closed in the March is part of that season.","schema":{"type":"string","pattern":"^\\d{4}$","minimum":1700,"maximum":2100},"example":"2005"},{"name":"park","in":"path","required":true,"description":"Park public id, e.g. `ven00001`. Stable — it never changes, even when the park is renamed.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"park":{"type":"object","additionalProperties":true},"count":{"type":"integer"},"areas":{"type":"array","items":{"type":"object","additionalProperties":true}},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/areas/{area}":{"get":{"operationId":"areas_area","tags":["Areas"],"summary":"One area","description":"The area record, its name history and what stands in it.","parameters":[{"name":"area","in":"path","required":true,"description":"Area public id, e.g. `area00001`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"area":{"type":"object","additionalProperties":true},"names":{"type":"array","items":{"type":"object","additionalProperties":true}},"contents":{"type":"object","additionalProperties":true},"timeline":{"type":"array","items":{"type":"object","additionalProperties":true}},"links":{"type":"object","additionalProperties":true},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/{year}/areas/{area}":{"get":{"operationId":"historic_areas_area","tags":["Areas"],"summary":"One area, as it stood in a given year","description":"The area record, its name history and what stands in it.","parameters":[{"name":"year","in":"path","required":true,"description":"The year to view the resource as it stood. A record is included if any part of its life touched that year, so a ride that closed in the March is part of that season.","schema":{"type":"string","pattern":"^\\d{4}$","minimum":1700,"maximum":2100},"example":"2005"},{"name":"area","in":"path","required":true,"description":"Area public id, e.g. `area00001`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"area":{"type":"object","additionalProperties":true},"names":{"type":"array","items":{"type":"object","additionalProperties":true}},"contents":{"type":"object","additionalProperties":true},"timeline":{"type":"array","items":{"type":"object","additionalProperties":true}},"links":{"type":"object","additionalProperties":true},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/areas/{area}/history":{"get":{"operationId":"areas_area_history","tags":["Areas"],"summary":"Everything that happened to an area","description":"Everything the database knows happened to this item, merged into one stream and sorted by date: renames, moves between areas, spec revisions, operators, investments, records held, yearly figures, incidents and curated timeline events. Each entry carries a `kind` saying which of those it is. Undated entries sort last and are counted, never dropped. Under a year, the stream is narrowed to that year.","parameters":[{"name":"area","in":"path","required":true,"description":"Area public id, e.g. `area00001`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"subject":{"type":"object","additionalProperties":true},"span":{"type":"object","additionalProperties":true},"count":{"type":"integer"},"undated":{"type":"object","additionalProperties":true},"by_kind":{"type":"object","additionalProperties":true},"history":{"type":"object","additionalProperties":true},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/{year}/areas/{area}/history":{"get":{"operationId":"historic_areas_area_history","tags":["Areas"],"summary":"Everything that happened to an area, as it stood in a given year","description":"Everything the database knows happened to this item, merged into one stream and sorted by date: renames, moves between areas, spec revisions, operators, investments, records held, yearly figures, incidents and curated timeline events. Each entry carries a `kind` saying which of those it is. Undated entries sort last and are counted, never dropped. Under a year, the stream is narrowed to that year.","parameters":[{"name":"year","in":"path","required":true,"description":"The year to view the resource as it stood. A record is included if any part of its life touched that year, so a ride that closed in the March is part of that season.","schema":{"type":"string","pattern":"^\\d{4}$","minimum":1700,"maximum":2100},"example":"2005"},{"name":"area","in":"path","required":true,"description":"Area public id, e.g. `area00001`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"subject":{"type":"object","additionalProperties":true},"span":{"type":"object","additionalProperties":true},"count":{"type":"integer"},"undated":{"type":"object","additionalProperties":true},"by_kind":{"type":"object","additionalProperties":true},"history":{"type":"object","additionalProperties":true},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/attractions/{attraction}/history":{"get":{"operationId":"attractions_attraction_history","tags":["Attractions"],"summary":"Everything that happened to an attraction","description":"Everything the database knows happened to this item, merged into one stream and sorted by date: renames, moves between areas, spec revisions, operators, investments, records held, yearly figures, incidents and curated timeline events. Each entry carries a `kind` saying which of those it is. Undated entries sort last and are counted, never dropped. Under a year, the stream is narrowed to that year.","parameters":[{"name":"attraction","in":"path","required":true,"description":"Attraction public id, e.g. `attr00001`. Stable across rethemes and renames.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"subject":{"type":"object","additionalProperties":true},"span":{"type":"object","additionalProperties":true},"count":{"type":"integer"},"undated":{"type":"object","additionalProperties":true},"by_kind":{"type":"object","additionalProperties":true},"history":{"type":"object","additionalProperties":true},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/{year}/attractions/{attraction}/history":{"get":{"operationId":"historic_attractions_attraction_history","tags":["Attractions"],"summary":"Everything that happened to an attraction, as it stood in a given year","description":"Everything the database knows happened to this item, merged into one stream and sorted by date: renames, moves between areas, spec revisions, operators, investments, records held, yearly figures, incidents and curated timeline events. Each entry carries a `kind` saying which of those it is. Undated entries sort last and are counted, never dropped. Under a year, the stream is narrowed to that year.","parameters":[{"name":"year","in":"path","required":true,"description":"The year to view the resource as it stood. A record is included if any part of its life touched that year, so a ride that closed in the March is part of that season.","schema":{"type":"string","pattern":"^\\d{4}$","minimum":1700,"maximum":2100},"example":"2005"},{"name":"attraction","in":"path","required":true,"description":"Attraction public id, e.g. `attr00001`. Stable across rethemes and renames.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"subject":{"type":"object","additionalProperties":true},"span":{"type":"object","additionalProperties":true},"count":{"type":"integer"},"undated":{"type":"object","additionalProperties":true},"by_kind":{"type":"object","additionalProperties":true},"history":{"type":"object","additionalProperties":true},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/lineage/{attraction}":{"get":{"operationId":"lineage_attraction","tags":["Attractions"],"summary":"A ride's life across venues","description":"Renames and rethemes are periods on one attraction, so this has more than one entry only for a genuine relocation to another venue.","parameters":[{"name":"attraction","in":"path","required":true,"description":"Attraction public id, e.g. `attr00001`. Stable across rethemes and renames.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"attraction":{"type":"object","additionalProperties":true},"installations":{"type":"array","items":{"type":"object","additionalProperties":true}},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/media/{uid}":{"get":{"operationId":"media_uid","tags":["Media"],"summary":"One media asset","description":"Catalogue record and the URL the file is served from.","parameters":[{"name":"uid","in":"path","required":true,"description":"Media uid, e.g. `md_01J…`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed this minute."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left this minute."}},"content":{"application/json":{"schema":{"type":"object","properties":{"media":{"type":"array","items":{"type":"object","additionalProperties":true}},"has_more":{"type":"boolean"}},"additionalProperties":true}}}},"400":{"description":"Bad request — an unparseable date, an out-of-range year, or a parameter that does not apply here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or the record did not exist in the year requested.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/openapi.json":{"get":{"operationId":"openapi","tags":["Meta"],"summary":"This document","description":"Generated from the router's own route table on every request.","responses":{"200":{"description":"OpenAPI 3.1 document","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}