Showings & availability
Scheduled performances, published prices and seat observations.
Requests require an active organization grant and an API key or Clerk session. Results respect your granted scopes and markets. Access details →
GET/v1/showings
Showings.
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. |
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_…). |
movieIdquery · optional | string | Public canonical movie identifier (mov_…). |
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/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 →
GET/v1/showings/{id}
Showing.
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/showings/{id}" \
-H "Authorization: Bearer $BOX_OBSERVER_API_KEY"Response
200 application/json · Success shape within your granted access.
{
"data": {
"id": "shw_ZXhhbXBsZQ",
"releaseId": null,
"status": "scheduled",
"startsAt": "2026-09-04T12:00:00.000Z",
"localDate": "2026-09-04",
"timeZone": "Europe/Bucharest",
"venue": {
"id": "ven_ZXhhbXBsZQ",
"name": "example",
"programmingType": "mainstream",
"market": {
"id": "mkt_ZXhhbXBsZQ",
"name": "example",
"countryCode": "RO",
"timeZone": "Europe/Bucharest"
}
},
"auditorium": null,
"movie": {
"canonicalMovie": null,
"sourceTitle": "example",
"sourceOriginalTitle": null,
"identityStatus": "source"
},
"format": "2d",
"experiences": [],
"experienceSource": null,
"language": null,
"capacity": null,
"capacitySource": null,
"price": {
"status": "unavailable",
"amountMinor": null,
"currency": null,
"source": null,
"observedAt": null,
"lastConfirmedAt": null,
"options": []
},
"seatAvailability": null,
"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.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 |
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/showings/{id}/availability
Showing availability history.
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. |
curl "https://api.boxobserver.com/v1/showings/{id}/availability" \
-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 | null> |
data[].plannedAtRequired | stringFormat: date-time |
data[].scheduledStartAtRequired | 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 →