Releases

Stable country runs, current/archive scope, and calendar announcements.

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/market-releases

Theatrical market releases.

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
countryCodequery · optionalstringOptional two-letter country filter. This narrows results; it does not grant access.Pattern: ^[A-Za-z]{2}$
distributorIdquery · optionalstringPublic distributor identifier (dst_…).
releasesFromquery · optionalstringInclusive local release date, YYYY-MM-DD.
releasesBeforequery · optionalstringExclusive local release date, YYYY-MM-DD.
Shell · authenticated request
curl "https://api.boxobserver.com/v1/market-releases" \
  -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[].movieIdRequiredstring | nullPattern: ^(mkt|opr|ven|aud|mov|shw|dst|rel|crl|pof)_[A-Za-z0-9_-]+$
data[].countryCodeRequiredstring
data[].localTitleRequiredstring
data[].releaseDateRequiredstring | nullFormat: date
data[].distributorIdsRequiredarray<string>
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/market-releases/{id}

Theatrical market release.

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/market-releases/{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": "rel_ZXhhbXBsZQ",
    "movieId": null,
    "countryCode": "RO",
    "localTitle": "example",
    "releaseDate": null,
    "distributorIds": []
  },
  "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.movieIdRequiredstring | nullPattern: ^(mkt|opr|ven|aud|mov|shw|dst|rel|crl|pof)_[A-Za-z0-9_-]+$
data.countryCodeRequiredstring
data.localTitleRequiredstring
data.releaseDateRequiredstring | nullFormat: date
data.distributorIdsRequiredarray<string>
metaRequiredobject
meta.requestIdRequiredstring
meta.generatedAtRequiredstringFormat: date-time

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

GET/v1/releases

Country Releases with explicit ownership scope.

Parameters

NameTypeDetails
limitquery · optionalintegerDefault: 50 · Minimum: 1 · Maximum: 100
cursorquery · optionalstringOpaque cursor from the previous response. Preserve the same filters.
countryCodequery · optionalstringOptional two-letter country filter. This narrows results; it does not grant access.Pattern: ^[A-Za-z]{2}$
movieIdquery · optionalstringPublic canonical movie identifier (mov_…).
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
Shell · authenticated request
curl "https://api.boxobserver.com/v1/releases" \
  -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[].movieIdRequiredstring | nullPattern: ^(mkt|opr|ven|aud|mov|shw|dst|rel|crl|pof)_[A-Za-z0-9_-]+$
data[].countryCodeRequiredstring
data[].scopeRequiredstringValues: current, archived
data[].createdAtRequiredstringFormat: 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/releases/{id}

Stable country Release; its URL survives archival.

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/releases/{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": "crl_ZXhhbXBsZQ",
    "movieId": null,
    "countryCode": "RO",
    "scope": "current",
    "createdAt": "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.movieIdRequiredstring | nullPattern: ^(mkt|opr|ven|aud|mov|shw|dst|rel|crl|pof)_[A-Za-z0-9_-]+$
data.countryCodeRequiredstring
data.scopeRequiredstringValues: current, archived
data.createdAtRequiredstringFormat: date-time
metaRequiredobject
meta.requestIdRequiredstring
meta.generatedAtRequiredstringFormat: date-time

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

GET/v1/releases/{id}/showings

Showings of one Release, automatically read from its authoritative owner.

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.
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/releases/{id}/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, 404, 429, 500, 503. Response format and retry guidance →