Obtén los horarios de una película
GET / 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
| Endpoint | Devuelve |
|---|---|
GET / | Cines y sesiones de una película en country, o recuentos por país sin él |
GET / | Películas que están ahora en cines, acotadas con region |
GET / con append_ | Detalles más horarios en una sola solicitud, consulta horarios de sesiones |
Campos de la respuesta de horarios:
| Campo | Tipo | Significado |
|---|---|---|
id | entero | Id de la película |
country | cadena o null | El código de 2 letras que pediste, null cuando ninguno era válido |
results | array | Un elemento por cine, vacío cuando no se sabe nada o falta country |
countries | array | Recuentos por país: country, name, venues, cities, showtimes, first_day, last_day |
results[].id, name, city, address | entero, cadenas | Id del cine, nombre, ciudad y dirección postal |
results[].chain | objeto o null | key y name de la cadena de cines |
results[].timezone | cadena o null | Zona IANA del cine, por ejemplo Europe/Moscow |
results[].latitude, longitude | número o null | Posición, cuando se conoce |
results[].region, postal_code, phone, url | cadena o null | Más datos del cine, a menudo null |
results[].showtimes | array | Sesiones en ese cine |
showtimes[].date | cadena | Día local como 2026-10-18 |
showtimes[].start | cadena | Hora local de inicio como 2026-10-18T21:40, sin desfase |
showtimes[].auditorium | cadena o null | Nombre o número de la sala |
showtimes[].formats | array | Formatos de la sesión, por ejemplo 2D, IMAX o Dolby Atmos |
showtimes[].tags | array | Etiquetas adicionales como Reserved Seating |
showtimes[].booking_ | cadena o null | Enlace para comprar una entrada, cuando se conoce |
showtimes[].sold_out | booleano | true cuando la fuente marca la sesión como agotada |
showtimes[].end, audio, subtitles, language, price, currency, prices | varios, a menudo null | Se 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
- Abre precios y elige un plan. Los horarios de sesiones están incluidos en todos los planes.
- Crea una clave en el panel de tu cuenta.
- Solicita
/con un código3/ movie/ {movie_ id}/ showtimes countryy pasa la clave enapi_keyo 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.
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.
{
"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ón | Qué ves | Qué hacer |
|---|---|---|
| Hay sesiones conocidas | results tiene un elemento por cine | Muestra la lista |
| No se sabe nada para este país y título | results es un array vacío, countries lista dónde hay datos | Muestra una nota neutral, no una tabla vacía |
No se envió country | results está vacío, country es null, countries trae recuentos | Deja que el usuario elija entre countries |
| ID de película desconocido | 404 con status_code 34 | Revisa el id |
| Límite superado | 429 con status_code 25 | Espera 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.
| Paso | Solicitud | Notas |
|---|---|---|
| 1 | GET / | Hasta 20 películas por página, en caché 30 minutos |
| 2 | GET / | Una llamada por película, en caché 30 minutos |
| 3 | Filtra en tu código | Por 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
| Capacidad | Hacer scraping de los sitios de los cines | API de metadatos sin horarios | amodb |
|---|---|---|---|
| Configuración | Un scraper por cada sitio de cine | No disponible | Un endpoint, un formato JSON |
| Relación con un id de película | Emparejar por el texto del título | No disponible | Id de película en la ruta |
| Cobertura | Lo que logres extraer | Ninguna | Varía según el país y el título, array vacío cuando no se sabe |
| Formatos y reservas | Analizar etiquetas y enlaces | No disponible | Campos formats, tags y booking_url |
| Mantenimiento | Se rompe cuando un sitio cambia | Ninguno | Un 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.