Obtén los horarios de una película

GET /3/movie/{movie_id}/showtimes?country=US devuelve los cines que proyectan una película en un país, cada uno con una lista de sesiones. country es un código de 2 letras. Sin él, results queda vacío y solo obtienes recuentos por país. La cobertura varía según el país y el título, y un array results vacío significa que no se sabe nada para ese par.

Obtienes el nombre del cine, la cadena, la dirección y la zona horaria, y para cada sesión la hora de inicio, la sala, los formatos, las etiquetas y un enlace de reserva cuando se conocen. Solo se devuelven las sesiones de hoy en adelante. La respuesta describe sesiones. No es un servicio de venta de entradas.

Qué datos obtienes

EndpointDevuelve
GET /3/movie/{movie_id}/showtimesCines y sesiones de una película en country, o recuentos por país sin él
GET /3/movie/now_playingPelículas que están ahora en cines, acotadas con region
GET /3/movie/{movie_id} con append_to_response=showtimesDetalles más horarios en una sola solicitud, consulta horarios de sesiones

Campos de la respuesta de horarios:

CampoTipoSignificado
identeroId de la película
countrycadena o nullEl código de 2 letras que pediste, null cuando ninguno era válido
resultsarrayUn elemento por cine, vacío cuando no se sabe nada o falta country
countriesarrayRecuentos por país: country, name, venues, cities, showtimes, first_day, last_day
results[].id, name, city, addressentero, cadenasId del cine, nombre, ciudad y dirección postal
results[].chainobjeto o nullkey y name de la cadena de cines
results[].timezonecadena o nullZona IANA del cine, por ejemplo Europe/Moscow
results[].latitude, longitudenúmero o nullPosición, cuando se conoce
results[].region, postal_code, phone, urlcadena o nullMás datos del cine, a menudo null
results[].showtimesarraySesiones en ese cine
showtimes[].datecadenaDía local como 2026-10-18
showtimes[].startcadenaHora local de inicio como 2026-10-18T21:40, sin desfase
showtimes[].auditoriumcadena o nullNombre o número de la sala
showtimes[].formatsarrayFormatos de la sesión, por ejemplo 2D, IMAX o Dolby Atmos
showtimes[].tagsarrayEtiquetas adicionales como Reserved Seating
showtimes[].booking_urlcadena o nullEnlace para comprar una entrada, cuando se conoce
showtimes[].sold_outbooleanotrue cuando la fuente marca la sesión como agotada
showtimes[].end, audio, subtitles, language, price, currency, pricesvarios, a menudo nullSe rellenan solo cuando la fuente del cine los proporciona

Una respuesta contiene como máximo 1,500 sesiones, ordenadas por cine y luego por hora de inicio.

Empieza en 3 pasos

  1. Abre precios y elige un plan. Los horarios de sesiones están incluidos en todos los planes.
  2. Crea una clave en el panel de tu cuenta.
  3. Solicita /3/movie/{movie_id}/showtimes con un código country y pasa la clave en api_key o como encabezado Bearer.

Ejemplo de solicitud

El ejemplo en bash lee los horarios de Fight Club (id 550) en Rusia, donde amodb tiene hoy sesiones de esa película. El ejemplo en JS toma las primeras cinco películas de la lista now_playing de Rusia e imprime hasta tres sesiones por cine, o una nota cuando no se conoce ninguna.

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}`);
  }
}

Respuesta recortada para country=RU: el primer cine con 2 de sus sesiones.

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 y resultados vacíos

Los datos de cines no están disponibles para todos los países ni títulos. Diseña tu interfaz con eso en cuenta.

SituaciónQué vesQué hacer
Hay sesiones conocidasresults tiene un elemento por cineMuestra la lista
No se sabe nada para este país y títuloresults es un array vacío, countries lista dónde hay datosMuestra una nota neutral, no una tabla vacía
No se envió countryresults está vacío, country es null, countries trae recuentosDeja que el usuario elija entre countries
ID de película desconocido404 con status_code 34Revisa el id
Límite superado429 con status_code 25Espera los segundos indicados en Retry-After

Un array vacío no es un error ni afirma que la película falte en los cines. Significa que no se conocen datos de sesiones. Consulta errores para ver el formato completo del cuerpo.

Crea una página de cartelera con los estrenos actuales

Combina dos endpoints. La lista te dice qué películas están en cartelera, y los horarios completan las sesiones.

PasoSolicitudNotas
1GET /3/movie/now_playing?region=US&page=1Hasta 20 películas por página, en caché 30 minutos
2GET /3/movie/{movie_id}/showtimes?country=USUna llamada por película, en caché 30 minutos
3Filtra en tu códigoPor city, formats o tags

Una página de 20 películas cuesta 21 solicitudes. Una respuesta de un gran estreno puede pesar varios cientos de kilobytes, porque contiene hasta 1,500 sesiones. En el plan de 20 solicitudes por minuto eso consume todo el minuto, así que obtén los datos en una tarea en segundo plano y atiende a los visitantes desde tu copia guardada. Los planes de 40 y 120 solicitudes por minuto cubren la misma tarea con margen. Consulta límites de solicitudes para ver la ventana y los encabezados, y tendencias y listas para los otros endpoints de listas.

Mantén tu copia al día

Los horarios cambian cada día, a diferencia de los detalles de una película. Guarda cada respuesta con su id de película, su país y la hora de consulta. Un TTL de entre 30 minutos y unas pocas horas sirve para la mayoría de las páginas de cartelera, y las sesiones que ya empezaron se pueden ocultar comparando start con la hora actual en el timezone del cine. Como start no tiene desfase, no lo cambies a la zona horaria del visitante.

Cómo se compara

CapacidadHacer scraping de los sitios de los cinesAPI de metadatos sin horariosamodb
ConfiguraciónUn scraper por cada sitio de cineNo disponibleUn endpoint, un formato JSON
Relación con un id de películaEmparejar por el texto del títuloNo disponibleId de película en la ruta
CoberturaLo que logres extraerNingunaVaría según el país y el título, array vacío cuando no se sabe
Formatos y reservasAnalizar etiquetas y enlacesNo disponibleCampos formats, tags y booking_url
MantenimientoSe rompe cuando un sitio cambiaNingunoUn formato JSON para todos los países

Precios

Los planes prepago duran 1, 3, 6, 12 o 24 meses, con 0, 10, 20, 30 o 40 por ciento de descuento en los más largos. Nada se renueva automáticamente. Los planes permiten 20, 40 y 120 solicitudes por minuto y cada uno incluye los horarios de sesiones junto con el resto de los datos. Una página de cartelera que se actualiza cada 30 minutos para unos pocos países cabe en el límite más bajo. No hay nivel gratuito. Elige un plan en precios.