Cinema showtimes API for Australia

Session times of about 120 Australian cinemas as JSON (Hoyts, Event Cinemas, Palace): around a location, by city, by film, with booking links and local times for every state.

4 min read

On this page
  1. What the API covers in Australia
  2. 1.Get an API key
  3. 2.Cinemas and sessions near a location
  4. 3.Time zones
  5. 4.Every session of a film
  6. 5.One cinema's week
  7. 6.Postcodes and states
  8. 7.A JSON body for complex searches
  9. 8.Large volumes
  10. Frequently asked questions

Australian session times live on each chain's website and ticketing system, and none of them offers an open API. API Cinéma gathers the sessions of Australian cinemas into one JSON API, with the same format for a 20-screen Hoyts multiplex and a two-screen Palace arthouse.

This guide shows how to get Australian session times: around a location, by city, by film and by cinema.

What the API covers in Australia

  • About 120 cinemas in every state and territory: Hoyts (about 50), Event Cinemas (about 50, Greater Union and BCC included) and Palace (about 20). Coverage starts with these three chains and grows.
  • Every session with its local start time, its format (2D, 3D, IMAX, 4DX), its version (VO for the original version, VOST for subtitled or open-caption screenings) and a booking link to the chain's own ticketing (hoyts.com.au, eventcinemas.com.au, buy.palacecinemas.com.au).
  • Every film with a clean title, running time, synopsis, genres and poster, matched to TMDB (tmdbId).
  • Every cinema with its address, state (region: NSW, VIC, QLD, SA, WA, ACT, TAS, NT), 4-digit postcode, coordinates and time zone.

Each cinema is read again every day.

Get an API key

Create a free account, confirm your e-mail address, then create a key from the dashboard. The free plan gives 150 requests a week for trials and non-commercial projects; paid plans start at €12 a month for 10,000 a week.

Send the key in the Authorization header, from your server only:

Terminal
curl "https://api.api-cinema.com/v1/cinemas?country=AU&city=Brisbane" -H "Authorization: Bearer ac_live_…"

Cinemas and sessions near a location

Most apps start from the user's position. near takes a latitude and a longitude, radius_km a radius in kilometres (10 by default). Cinemas within 5 km of the Sydney CBD, nearest first:

Terminal
curl "https://api.api-cinema.com/v1/cinemas?country=AU&near=-33.8688,151.2093&radius_km=5" -H "Authorization: Bearer ac_live_…"
JSON
{
  "data": [
    { "id": "evt_15", "slug": "event-cinemas-george-street-sydney-nsw", "name": "Event Cinemas George Street", "address": "505-525 George Street", "city": "Sydney", "region": "NSW", "postalCode": "2000", "timezone": "Australia/Sydney", "distanceKm": 0.46 },
    { "id": "pal_200", "slug": "palace-central-cinema-sydney-chippendale-nsw", "name": "Palace Central Cinema Sydney", "address": "Central Park Mall", "city": "Chippendale", "region": "NSW", "timezone": "Australia/Sydney", "distanceKm": 1.52 }
  ],
  "meta": { "limit": 50, "offset": 0, "total": 6 }
}

The same parameters on /v1/showtimes answer "what's on near me". Melbourne, 10 km around the CBD:

Terminal
curl "https://api.api-cinema.com/v1/showtimes?country=AU&near=-37.8136,144.9631&radius_km=10&limit=200" -H "Authorization: Bearer ac_live_…"

Prefer near to city for the big metros: city is an exact match on the suburb, so "Sydney" leaves out Bondi Junction and "Melbourne" leaves out Coburg. city=Brisbane works when the cinema is filed under the city itself.

Time zones

Australia spans five time zones, and every time in the API is the cinema's own wall-clock time: "startsAt": "2026-11-06T19:30:00" at a Perth cinema means 7:30 pm in Perth. Display it as it is. The cinema's timezone (Australia/Sydney, Australia/Brisbane, Australia/Adelaide, Australia/Darwin or Australia/Perth) is there when you need to compare with the user's clock, and it carries daylight saving: New South Wales, Victoria, the ACT, Tasmania and South Australia move their clocks from October to April, Queensland, the Northern Territory and Western Australia do not.

Filters on dates follow the same rule: date=2026-11-06 is the whole of 6 November in each cinema's local time, and without date or from the search starts from "now" in each cinema's time zone.

Every session of a film

Find the film among those now showing in Australia, then filter by TMDB id to get it in every cinema, whatever title each chain publishes:

Terminal
curl "https://api.api-cinema.com/v1/movies?q=odyssey&playing=true&country=AU" -H "Authorization: Bearer ac_live_…"
curl "https://api.api-cinema.com/v1/showtimes?country=AU&tmdb_id=1368337&near=-27.4698,153.0251&radius_km=15" -H "Authorization: Bearer ac_live_…"

To list the films now showing in Australia, use GET /v1/movies?country=AU&playing=true.

One cinema's week

Find the cinema by name, then read its sessions for the week. The path accepts the cinema's id or its slug:

Terminal
curl "https://api.api-cinema.com/v1/cinemas?country=AU&q=hoyts%20melbourne" -H "Authorization: Bearer ac_live_…"
curl "https://api.api-cinema.com/v1/cinemas/hoyts_mcecin/showtimes?from=2026-11-06&to=2026-11-12&include=movie" -H "Authorization: Bearer ac_live_…"

include=movie embeds only the film: the cinema is the same on every row, so leaving it out makes the answer lighter.

Postcodes and states

zip_code keeps the cinemas whose postcode starts with the given digits: zip_code=2000 for the Sydney CBD, zip_code=3 for the whole of Victoria. The region field holds the state code, handy to group a national listing by state:

Terminal
curl "https://api.api-cinema.com/v1/cinemas?country=AU&zip_code=2000" -H "Authorization: Bearer ac_live_…"

A JSON body for complex searches

Every search also exists as POST …/search with a JSON body, easier to build from code. Tonight's IMAX sessions within 10 km of the Sydney CBD:

JavaScript
const res = await fetch('https://api.api-cinema.com/v1/showtimes/search', {
  method: 'POST',
  headers: { 'Authorization': `Bearer ${process.env.API_CINEMA_KEY}`, 'Content-Type': 'application/json' },
  body: JSON.stringify({
    country: 'AU',
    near: { lat: -33.8688, lng: 151.2093, radiusKm: 10 },
    from: '2026-11-06T18:00',
    to: '2026-11-06T23:59',
    limit: 200,
  }),
})
const { data } = await res.json()
for (const s of data.filter(s => s.format === 'IMAX'))
  console.log(s.startsAt.slice(11, 16), s.movie.title, ':', s.cinema.name, s.bookingUrl)

Large volumes

Lists are paginated with limit (up to 1,000 sessions) and offset, or cursor to walk a whole result set. To mirror the data in your own database, sync incrementally with updated_since. The documentation covers both, as well as rate limits.

Frequently asked questions

Does it include ticket prices? No: the API gives session times and a booking link per session, where the price is shown.

How fresh is the data? Each cinema is read again every day. Removed sessions are flagged (removedAt) in incremental syncs.

Which chains are covered? Hoyts, Event Cinemas (Greater Union and BCC included) and Palace. Search a cinema with GET /v1/cinemas?country=AU&q=<name>; coverage grows chain by chain.

What does version mean for an Australian session? VO is the original version, VOST a subtitled or open-caption screening (a Hindi film with English subtitles, an open-caption session of an English-language film). UNKNOWN marks a dubbed screening.

Can I use it in a commercial app? The free plan is for trials and non-commercial projects; a website or app that earns revenue or serves a business needs a paid plan, from €12 a month.