Obtenha os horários de sessões de um filme

GET /3/movie/{movie_id}/showtimes?country=US retorna os cinemas que exibem um filme em um país, cada um com uma lista de sessões. country é um código de 2 letras. Sem ele, results fica vazio e você recebe apenas contagens por país. A cobertura varia por país e por título, e um array results vazio significa que nada é conhecido para esse par.

Você recebe o nome do cinema, a rede, o endereço e o fuso horário, e de cada sessão o horário de início, a sala, os formatos, as tags e um link de reserva, quando conhecidos. Só são retornadas as sessões de hoje em diante. A resposta descreve sessões. Não é um serviço de venda de ingressos.

Quais dados você recebe

EndpointRetorna
GET /3/movie/{movie_id}/showtimesCinemas e sessões de um filme em country, ou contagens por país sem ele
GET /3/movie/now_playingFilmes atualmente em cartaz, filtrados por region
GET /3/movie/{movie_id} com append_to_response=showtimesDetalhes mais horários de sessões em uma requisição, veja horários de sessões

Campos da resposta de horários de sessões:

CampoTipoSignificado
idinteiroID do filme
countrystring ou nullO código de 2 letras que você pediu, null quando nenhum era válido
resultsarrayUm item por cinema, vazio quando nada é conhecido ou quando falta country
countriesarrayContagens por país: country, name, venues, cities, showtimes, first_day, last_day
results[].id, name, city, addressinteiro, stringsID, nome, cidade e endereço do cinema
results[].chainobjeto ou nullkey e name da rede de cinemas
results[].timezonestring ou nullZona IANA do cinema, por exemplo Europe/Moscow
results[].latitude, longitudenúmero ou nullPosição, quando conhecida
results[].region, postal_code, phone, urlstring ou nullOutros dados do cinema, muitas vezes null
results[].showtimesarraySessões nesse cinema
showtimes[].datestringDia local, como 2026-10-18
showtimes[].startstringHorário local de início, como 2026-10-18T21:40, sem deslocamento
showtimes[].auditoriumstring ou nullNome ou número da sala
showtimes[].formatsarrayFormatos da sessão, por exemplo 2D, IMAX ou Dolby Atmos
showtimes[].tagsarrayRótulos extras, como Reserved Seating
showtimes[].booking_urlstring ou nullLink para comprar o ingresso, quando conhecido
showtimes[].sold_outbooleanotrue quando a fonte marca a sessão como esgotada
showtimes[].end, audio, subtitles, language, price, currency, pricesvários, muitas vezes nullPreenchidos só quando a fonte do cinema os fornece

Uma resposta traz no máximo 1,500 sessões, ordenadas por cinema e depois por horário de início.

Comece em 3 passos

  1. Abra preços e escolha um plano. Os horários de sessões estão incluídos em todos os planos.
  2. Crie uma chave no painel da sua conta.
  3. Faça a requisição de /3/movie/{movie_id}/showtimes com um código country e passe a chave em api_key ou em um cabeçalho Bearer.

Exemplo de requisição

O exemplo em bash lê os horários de sessões de Fight Club (ID 550) na Rússia, onde o amodb tem sessões dele hoje. O exemplo em JS pega os cinco primeiros filmes da lista now_playing russa e imprime até três sessões por cinema, ou uma nota quando nenhuma é conhecida.

bashjs
curl -s "https://api.amodb.dev/3/movie/550/showtimes?country=RU" \
  -H "Authorization: Bearer $AMODB_KEY"
const BASE = 'https://api.amodb.dev/3';
const headers = { Authorization: `Bearer ${process.env.AMODB_KEY}` };

async function get(path, params = {}) {
  const res = await fetch(`${BASE}${path}?${new URLSearchParams(params)}`, { headers });
  if (!res.ok) throw new Error(`amodb returned ${res.status} for ${path}`);
  return res.json();
}

const country = 'RU';
const playing = await get('/movie/now_playing', { region: country, page: 1 });

for (const movie of playing.results.slice(0, 5)) {
  const { results } = await get(`/movie/${movie.id}/showtimes`, { country });
  if (results.length === 0) {
    console.log(`${movie.title}: no showtimes known`);
    continue;
  }
  for (const cinema of results) {
    const times = cinema.showtimes
      .slice(0, 3)
      .map((s) => `${s.start.slice(5, 10)} ${s.start.slice(11, 16)} ${s.formats.join('/')}`)
      .join(', ');
    console.log(`${movie.title} at ${cinema.name}, ${cinema.city}: ${times}`);
  }
}

Resposta reduzida para country=RU: o primeiro cinema com 2 de suas sessões.

JSON
{
  "id": 550,
  "country": "RU",
  "results": [
    {
      "id": 1114,
      "name": "Мираж Синема НА БОЛЬШОМ",
      "chain": {
        "key": "mirage-ru",
        "name": "Мираж Синема"
      },
      "city": "Санкт-Петербург",
      "region": null,
      "address": "Большой пр. П.С., д. 35А",
      "postal_code": null,
      "country": "RU",
      "timezone": "Europe/Moscow",
      "latitude": null,
      "longitude": null,
      "phone": null,
      "url": "https://www.mirage.ru/spb/cinema/1/",
      "showtimes": [
        {
          "date": "2026-10-18",
          "start": "2026-10-18T21:40",
          "end": null,
          "auditorium": null,
          "formats": [
            "2D"
          ],
          "tags": [],
          "audio": null,
          "subtitles": null,
          "language": null,
          "price": null,
          "currency": null,
          "prices": null,
          "booking_url": "https://www.mirage.ru/ticket_new/aca7b114-d587-4fc5-9df6-28568e8fa9b3/",
          "sold_out": false
        },
        {
          "date": "2026-10-19",
          "start": "2026-10-19T22:20",
          "end": null,
          "auditorium": "Зал №4",
          "formats": [
            "2D"
          ],
          "tags": [],
          "audio": null,
          "subtitles": null,
          "language": null,
          "price": null,
          "currency": null,
          "prices": null,
          "booking_url": "https://www.mirage.ru/ticket_new/0c32e190-890a-4c81-a754-3300fefc4d5e/",
          "sold_out": false
        }
      ]
    }
  ],
  "countries": [
    {
      "country": "RU",
      "name": "Russia",
      "venues": 2,
      "cities": 1,
      "showtimes": 7,
      "first_day": "2026-10-18",
      "last_day": "2026-10-21"
    }
  ]
}

Cobertura e resultados vazios

Os dados de cinema não estão disponíveis para todos os países ou títulos. Planeje sua interface com isso em mente.

SituaçãoO que você vêO que fazer
Sessões conhecidasresults tem um item por cinemaMostre a lista
Nada conhecido para este país e títuloresults é um array vazio, countries lista onde há dadosMostre uma nota neutra, não uma tabela vazia
Nenhum country enviadoresults está vazio, country é null, countries traz contagensDeixe o usuário escolher em countries
ID de filme desconhecido404 com status_code 34Verifique o ID
Acima do seu limite429 com status_code 25Aguarde os segundos indicados em Retry-After

Um array vazio não é um erro nem afirma que o filme está fora dos cinemas. Significa que nenhum dado de sessão é conhecido. Veja erros para o formato completo do corpo.

Monte uma página de programação dos lançamentos atuais

Combine dois endpoints. A lista diz quais filmes estão em cartaz, e os horários de sessões preenchem as sessões.

PassoRequisiçãoObservações
1GET /3/movie/now_playing?region=US&page=1Até 20 filmes por página, com cache de 30 minutos
2GET /3/movie/{movie_id}/showtimes?country=USUma chamada por filme, com cache de 30 minutos
3Filtre no seu códigoPor city, formats ou tags

Uma página de 20 filmes custa 21 requisições. A resposta de um grande lançamento pode ter várias centenas de quilobytes, porque traz até 1,500 sessões. No plano de 20 requisições por minuto isso consome um minuto inteiro de orçamento, então busque em uma tarefa em segundo plano e atenda os visitantes a partir da sua cópia armazenada. Os planos de 40 e 120 requisições por minuto comportam a mesma tarefa com folga. Veja limites de requisições para a janela e os cabeçalhos, e em alta e listas para os outros endpoints de lista.

Mantenha sua cópia atualizada

Os horários de sessões mudam de um dia para o outro, ao contrário dos detalhes do filme. Armazene cada resposta com o ID do filme, o país e a hora da busca. Um TTL de 30 minutos até algumas horas serve para a maioria das páginas de programação, e as sessões que já começaram podem ser ocultadas comparando start com a hora atual no timezone do cinema. Como start não tem deslocamento, não o converta para o fuso horário do visitante.

Como se compara

RecursoScraping de sites de cinemasAPI de metadados sem horários de sessõesamodb
ConfiguraçãoUm scraper por site de cinemaIndisponívelUm endpoint, um formato JSON
Associação a um ID de filmeAssociar pelo texto do títuloIndisponívelID do filme no caminho
CoberturaO que você conseguir extrairNenhumaVaria por país e título, array vazio quando desconhecida
Formatos e reservasAnalisar rótulos e linksIndisponívelCampos formats, tags e booking_url
ManutençãoQuebra quando um site mudaNenhumaUm formato JSON para todos os países

Preços

Os planos pré-pagos valem por 1, 3, 6, 12 ou 24 meses, com 0, 10, 20, 30 ou 40 por cento de desconto nos períodos mais longos. Nada renova automaticamente. Os planos permitem 20, 40 e 120 requisições por minuto, e cada um inclui os horários de sessões junto com todos os outros dados. Uma página de programação que atualiza a cada 30 minutos para alguns países cabe no menor limite. Não há plano gratuito. Escolha um plano em preços.