Public API · v1
Build with live theme park data
A free API for live queue times, opening hours and crowd predictions across 80+ parks worldwide. Get a key in seconds - the only cost is an attribution link back to us.
Quick start
- 1
Create a free account
No card, no trial - register with an email address or sign in with Google or Apple.
- 2
Create an API key
Head to API Keys in your dashboard and create your key. You can view and copy it from the dashboard any time.
- 3
Call the API
Send your key in the
x-api-keyheader and you are live:
curl -H "x-api-key: pqt_live_..." https://api.parkqueuetimes.com/v1/parksAuthentication
Every /v1 request needs an API key. Keys are free - create one at /dashboard/api-keys with any account - one key per account. You can view and copy your key from your dashboard any time, and revoke it and create a new one whenever you need.
Send your key in the x-api-key header (preferred), or as an ?api_key= query parameter for quick tinkering. Prefer the header in production - query strings tend to end up in logs and browser history.
curl -H "x-api-key: pqt_live_..." \
https://api.parkqueuetimes.com/v1/parks/3/livecurl "https://api.parkqueuetimes.com/v1/parks/3/live?api_key=pqt_live_..."Rate limits
| Tier | Requests / minute | Requests / day | Keys |
|---|---|---|---|
| Free | 60 | 10,000 | 1 per account |
| Higher tiers | Coming soon - tell us what you need | ||
Limits are soft: briefly exceeding your per-minute allowance will not cut you off. Only sustained traffic far above the limit receives 429 Too Many Requests with a Retry-After header. Every keyed response tells you where you stand:
X-RateLimit-Limit- your per-minute allowanceX-RateLimit-Remaining- requests left in the current minuteX-RateLimit-Reset- Unix timestamp (seconds) when the current minute window ends
Keyed responses are never cached (Cache-Control: no-store), so you always get the freshest data straight from the source.
Endpoints
Base URL: https://api.parkqueuetimes.com. All endpoints are GET and return JSON in a stable envelope: { "success": true, "data": <payload>, "meta": { "generated", "attribution" } }.
:id is the numeric park id returned by /v1/parks.
/v1/parksEvery park we track, with location and timezone. Use the id from here in the other endpoints.
{
"success": true,
"data": [
{
"id": 3,
"name": "Alton Towers",
"slug": "alton-towers",
"country": "United Kingdom",
"latitude": 52.993137,
"longitude": -1.894724,
"timezone": "Europe/London"
}
],
"meta": {
"generated": "2026-06-11T14:32:08.000Z",
"attribution": "Powered by ParkQueueTimes.com - https://parkqueuetimes.com"
}
}/v1/parks/:idA single park's details plus today's opening hours (null on days the park is closed).
{
"success": true,
"data": {
"id": 3,
"name": "Alton Towers",
"slug": "alton-towers",
"country": "United Kingdom",
"latitude": 52.993137,
"longitude": -1.894724,
"timezone": "Europe/London",
"hours": {
"date": "2026-06-11",
"openingTime": "2026-06-11T10:00:00+01:00",
"closingTime": "2026-06-11T17:00:00+01:00"
}
},
"meta": {
"generated": "2026-06-11T14:32:08.000Z",
"attribution": "Powered by ParkQueueTimes.com - https://parkqueuetimes.com"
}
}/v1/parks/:id/liveLive wait times for every ride in the park. status is one of OPERATING, DOWN, CLOSED or REFURBISHMENT; waitMinutes and lastUpdated are null when a ride is not reporting a queue.
{
"success": true,
"data": {
"parkId": 3,
"rides": [
{
"id": 65,
"name": "The Smiler",
"status": "OPERATING",
"waitMinutes": 45,
"lastUpdated": "2026-06-11T14:31:42.000Z"
},
{
"id": 66,
"name": "Nemesis Reborn",
"status": "OPERATING",
"waitMinutes": 30,
"lastUpdated": "2026-06-11T14:31:42.000Z"
},
{
"id": 67,
"name": "Wicker Man",
"status": "DOWN",
"waitMinutes": null,
"lastUpdated": "2026-06-11T14:18:09.000Z"
}
]
},
"meta": {
"generated": "2026-06-11T14:32:08.000Z",
"attribution": "Powered by ParkQueueTimes.com - https://parkqueuetimes.com"
}
}/v1/parks/:id/scheduleThe park's upcoming operating calendar - one entry per scheduled day.
{
"success": true,
"data": {
"schedule": [
{
"date": "2026-06-11",
"openingTime": "2026-06-11T10:00:00+01:00",
"closingTime": "2026-06-11T17:00:00+01:00",
"type": "OPERATING"
},
{
"date": "2026-06-12",
"openingTime": "2026-06-12T10:00:00+01:00",
"closingTime": "2026-06-12T18:00:00+01:00",
"type": "OPERATING"
}
]
},
"meta": {
"generated": "2026-06-11T14:32:08.000Z",
"attribution": "Powered by ParkQueueTimes.com - https://parkqueuetimes.com"
}
}/v1/parks/:id/calendarPredicted crowd levels per day from our Almanac forecasting model. crowdPercent is 0-100 (higher = busier), or null where no forecast exists.
{
"success": true,
"data": {
"days": [
{ "date": "2026-06-12", "crowdPercent": 34 },
{ "date": "2026-06-13", "crowdPercent": 72 },
{ "date": "2026-06-14", "crowdPercent": null }
]
},
"meta": {
"generated": "2026-06-11T14:32:08.000Z",
"attribution": "Powered by ParkQueueTimes.com - https://parkqueuetimes.com"
}
}Errors
| Status | Meaning |
|---|---|
| 401 | Missing or invalid API key. Check the x-api-key header - and if you need a key, they are free at parkqueuetimes.com/developers. |
| 404 | Unknown park id. List valid ids with /v1/parks. |
| 429 | Rate limit exceeded by a sustained margin. Back off for the number of seconds in the Retry-After header. |
| 503 | Park data is still loading or temporarily unavailable. Retry after a short delay. |
Every error uses the same envelope, so one handler covers them all:
{
"success": false,
"error": "Invalid or revoked API key. Get a free key at https://parkqueuetimes.com/developers"
}Attribution required
The only cost is a credit
Free use requires displaying "Powered by ParkQueueTimes.com" linking to https://parkqueuetimes.com somewhere prominent in your app or service.
To make this easy, every successful response includes a ready-made credit string in meta.attribution - display it near the data and you are done. Apps and sites using our data without attribution may have their keys revoked.
Frequently asked questions
Is the API free?
Yes. Free keys include 60 requests per minute and 10,000 per day - plenty for most apps, bots, and dashboards. The only requirement is the attribution link.
How fresh is the data?
Live wait times update as soon as each park publishes a change to its official feed - there is no fixed refresh cycle. Keyed /v1 responses are never cached, so you always see the latest reading we hold.
Can I use it commercially?
Yes - commercial use is welcome on the free tier, as long as the "Powered by ParkQueueTimes.com" attribution is displayed prominently in your app or service.
Is historical data available?
Not through the API yet. Historical wait times and analytics endpoints are planned as a paid tier - get in touch if you would like early access.
How many parks are covered?
Around 80 parks and 3200+ rides across the UK, Europe, and North America, with more added regularly. Browse the full list.
Where do I report issues or request features?
Email [email protected] - we read everything, and developer feedback shapes what we build next.
Ready to build?
Your first key takes less than a minute.