Showings & availability

Scheduled performances, published prices and seat observations.

Production · organization access required

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

NameTypeDetails
limitquery · optionalintegerDefault: 50 · Minimum: 1 · Maximum: 100
cursorquery · optionalstringOpaque cursor from the previous response. Preserve the same filters.
scopequery · optionalstringDefaults 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 · optionalstringPublic country Release identifier (crl_…).
venueIdquery · optionalstringPublic venue identifier (ven_…).
movieIdquery · optionalstringPublic canonical movie identifier (mov_…).
operatorIdquery · optionalstringPublic operator identifier (opr_…).
marketIdquery · optionalstringPublic market identifier (mkt_…).
countryCodequery · optionalstringOptional two-letter country filter. This narrows results; it does not grant access.Pattern: ^[A-Za-z]{2}$
localDatequery · optionalstringCinema-local calendar date, YYYY-MM-DD. Cannot be combined with timestamp bounds.
startsFromquery · optionalstringInclusive start timestamp. ISO 8601; offsets are normalized to UTC.
startsBeforequery · optionalstringExclusive end timestamp. The schedule window is limited to 31 days.
Shell · authenticated request
curl "https://api.boxobserver.com/v1/showings" \
  -H "Authorization: Bearer $BOX_OBSERVER_API_KEY"

Response

200 application/json · Success shape within your granted access.

Illustrative response shape · not live data
{
  "data": [],
  "page": {
    "nextCursor": null,
    "hasMore": false
  },
  "meta": {
    "requestId": "example-request-id",
    "generatedAt": "2026-09-04T12:00:00.000Z"
  }
}
Response fields
FieldType and constraints
dataRequiredarray<object>
data[].idRequiredstringPattern: ^(mkt|opr|ven|aud|mov|shw|dst|rel|crl|pof)_[A-Za-z0-9_-]+$
data[].releaseIdRequiredstring | nullPattern: ^(mkt|opr|ven|aud|mov|shw|dst|rel|crl|pof)_[A-Za-z0-9_-]+$
data[].statusRequiredstringValues: scheduled, unlisted, cancelled
data[].startsAtRequiredstringFormat: date-time
data[].localDateRequiredstringFormat: date
data[].timeZoneRequiredstring
data[].venueRequiredobject
data[].venue.idRequiredstringPattern: ^(mkt|opr|ven|aud|mov|shw|dst|rel|crl|pof)_[A-Za-z0-9_-]+$
data[].venue.nameRequiredstring
data[].venue.programmingTypeRequiredstringValues: mainstream, mixed, specialist
data[].venue.marketRequiredobject
data[].venue.market.idRequiredstringPattern: ^(mkt|opr|ven|aud|mov|shw|dst|rel|crl|pof)_[A-Za-z0-9_-]+$
data[].venue.market.nameRequiredstring
data[].venue.market.countryCodeRequiredstring
data[].venue.market.timeZoneRequiredstring
data[].auditoriumRequiredobject | null
data[].auditorium.idRequiredstringPattern: ^(mkt|opr|ven|aud|mov|shw|dst|rel|crl|pof)_[A-Za-z0-9_-]+$
data[].auditorium.nameRequiredstring
data[].auditorium.capacityRequiredinteger | nullMinimum: 0
data[].auditorium.experiencesRequiredarray<string> | null
data[].movieRequiredobject
data[].movie.canonicalMovieRequiredobject | null
data[].movie.canonicalMovie.idRequiredstringPattern: ^(mkt|opr|ven|aud|mov|shw|dst|rel|crl|pof)_[A-Za-z0-9_-]+$
data[].movie.canonicalMovie.titleRequiredstring
data[].movie.canonicalMovie.originalTitleRequiredstring | null
data[].movie.canonicalMovie.releaseYearRequiredinteger | null
data[].movie.canonicalMovie.runtimeMinutesRequiredinteger | nullMinimum: 0
data[].movie.sourceTitleRequiredstring
data[].movie.sourceOriginalTitleRequiredstring | null
data[].movie.identityStatusRequiredstringValues: canonical, source
data[].formatRequiredstringValues: 2d, 3d
data[].experiencesRequiredarray<string>
data[].experienceSourceRequiredstring | nullValues: showing, auditorium,
data[].languageRequiredstring | null
data[].capacityRequiredinteger | nullMinimum: 0
data[].capacitySourceRequiredstring | nullValues: showing, observation, auditorium,
data[].priceRequiredobject
data[].price.statusRequiredstringValues: exact, derived, unavailable
data[].price.amountMinorRequiredinteger | nullMinimum: 0
data[].price.currencyRequiredstring | null
data[].price.sourceRequiredstring | nullValues: providerSchedule, providerBooking, officialTariff, legacyUnknown,
data[].price.observedAtRequiredstring | nullFormat: date-time
data[].price.lastConfirmedAtRequiredstring | nullFormat: date-time
data[].price.optionsOptionalarray<object>Default: []
data[].price.options[].offerKeyRequiredstringPattern: ^(mkt|opr|ven|aud|mov|shw|dst|rel|crl|pof)_[A-Za-z0-9_-]+$
data[].price.options[].labelRequiredstring
data[].price.options[].amountMinorRequiredintegerMinimum: 0
data[].price.options[].currencyRequiredstring
data[].price.options[].admissionsIncludedRequiredintegerMinimum: 0
data[].seatAvailabilityRequiredobject | null
data[].seatAvailability.statusRequiredstringValues: exact, derived, unavailable
data[].seatAvailability.observedAtRequiredstringFormat: date-time
data[].seatAvailability.checkpointRequiredstring
data[].seatAvailability.capacityRequiredinteger | nullMinimum: 0
data[].seatAvailability.availableSeatsRequiredinteger | nullMinimum: 0
data[].seatAvailability.occupiedEstimateRequiredinteger | nullMinimum: 0
data[].seatAvailability.occupancyRatioRequirednumber | nullMinimum: 0 · Maximum: 1
data[].updatedAtRequiredstringFormat: date-time
pageRequiredobject
page.nextCursorRequiredstring | null
page.hasMoreRequiredboolean
metaRequiredobject
meta.requestIdRequiredstring
meta.generatedAtRequiredstringFormat: 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

NameTypeDetails
idpath · requiredstringPublic resource identifier returned by the API.
Shell · authenticated request
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.

Illustrative response shape · not live data
{
  "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
FieldType and constraints
dataRequiredobject
data.idRequiredstringPattern: ^(mkt|opr|ven|aud|mov|shw|dst|rel|crl|pof)_[A-Za-z0-9_-]+$
data.releaseIdRequiredstring | nullPattern: ^(mkt|opr|ven|aud|mov|shw|dst|rel|crl|pof)_[A-Za-z0-9_-]+$
data.statusRequiredstringValues: scheduled, unlisted, cancelled
data.startsAtRequiredstringFormat: date-time
data.localDateRequiredstringFormat: date
data.timeZoneRequiredstring
data.venueRequiredobject
data.venue.idRequiredstringPattern: ^(mkt|opr|ven|aud|mov|shw|dst|rel|crl|pof)_[A-Za-z0-9_-]+$
data.venue.nameRequiredstring
data.venue.programmingTypeRequiredstringValues: mainstream, mixed, specialist
data.venue.marketRequiredobject
data.venue.market.idRequiredstringPattern: ^(mkt|opr|ven|aud|mov|shw|dst|rel|crl|pof)_[A-Za-z0-9_-]+$
data.venue.market.nameRequiredstring
data.venue.market.countryCodeRequiredstring
data.venue.market.timeZoneRequiredstring
data.auditoriumRequiredobject | null
data.auditorium.idRequiredstringPattern: ^(mkt|opr|ven|aud|mov|shw|dst|rel|crl|pof)_[A-Za-z0-9_-]+$
data.auditorium.nameRequiredstring
data.auditorium.capacityRequiredinteger | nullMinimum: 0
data.auditorium.experiencesRequiredarray<string> | null
data.movieRequiredobject
data.movie.canonicalMovieRequiredobject | null
data.movie.canonicalMovie.idRequiredstringPattern: ^(mkt|opr|ven|aud|mov|shw|dst|rel|crl|pof)_[A-Za-z0-9_-]+$
data.movie.canonicalMovie.titleRequiredstring
data.movie.canonicalMovie.originalTitleRequiredstring | null
data.movie.canonicalMovie.releaseYearRequiredinteger | null
data.movie.canonicalMovie.runtimeMinutesRequiredinteger | nullMinimum: 0
data.movie.sourceTitleRequiredstring
data.movie.sourceOriginalTitleRequiredstring | null
data.movie.identityStatusRequiredstringValues: canonical, source
data.formatRequiredstringValues: 2d, 3d
data.experiencesRequiredarray<string>
data.experienceSourceRequiredstring | nullValues: showing, auditorium,
data.languageRequiredstring | null
data.capacityRequiredinteger | nullMinimum: 0
data.capacitySourceRequiredstring | nullValues: showing, observation, auditorium,
data.priceRequiredobject
data.price.statusRequiredstringValues: exact, derived, unavailable
data.price.amountMinorRequiredinteger | nullMinimum: 0
data.price.currencyRequiredstring | null
data.price.sourceRequiredstring | nullValues: providerSchedule, providerBooking, officialTariff, legacyUnknown,
data.price.observedAtRequiredstring | nullFormat: date-time
data.price.lastConfirmedAtRequiredstring | nullFormat: date-time
data.price.optionsOptionalarray<object>Default: []
data.price.options[].offerKeyRequiredstringPattern: ^(mkt|opr|ven|aud|mov|shw|dst|rel|crl|pof)_[A-Za-z0-9_-]+$
data.price.options[].labelRequiredstring
data.price.options[].amountMinorRequiredintegerMinimum: 0
data.price.options[].currencyRequiredstring
data.price.options[].admissionsIncludedRequiredintegerMinimum: 0
data.seatAvailabilityRequiredobject | null
data.seatAvailability.statusRequiredstringValues: exact, derived, unavailable
data.seatAvailability.observedAtRequiredstringFormat: date-time
data.seatAvailability.checkpointRequiredstring
data.seatAvailability.capacityRequiredinteger | nullMinimum: 0
data.seatAvailability.availableSeatsRequiredinteger | nullMinimum: 0
data.seatAvailability.occupiedEstimateRequiredinteger | nullMinimum: 0
data.seatAvailability.occupancyRatioRequirednumber | nullMinimum: 0 · Maximum: 1
data.updatedAtRequiredstringFormat: date-time
metaRequiredobject
meta.requestIdRequiredstring
meta.generatedAtRequiredstringFormat: 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

NameTypeDetails
idpath · requiredstringPublic resource identifier returned by the API.
limitquery · optionalintegerDefault: 50 · Minimum: 1 · Maximum: 100
cursorquery · optionalstringOpaque cursor from the previous response. Preserve the same filters.
Shell · authenticated request
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.

Illustrative response shape · not live data
{
  "data": [],
  "page": {
    "nextCursor": null,
    "hasMore": false
  },
  "meta": {
    "requestId": "example-request-id",
    "generatedAt": "2026-09-04T12:00:00.000Z"
  }
}
Response fields
FieldType and constraints
dataRequiredarray<object | null>
data[].plannedAtRequiredstringFormat: date-time
data[].scheduledStartAtRequiredstringFormat: date-time
pageRequiredobject
page.nextCursorRequiredstring | null
page.hasMoreRequiredboolean
metaRequiredobject
meta.requestIdRequiredstring
meta.generatedAtRequiredstringFormat: date-time

Errors: 400, 401, 403, 429, 500, 503. Response format and retry guidance →