Movies
Canonical film identities and their published showings.
Requests require an active organization grant and an API key or Clerk session. Results respect your granted scopes and markets. Access details →
GET/v1/movies
Canonical movies.
Parameters
| Name | Type | Details |
|---|---|---|
limitquery · optional | integer | Default: 50 · Minimum: 1 · Maximum: 100 |
cursorquery · optional | string | Opaque cursor from the previous response. Preserve the same filters. |
queryquery · optional | string | Case-insensitive substring of the title or original title. |
releaseYearquery · optional | integer | Filter by the original release year. |
curl "https://api.boxobserver.com/v1/movies" \
-H "Authorization: Bearer $BOX_OBSERVER_API_KEY"Response
200 application/json · Success shape within your granted access.
{
"data": [],
"page": {
"nextCursor": null,
"hasMore": false
},
"meta": {
"requestId": "example-request-id",
"generatedAt": "2026-09-04T12:00:00.000Z"
}
}Response fields
| Field | Type and constraints |
|---|---|
dataRequired | array<object> |
data[].idRequired | stringPattern: ^(mkt|opr|ven|aud|mov|shw|dst|rel|crl|pof)_[A-Za-z0-9_-]+$ |
data[].titleRequired | string |
data[].originalTitleRequired | string | null |
data[].releaseYearRequired | integer | null |
data[].runtimeMinutesRequired | integer | nullMinimum: 0 |
data[].externalIdsRequired | object |
data[].updatedAtRequired | stringFormat: date-time |
pageRequired | object |
page.nextCursorRequired | string | null |
page.hasMoreRequired | boolean |
metaRequired | object |
meta.requestIdRequired | string |
meta.generatedAtRequired | stringFormat: date-time |
Errors: 400, 401, 403, 429, 500, 503. Response format and retry guidance →
GET/v1/movies/{id}
Canonical movie.
Replace {id} with the appropriate public identifier returned by the API.
Parameters
| Name | Type | Details |
|---|---|---|
idpath · required | string | Public resource identifier returned by the API. |
curl "https://api.boxobserver.com/v1/movies/{id}" \
-H "Authorization: Bearer $BOX_OBSERVER_API_KEY"Response
200 application/json · Success shape within your granted access.
{
"data": {
"id": "mov_ZXhhbXBsZQ",
"title": "example",
"originalTitle": null,
"releaseYear": null,
"runtimeMinutes": null,
"externalIds": {},
"updatedAt": "2026-09-04T12:00:00.000Z"
},
"meta": {
"requestId": "example-request-id",
"generatedAt": "2026-09-04T12:00:00.000Z"
}
}Response fields
| Field | Type and constraints |
|---|---|
dataRequired | object |
data.idRequired | stringPattern: ^(mkt|opr|ven|aud|mov|shw|dst|rel|crl|pof)_[A-Za-z0-9_-]+$ |
data.titleRequired | string |
data.originalTitleRequired | string | null |
data.releaseYearRequired | integer | null |
data.runtimeMinutesRequired | integer | nullMinimum: 0 |
data.externalIdsRequired | object |
data.updatedAtRequired | stringFormat: date-time |
metaRequired | object |
meta.requestIdRequired | string |
meta.generatedAtRequired | stringFormat: date-time |
Errors: 400, 401, 403, 404, 429, 500, 503. Response format and retry guidance →
GET/v1/movies/{id}/showings
Movie showings.
Replace {id} with the appropriate public identifier returned by the API.
Parameters
| Name | Type | Details |
|---|---|---|
idpath · required | string | Public resource identifier returned by the API. |
limitquery · optional | integer | Default: 50 · Minimum: 1 · Maximum: 100 |
cursorquery · optional | string | Opaque cursor from the previous response. Preserve the same filters. |
scopequery · optional | string | Defaults to current (D1-owned). Archived selects published history; all explicitly combines both. Ownership is independent of Showing or premiere dates. Archived/all requires history:read.Values: current, archived, all |
releaseIdquery · optional | string | Public country Release identifier (crl_…). |
venueIdquery · optional | string | Public venue identifier (ven_…). |
operatorIdquery · optional | string | Public operator identifier (opr_…). |
marketIdquery · optional | string | Public market identifier (mkt_…). |
countryCodequery · optional | string | Optional two-letter country filter. This narrows results; it does not grant access.Pattern: ^[A-Za-z]{2}$ |
localDatequery · optional | string | Cinema-local calendar date, YYYY-MM-DD. Cannot be combined with timestamp bounds. |
startsFromquery · optional | string | Inclusive start timestamp. ISO 8601; offsets are normalized to UTC. |
startsBeforequery · optional | string | Exclusive end timestamp. The schedule window is limited to 31 days. |
curl "https://api.boxobserver.com/v1/movies/{id}/showings" \
-H "Authorization: Bearer $BOX_OBSERVER_API_KEY"Response
200 application/json · Success shape within your granted access.
{
"data": [],
"page": {
"nextCursor": null,
"hasMore": false
},
"meta": {
"requestId": "example-request-id",
"generatedAt": "2026-09-04T12:00:00.000Z"
}
}Response fields
| Field | Type and constraints |
|---|---|
dataRequired | array<object> |
data[].idRequired | stringPattern: ^(mkt|opr|ven|aud|mov|shw|dst|rel|crl|pof)_[A-Za-z0-9_-]+$ |
data[].releaseIdRequired | string | nullPattern: ^(mkt|opr|ven|aud|mov|shw|dst|rel|crl|pof)_[A-Za-z0-9_-]+$ |
data[].statusRequired | stringValues: scheduled, unlisted, cancelled |
data[].startsAtRequired | stringFormat: date-time |
data[].localDateRequired | stringFormat: date |
data[].timeZoneRequired | string |
data[].venueRequired | object |
data[].venue.idRequired | stringPattern: ^(mkt|opr|ven|aud|mov|shw|dst|rel|crl|pof)_[A-Za-z0-9_-]+$ |
data[].venue.nameRequired | string |
data[].venue.programmingTypeRequired | stringValues: mainstream, mixed, specialist |
data[].venue.marketRequired | object |
data[].venue.market.idRequired | stringPattern: ^(mkt|opr|ven|aud|mov|shw|dst|rel|crl|pof)_[A-Za-z0-9_-]+$ |
data[].venue.market.nameRequired | string |
data[].venue.market.countryCodeRequired | string |
data[].venue.market.timeZoneRequired | string |
data[].auditoriumRequired | object | null |
data[].auditorium.idRequired | stringPattern: ^(mkt|opr|ven|aud|mov|shw|dst|rel|crl|pof)_[A-Za-z0-9_-]+$ |
data[].auditorium.nameRequired | string |
data[].auditorium.capacityRequired | integer | nullMinimum: 0 |
data[].auditorium.experiencesRequired | array<string> | null |
data[].movieRequired | object |
data[].movie.canonicalMovieRequired | object | null |
data[].movie.canonicalMovie.idRequired | stringPattern: ^(mkt|opr|ven|aud|mov|shw|dst|rel|crl|pof)_[A-Za-z0-9_-]+$ |
data[].movie.canonicalMovie.titleRequired | string |
data[].movie.canonicalMovie.originalTitleRequired | string | null |
data[].movie.canonicalMovie.releaseYearRequired | integer | null |
data[].movie.canonicalMovie.runtimeMinutesRequired | integer | nullMinimum: 0 |
data[].movie.sourceTitleRequired | string |
data[].movie.sourceOriginalTitleRequired | string | null |
data[].movie.identityStatusRequired | stringValues: canonical, source |
data[].formatRequired | stringValues: 2d, 3d |
data[].experiencesRequired | array<string> |
data[].experienceSourceRequired | string | nullValues: showing, auditorium, |
data[].languageRequired | string | null |
data[].capacityRequired | integer | nullMinimum: 0 |
data[].capacitySourceRequired | string | nullValues: showing, observation, auditorium, |
data[].priceRequired | object |
data[].price.statusRequired | stringValues: exact, derived, unavailable |
data[].price.amountMinorRequired | integer | nullMinimum: 0 |
data[].price.currencyRequired | string | null |
data[].price.sourceRequired | string | nullValues: providerSchedule, providerBooking, officialTariff, legacyUnknown, |
data[].price.observedAtRequired | string | nullFormat: date-time |
data[].price.lastConfirmedAtRequired | string | nullFormat: date-time |
data[].price.optionsOptional | array<object>Default: [] |
data[].price.options[].offerKeyRequired | stringPattern: ^(mkt|opr|ven|aud|mov|shw|dst|rel|crl|pof)_[A-Za-z0-9_-]+$ |
data[].price.options[].labelRequired | string |
data[].price.options[].amountMinorRequired | integerMinimum: 0 |
data[].price.options[].currencyRequired | string |
data[].price.options[].admissionsIncludedRequired | integerMinimum: 0 |
data[].seatAvailabilityRequired | object | null |
data[].seatAvailability.statusRequired | stringValues: exact, derived, unavailable |
data[].seatAvailability.observedAtRequired | stringFormat: date-time |
data[].seatAvailability.checkpointRequired | string |
data[].seatAvailability.capacityRequired | integer | nullMinimum: 0 |
data[].seatAvailability.availableSeatsRequired | integer | nullMinimum: 0 |
data[].seatAvailability.occupiedEstimateRequired | integer | nullMinimum: 0 |
data[].seatAvailability.occupancyRatioRequired | number | nullMinimum: 0 · Maximum: 1 |
data[].updatedAtRequired | stringFormat: date-time |
pageRequired | object |
page.nextCursorRequired | string | null |
page.hasMoreRequired | boolean |
metaRequired | object |
meta.requestIdRequired | string |
meta.generatedAtRequired | stringFormat: date-time |
Errors: 400, 401, 403, 429, 500, 503. Response format and retry guidance →