---
title: "History of an entity"
method: GET
path: "/v1/entity/{id}/history"
tags: ["v1"]
---

# History of an entity

`GET /v1/entity/{id}/history`

## Request

- Base URL: `https://api.themeparks.wiki`
- URL: `https://api.themeparks.wiki/v1/entity/{id}/history`
- Auth: one of:
  - none
  - API key in header `X-API-Key`

Returns an entity's history as one row per change. Each row is the entity's complete live data at that moment (the same keys as /live) plus `time` and `changed`. Ask for one park-local day (`date=YYYY-MM-DD`), a range of days (`from` and `to`, both inclusive), or RFC 3339 instants with an offset (`to` exclusive). With no parameters you get today. A call covers up to 31 days. The `opening` object is the state at the start of the range: the last reading of every field, however old, with `opening.observedAt` saying when it was seen, so the first row is already complete. `coverage.firstRecordedAt` is the first day we hold anything for this entity.

For a park, the 200 is `HistoryParkRawEnvelope`: an `entities[]` array with the same `coverage`, `opening` object and `history` for each entity that has history, the park included if it has its own. A park call covers 1 park-local day, and a longer range returns 400 RANGE_TOO_LONG. Every other entityType gets the single-entity shape, so the 200 is a union of two schemas selected by `entityType`. A call costs one unit of the hourly history budget, however large the park.

See "Limits" above for the history window and hourly budget.

## Path parameters

- `id` string, required

## Query parameters

- `date` string, date
- `from` string
- `to` string

## Response `200`

Successful response

- union
  - HistoryEnvelope: One entity's history. For a PARK the same call returns HistoryParkRawEnvelope instead.
    - `id` string, required
    - `name` string, required
    - `entityType` string, required
    - `parentId` string, nullable, required
    - `destinationId` string, nullable, required
    - `timezone` string, required: IANA timezone the park-local days are resolved in.
    - `range` HistoryRange, required
      - `from` string, required: The start you asked for. A day comes back as you sent it; an instant comes back normalised to UTC whole seconds. On /history/daily it is always a day.
      - `to` string, required: The end, in the same form as from. Defaults to today (days) or now (instants).
    - `coverage` HistoryCoverage, required
      - `firstRecordedAt` string, date, nullable, required: First park-local day we hold anything for this entity, or null. Per-field detail: GET /v1/entity/{id}/history/coverage.
    - `opening` HistoryOpening, required: The `opening` object: the complete state at the start of the range, in the same shape as a row. A field is present only if the entity has it. An unknown value is its empty form (standby `{"waitTime": null}`, showtimes `[]`); an unknown status is null.
      - `time` string, date-time, required: Start of the range (UTC, whole seconds). The state below is effective from this instant.
      - `observedAt` string, date-time: When this state was last seen (UTC, whole seconds): the newest entry in `observedAtByKind`. Earlier than `time` means it was carried in from before the range, possibly from long ago; a ride whose feed stopped keeps its last values. Absent means we hold nothing for this entity from before the range, unless `degraded` is set.
      - `observedAtByKind` object: When each field of the opening was last seen (UTC, whole seconds), keyed by its path: `status`, `queue.STANDBY`, `showtimes` and so on. A wait that did not change for weeks is dated weeks back, so check a queue's own entry before treating it as current. Usually, but not always, the moment the value last changed.
      - `degraded` true: Present, and true, when we could not look far enough back for this response, so the opening may be missing a field we hold. Ask again in a minute for the full opening.
      - `degradedReason` 'timeout' | 'error' | 'capacity': Why the lookup was cut short: `timeout`, `error`, or `capacity` when it needed more reading than one request is allowed.
      - `status` string, nullable: Live status at the start of the range; null when unknown.
      - `queue` LiveQueue: The queues an entity has, each present only when the entity publishes it. STANDBY: the ordinary line. SINGLE_RIDER: a separate line for guests riding alone. RETURN_TIME: a free reservation for a later time window. PAID_RETURN_TIME: the same, paid for. BOARDING_GROUP: a virtual queue that calls groups by number. PAID_STANDBY: a paid line with its own wait.
        - `STANDBY` object
          - `waitTime` number, nullable: Current standby wait time in minutes
        - `SINGLE_RIDER` object
          - `waitTime` number, nullable, required: Current single rider wait time in minutes
        - `RETURN_TIME` object
          - `state` 'AVAILABLE' | 'TEMP_FULL' | 'FINISHED', required: State of return time availability
          - `returnStart` string, date-time, nullable, required: Start time of return window
          - `returnEnd` string, date-time, nullable, required: End time of return window
        - `PAID_RETURN_TIME` object
          - `state` 'AVAILABLE' | 'TEMP_FULL' | 'FINISHED', required: State of return time availability
          - `returnStart` string, date-time, nullable, required
          - `returnEnd` string, date-time, nullable, required
          - `price` PriceData, required
            - `amount` number, nullable, required: Numerical price amount, in the currency's lowest denomination (e.g. cents). null when the item costs money but the provider does not publish an amount; 0 means genuinely free
            - `currency` string, required: Currency code
            - `formatted` string: Formatted price string
        - `BOARDING_GROUP` object
          - `allocationStatus` 'AVAILABLE' | 'PAUSED' | 'CLOSED', required: State of boarding group availability
          - `currentGroupStart` number, nullable, required: Current boarding group start number
          - `currentGroupEnd` number, nullable, required: Current boarding group end number
          - `nextAllocationTime` string, date-time, nullable, required: Next boarding group allocation time
          - `estimatedWait` number, nullable, required: Estimated wait time in minutes
        - `PAID_STANDBY` object
          - `waitTime` number, nullable, required: Current paid standby wait time in minutes
      - `showtimes` LiveShowTime[], nullable
        - `type` string, required: Type of show time entry
        - `startTime` string, date-time, nullable: Start time of the show
        - `endTime` string, date-time, nullable: End time of the show
    - `history` HistoryRow[], required: Ascending by time.
      - `time` string, date-time, required: UTC instant (whole seconds) from which this state is effective, until the next row's time.
      - `changed` string[], required: Leaf paths that differ from the previous row (or from opening for the first row), e.g. queue.STANDBY.waitTime, status, showtimes.
      - `status` string, nullable
      - `queue` LiveQueue: The queues an entity has, each present only when the entity publishes it. STANDBY: the ordinary line. SINGLE_RIDER: a separate line for guests riding alone. RETURN_TIME: a free reservation for a later time window. PAID_RETURN_TIME: the same, paid for. BOARDING_GROUP: a virtual queue that calls groups by number. PAID_STANDBY: a paid line with its own wait.
        - `STANDBY` object
          - `waitTime` number, nullable: Current standby wait time in minutes
        - `SINGLE_RIDER` object
          - `waitTime` number, nullable, required: Current single rider wait time in minutes
        - `RETURN_TIME` object
          - `state` 'AVAILABLE' | 'TEMP_FULL' | 'FINISHED', required: State of return time availability
          - `returnStart` string, date-time, nullable, required: Start time of return window
          - `returnEnd` string, date-time, nullable, required: End time of return window
        - `PAID_RETURN_TIME` object
          - `state` 'AVAILABLE' | 'TEMP_FULL' | 'FINISHED', required: State of return time availability
          - `returnStart` string, date-time, nullable, required
          - `returnEnd` string, date-time, nullable, required
          - `price` PriceData, required
            - `amount` number, nullable, required: Numerical price amount, in the currency's lowest denomination (e.g. cents). null when the item costs money but the provider does not publish an amount; 0 means genuinely free
            - `currency` string, required: Currency code
            - `formatted` string: Formatted price string
        - `BOARDING_GROUP` object
          - `allocationStatus` 'AVAILABLE' | 'PAUSED' | 'CLOSED', required: State of boarding group availability
          - `currentGroupStart` number, nullable, required: Current boarding group start number
          - `currentGroupEnd` number, nullable, required: Current boarding group end number
          - `nextAllocationTime` string, date-time, nullable, required: Next boarding group allocation time
          - `estimatedWait` number, nullable, required: Estimated wait time in minutes
        - `PAID_STANDBY` object
          - `waitTime` number, nullable, required: Current paid standby wait time in minutes
      - `showtimes` LiveShowTime[], nullable
        - `type` string, required: Type of show time entry
        - `startTime` string, date-time, nullable: Start time of the show
        - `endTime` string, date-time, nullable: End time of the show
    - `next` string, nullable, required: Always null for a single entity.
  - HistoryParkRawEnvelope: History of a whole PARK for 1 park-local day, returned by /history when the entity's entityType is PARK. A longer range is 400 RANGE_TOO_LONG.
    - `id` string, required
    - `name` string, required
    - `entityType` string, required
    - `parentId` string, nullable, required
    - `destinationId` string, nullable, required
    - `timezone` string, required: IANA timezone of the park; every entity is resolved in it.
    - `range` HistoryRange, required
      - `from` string, required: The start you asked for. A day comes back as you sent it; an instant comes back normalised to UTC whole seconds. On /history/daily it is always a day.
      - `to` string, required: The end, in the same form as from. Defaults to today (days) or now (instants).
    - `entities` HistoryParkEntityRaw[], required: One entry per entity with history, by name. Entities with no history are absent.
      - `id` string, required
      - `name` string, required
      - `entityType` string, required
      - `coverage` HistoryCoverage, required
        - `firstRecordedAt` string, date, nullable, required: First park-local day we hold anything for this entity, or null. Per-field detail: GET /v1/entity/{id}/history/coverage.
      - `opening` HistoryOpening, required: The `opening` object: the complete state at the start of the range, in the same shape as a row. A field is present only if the entity has it. An unknown value is its empty form (standby `{"waitTime": null}`, showtimes `[]`); an unknown status is null.
        - `time` string, date-time, required: Start of the range (UTC, whole seconds). The state below is effective from this instant.
        - `observedAt` string, date-time: When this state was last seen (UTC, whole seconds): the newest entry in `observedAtByKind`. Earlier than `time` means it was carried in from before the range, possibly from long ago; a ride whose feed stopped keeps its last values. Absent means we hold nothing for this entity from before the range, unless `degraded` is set.
        - `observedAtByKind` object: When each field of the opening was last seen (UTC, whole seconds), keyed by its path: `status`, `queue.STANDBY`, `showtimes` and so on. A wait that did not change for weeks is dated weeks back, so check a queue's own entry before treating it as current. Usually, but not always, the moment the value last changed.
        - `degraded` true: Present, and true, when we could not look far enough back for this response, so the opening may be missing a field we hold. Ask again in a minute for the full opening.
        - `degradedReason` 'timeout' | 'error' | 'capacity': Why the lookup was cut short: `timeout`, `error`, or `capacity` when it needed more reading than one request is allowed.
        - `status` string, nullable: Live status at the start of the range; null when unknown.
        - `queue` LiveQueue: The queues an entity has, each present only when the entity publishes it. STANDBY: the ordinary line. SINGLE_RIDER: a separate line for guests riding alone. RETURN_TIME: a free reservation for a later time window. PAID_RETURN_TIME: the same, paid for. BOARDING_GROUP: a virtual queue that calls groups by number. PAID_STANDBY: a paid line with its own wait.
          - `STANDBY` object
            - `waitTime` number, nullable: Current standby wait time in minutes
          - `SINGLE_RIDER` object
            - `waitTime` number, nullable, required: Current single rider wait time in minutes
          - `RETURN_TIME` object
            - `state` 'AVAILABLE' | 'TEMP_FULL' | 'FINISHED', required: State of return time availability
            - `returnStart` string, date-time, nullable, required: Start time of return window
            - `returnEnd` string, date-time, nullable, required: End time of return window
          - `PAID_RETURN_TIME` object
            - `state` 'AVAILABLE' | 'TEMP_FULL' | 'FINISHED', required: State of return time availability
            - `returnStart` string, date-time, nullable, required
            - `returnEnd` string, date-time, nullable, required
            - `price` PriceData, required
              - …
          - `BOARDING_GROUP` object
            - `allocationStatus` 'AVAILABLE' | 'PAUSED' | 'CLOSED', required: State of boarding group availability
            - `currentGroupStart` number, nullable, required: Current boarding group start number
            - `currentGroupEnd` number, nullable, required: Current boarding group end number
            - `nextAllocationTime` string, date-time, nullable, required: Next boarding group allocation time
            - `estimatedWait` number, nullable, required: Estimated wait time in minutes
          - `PAID_STANDBY` object
            - `waitTime` number, nullable, required: Current paid standby wait time in minutes
        - `showtimes` LiveShowTime[], nullable
          - `type` string, required: Type of show time entry
          - `startTime` string, date-time, nullable: Start time of the show
          - `endTime` string, date-time, nullable: End time of the show
      - `history` HistoryRow[], required: Ascending by time. Empty when nothing changed in the range.
        - `time` string, date-time, required: UTC instant (whole seconds) from which this state is effective, until the next row's time.
        - `changed` string[], required: Leaf paths that differ from the previous row (or from opening for the first row), e.g. queue.STANDBY.waitTime, status, showtimes.
        - `status` string, nullable
        - `queue` LiveQueue: The queues an entity has, each present only when the entity publishes it. STANDBY: the ordinary line. SINGLE_RIDER: a separate line for guests riding alone. RETURN_TIME: a free reservation for a later time window. PAID_RETURN_TIME: the same, paid for. BOARDING_GROUP: a virtual queue that calls groups by number. PAID_STANDBY: a paid line with its own wait.
          - `STANDBY` object
            - `waitTime` number, nullable: Current standby wait time in minutes
          - `SINGLE_RIDER` object
            - `waitTime` number, nullable, required: Current single rider wait time in minutes
          - `RETURN_TIME` object
            - `state` 'AVAILABLE' | 'TEMP_FULL' | 'FINISHED', required: State of return time availability
            - `returnStart` string, date-time, nullable, required: Start time of return window
            - `returnEnd` string, date-time, nullable, required: End time of return window
          - `PAID_RETURN_TIME` object
            - `state` 'AVAILABLE' | 'TEMP_FULL' | 'FINISHED', required: State of return time availability
            - `returnStart` string, date-time, nullable, required
            - `returnEnd` string, date-time, nullable, required
            - `price` PriceData, required
              - …
          - `BOARDING_GROUP` object
            - `allocationStatus` 'AVAILABLE' | 'PAUSED' | 'CLOSED', required: State of boarding group availability
            - `currentGroupStart` number, nullable, required: Current boarding group start number
            - `currentGroupEnd` number, nullable, required: Current boarding group end number
            - `nextAllocationTime` string, date-time, nullable, required: Next boarding group allocation time
            - `estimatedWait` number, nullable, required: Estimated wait time in minutes
          - `PAID_STANDBY` object
            - `waitTime` number, nullable, required: Current paid standby wait time in minutes
        - `showtimes` LiveShowTime[], nullable
          - `type` string, required: Type of show time entry
          - `startTime` string, date-time, nullable: Start time of the show
          - `endTime` string, date-time, nullable: End time of the show
    - `next` string, nullable, required: Always null: one day per call.

## Other responses

- `400`: Bad request
- `403`: Access forbidden
- `404`: Resource not found
- `429`: Too many requests
- `502`: Temporarily unavailable

## Changes

- **2026-09-27** `f12e25418ddc`: 3 breaking, 6 info
  - added `#/components/schemas/HistoryErrorRateLimited, #/components/schemas/RateLimited` to the response body `oneOf` list for the response status `429`
  - the response's body type changed from `object` to no type for status `429`
  - removed the required property `error` from the response with the `429` status
  - added the optional property `oneOf[#/components/schemas/HistoryEnvelope]/opening/degraded` to the response with the `200` status
  - …5 more
- **2026-09-19** `6d189f435571`: 40 breaking, 4 warning, 54 info
  - the response property `oneOf[#/components/schemas/HistoryEnvelope]/history/items/queue/BOARDING_GROUP/allocationStatus` became nullable for the status `200`
  - the response property `oneOf[#/components/schemas/HistoryEnvelope]/history/items/queue/PAID_RETURN_TIME/price` became nullable for the status `200`
  - the response property `oneOf[#/components/schemas/HistoryEnvelope]/history/items/queue/PAID_RETURN_TIME/state` became nullable for the status `200`
  - the response property `oneOf[#/components/schemas/HistoryEnvelope]/history/items/queue/RETURN_TIME/state` became nullable for the status `200`
  - …94 more
- …earlier changes not shown

[Operation history](https://skmtc.dev/themeparks/apis/v1-api/changes/v1/entity/:id/history/get.md)

---

[API](https://skmtc.dev/themeparks/apis/v1-api.md) - [All operations](https://skmtc.dev/themeparks/apis/v1-api/llms.txt) - [OpenAPI document](https://skmtc.dev/themeparks/apis/v1-api/revisions/a9f0cb93c745?raw)
