Contents

Endpoints

Showtimes

Operations about showtimes

Relative to https://uk-cinema-api.co.uk/api/v4.

Get showtimes

GET/showtimes

Get a paginated list of showtimes.

Parameters

page integer in query

Page offset to fetch.

Default: 1.

items integer in query

Number of items to return per page.

Default: 20.

cursor string in query

Use cursor pagination. Send an empty cursor for the first page. Then send meta.next_cursor from each response as cursor. When next_cursor is null, you have all the results.

Showtimes that are added or removed do not affect the cursor. But if the showing_at of a showtime changes, you can get that showtime two times or not at all.

With a cursor, meta has next_cursor and not page, and the API ignores the page parameter.

country string in query

Get results only for these countries: comma-separated ISO 3166-1 alpha-2 codes, for example IE or GB,IE. Without it, you get all the countries that your key includes. A country that your key does not include gives 403. A country that the API does not serve gives 400. GET /countries lists both.

cinema_id integer in query

Filter by a specific cinema.

film_id integer in query

Filter by a specific film: returns the showtimes whose film_ids include it.

tmdb_id integer in query

Filter by a film's TMDB ID: returns the showtimes whose film_ids include it.

imdb_id string in query

Filter by a film's IMDB ID: returns the showtimes whose film_ids include it.

from string in query

Get only the showtimes that start at or after this time. Use ISO 8601, for example 2027-11-10T18:00:00+00:00. If the value has no offset, the time is in the time zone of the cinema, as in showing_at. A date with no time is midnight.

to string in query

Get only the showtimes that start before this time (see from). to must be later than from.

latitude number in query

Latitude of the center of the search, in decimal degrees. Send it with longitude and radius_km. If you send one of these three parameters, you must send all three.

longitude number in query

Longitude of the center of the search, in decimal degrees (see latitude).

radius_km number in query

Get results only for cinemas in this distance from latitude and longitude, in kilometres. The distance is the great-circle distance to the cinema. The value must be more than 0 and not more than 100 (see latitude).

attributes string in query

Get only the showtimes that have all of these attributes: comma-separated IDs from GET /attributes, for example imax or imax,dolby-atmos. An unknown ID gives 400. A request that reads a country where your key has lite gives 403, because attribute codes are not included on that plan.

Response

200 Returns showtimes with pagination metadata. (ShowtimesResponse)

Errors: 400, 401, 403, 429, 500
  • 400 Bad request – e.g. an invalid cursor, a country the API does not serve, a filter that is not valid, or a query parameter that the endpoint does not have. The message names the parameter.
  • 401 Unauthorized – the request requires valid authentication.
  • 403 Forbidden – authentication succeeded but access is denied (e.g., expired subscription, or a country your key does not include).
  • 429 Too Many Requests – the limit is 5 requests per second for a Pro key. A key with Ultra in one or more countries has 20. A key with Lite in all its countries has 1, and 1000 requests each day. The day starts at 00:00 UTC. The limit is for the key, not for each country. The error message gives the limit that applied.
  • 500 Internal Server Error – something went wrong on our end.
Example response
{
  "meta": {
    "page": 1,
    "per_page": 20,
    "total_count": 156310
  },
  "data": [
    {
      "id": 24768133,
      "cinema_id": 495,
      "film_ids": [
        496804583
      ],
      "showing_at": "2026-03-08T20:40:00+00:00",
      "booking_link": "https://www.odeon.co.uk/ticketing/seat-picker/?showtimeId=155-12801",
      "film_page_link": null,
      "sold_out": false,
      "last_seen_at": "2026-03-08T06:05:00+00:00",
      "chain": "odeon_gb",
      "latitude": 51.5104,
      "longitude": -0.1293,
      "on_sale_from": "2025-12-11T02:04:41+00:00",
      "on_sale_from_verified": false,
      "auditorium": "2",
      "attribute_codes": [
        "imax"
      ],
      "screening_language": "eng",
      "subtitle_language": null,
      "country": "GB",
      "currency": "GBP"
    },
    {
      "id": 28324938,
      "cinema_id": 1231,
      "film_ids": [
        579248882
      ],
      "showing_at": "2026-08-20T20:00:00+01:00",
      "booking_link": null,
      "film_page_link": "https://lyntoncinema.co.uk/movie/details/69a99274a0b75565827e2f43",
      "sold_out": false,
      "last_seen_at": "2026-08-20T07:42:00+01:00",
      "chain": "lynton_cinema",
      "latitude": 51.230407,
      "longitude": -3.83687,
      "on_sale_from": "2026-08-19T22:07:26+01:00",
      "on_sale_from_verified": false,
      "auditorium": null,
      "attribute_codes": [],
      "screening_language": "eng",
      "subtitle_language": null,
      "country": "GB",
      "currency": "GBP"
    }
  ]
}
Show all 57 lines

Get showtime

GET/showtimes/{id}

Return a showtime.

Parameters

id integer in path required

Showtime ID.

country string in query

Get results only for these countries: comma-separated ISO 3166-1 alpha-2 codes, for example IE or GB,IE. Without it, you get all the countries that your key includes. A country that your key does not include gives 403. A country that the API does not serve gives 400. GET /countries lists both.

Response

200 Returns a showtime. (Showtime)

Errors: 400, 401, 403, 404, 429, 500
  • 400 Bad request – e.g. an invalid cursor, a country the API does not serve, a filter that is not valid, or a query parameter that the endpoint does not have. The message names the parameter.
  • 401 Unauthorized – the request requires valid authentication.
  • 403 Forbidden – authentication succeeded but access is denied (e.g., expired subscription, or a country your key does not include).
  • 404 Not found
  • 429 Too Many Requests – the limit is 5 requests per second for a Pro key. A key with Ultra in one or more countries has 20. A key with Lite in all its countries has 1, and 1000 requests each day. The day starts at 00:00 UTC. The limit is for the key, not for each country. The error message gives the limit that applied.
  • 500 Internal Server Error – something went wrong on our end.
Example response
{
  "id": 24768133,
  "cinema_id": 495,
  "film_ids": [
    496804583
  ],
  "showing_at": "2026-03-08T20:40:00+00:00",
  "booking_link": "https://www.odeon.co.uk/ticketing/seat-picker/?showtimeId=155-12801",
  "film_page_link": null,
  "sold_out": false,
  "last_seen_at": "2026-03-08T06:05:00+00:00",
  "chain": "odeon_gb",
  "latitude": 51.5104,
  "longitude": -0.1293,
  "on_sale_from": "2025-12-11T02:04:41+00:00",
  "on_sale_from_verified": false,
  "auditorium": "2",
  "attribute_codes": [
    "imax"
  ],
  "screening_language": "eng",
  "subtitle_language": null,
  "country": "GB",
  "currency": "GBP",
  "price_from_amount": 1049,
  "prices_observed_at": "2026-03-08T04:12:31+00:00",
  "ticket_prices": [
    {
      "name": "Adult",
      "category": "adult",
      "amount": 1349,
      "booking_fee": 95,
      "seat_area": null
    },
    {
      "name": "Child",
      "category": "child",
      "amount": 1049,
      "booking_fee": 95,
      "seat_area": null
    }
  ],
  "fee_basis": "itemised"
}
Show all 44 lines

Get showtime by chain and external ID

GET/showtimes/{chain}/external/{external_id}

Get a showtime by cinema chain and the chain's native external ID.

Parameters

chain ChainEnum in path required

The cinema chain identifier.

external_id string in path required

The cinema chain's native showtime identifier.

country string in query

Get results only for these countries: comma-separated ISO 3166-1 alpha-2 codes, for example IE or GB,IE. Without it, you get all the countries that your key includes. A country that your key does not include gives 403. A country that the API does not serve gives 400. GET /countries lists both.

Response

200 Returns a showtime matching the external ID. (Showtime)

Errors: 400, 401, 403, 404, 429, 500
  • 400 Bad request – e.g. an invalid cursor, a country the API does not serve, a filter that is not valid, or a query parameter that the endpoint does not have. The message names the parameter.
  • 401 Unauthorized – the request requires valid authentication.
  • 403 Forbidden – authentication succeeded but access is denied (e.g., expired subscription, or a country your key does not include).
  • 404 Not found
  • 429 Too Many Requests – the limit is 5 requests per second for a Pro key. A key with Ultra in one or more countries has 20. A key with Lite in all its countries has 1, and 1000 requests each day. The day starts at 00:00 UTC. The limit is for the key, not for each country. The error message gives the limit that applied.
  • 500 Internal Server Error – something went wrong on our end.
Example response
{
  "id": 24768133,
  "cinema_id": 495,
  "film_ids": [
    496804583
  ],
  "showing_at": "2026-03-08T20:40:00+00:00",
  "booking_link": "https://www.odeon.co.uk/ticketing/seat-picker/?showtimeId=155-12801",
  "film_page_link": null,
  "sold_out": false,
  "last_seen_at": "2026-03-08T06:05:00+00:00",
  "chain": "odeon_gb",
  "latitude": 51.5104,
  "longitude": -0.1293,
  "on_sale_from": "2025-12-11T02:04:41+00:00",
  "on_sale_from_verified": false,
  "auditorium": "2",
  "attribute_codes": [
    "imax"
  ],
  "screening_language": "eng",
  "subtitle_language": null,
  "country": "GB",
  "currency": "GBP",
  "price_from_amount": 1049,
  "prices_observed_at": "2026-03-08T04:12:31+00:00",
  "ticket_prices": [
    {
      "name": "Adult",
      "category": "adult",
      "amount": 1349,
      "booking_fee": 95,
      "seat_area": null
    },
    {
      "name": "Child",
      "category": "child",
      "amount": 1049,
      "booking_fee": 95,
      "seat_area": null
    }
  ],
  "fee_basis": "itemised"
}
Show all 44 lines