Una API de series de TV con estado, temporadas y próximo episodio
GET /3/tv/{series_id} devuelve una serie con su status, networks, la lista seasons, last_episode_to_air y next_episode_to_air. Los endpoints de temporada y episodio añaden fechas de emisión, duraciones y fotogramas. amodb es una API independiente que habla el protocolo TMDB v3, así que un cliente escrito para TMDB funciona después de cambiar la URL base a https:/.
Qué obtienes:
- Registros de series con el número de temporadas y episodios, además de las fechas de la primera y la última emisión.
- Un campo
statusde texto y un indicadorin_production. - Cadenas de TV con ids, logotipos y país de origen.
- Una llamada por temporada, que devuelve todos los episodios de esa temporada.
- Listas de series que se emiten hoy o en los próximos 7 días.
Qué datos obtienes
| Necesitas | Llamada | Campos clave |
|---|---|---|
| Registro de la serie | GET /3/tv/{series_id} | name, original_name, status, in_production, number_of_seasons, number_of_episodes |
| Siguiente y último episodio | la misma llamada | next_episode_to_air, last_episode_to_air |
| Una temporada | GET / | episodes, air_date, poster_path |
| Un episodio | GET / | name, overview, runtime, still_path, air_date |
| Una cadena de TV | GET / | name, headquarters, origin_country |
Las listas completas de campos están en series de TV y temporadas y episodios.
Empieza en 3 pasos
- Abre precios y elige el plan con la velocidad de solicitudes que necesitas: 20, 40 o 120 por minuto.
- Crea una clave de API en el panel de tu cuenta.
- Envía
GET /3/tv/{series_id}conAuthorization: Bearer YOUR_, o añadeAPI_ KEY api_keycomo parámetro de consulta.
Ejemplo de solicitud
El script lee Breaking Bad (id de serie 1396), imprime su estado y el siguiente episodio, y luego lista la temporada 1. Guárdalo como check.mjs y ejecútalo con Node 18 o superior.
curl -s "https://api.amodb.dev/3/tv/1396?language=en-US&append_to_response=ratings" \
-H "Authorization: Bearer $AMODB_KEY"
curl -s "https://api.amodb.dev/3/tv/1396/season/1?language=en-US" \
-H "Authorization: Bearer $AMODB_KEY"const base = 'https://api.amodb.dev/3';
const headers = { Authorization: `Bearer ${process.env.AMODB_KEY}` };
async function get(path) {
const res = await fetch(`${base}${path}`, { headers });
if (!res.ok) throw new Error(`amodb returned ${res.status} for ${path}`);
return res.json();
}
const show = await get('/tv/1396?language=en-US');
const next = show.next_episode_to_air;
console.log(`${show.name}: ${show.status}, ${show.number_of_seasons} seasons`);
console.log(next
? `Next: S${next.season_number}E${next.episode_number} on ${next.air_date}`
: 'No upcoming episode is scheduled');
const season = await get('/tv/1396/season/1?language=en-US');
for (const ep of season.episodes) {
console.log(`E${ep.episode_number} ${ep.air_date} ${ep.name}`);
}Una respuesta de serie recortada para language=en-US. Solo se conservan algunos campos, y seasons muestra sus primeras 2 de 6 entradas. Algunos nombres no siguen a language en estos datos: el nombre de la temporada 0 está en chino y el name dentro de last_episode_to_air está en hebreo.
{
"first_air_date": "2008-01-20",
"id": 1396,
"in_production": false,
"last_air_date": "2013-09-29",
"last_episode_to_air": {
"air_date": "2013-09-29",
"episode_number": 16,
"episode_type": "standard",
"id": 62161,
"name": "פלינה",
"overview": "הסדרה זוכת הפרסים מגיעה לסיום דרמתי בפרק החותם אותה.",
"production_code": "",
"runtime": 56,
"season_number": 5,
"show_id": 1396,
"still_path": "/pA0YwyhvdDXP3BEGL2grrIhq8aM.jpg",
"vote_average": 0,
"vote_count": 0
},
"name": "Breaking Bad",
"next_episode_to_air": null,
"number_of_episodes": 62,
"number_of_seasons": 5,
"original_name": "Breaking Bad",
"seasons": [
{
"air_date": "2009-02-17",
"episode_count": 9,
"id": 3577,
"name": "特别篇",
"overview": "",
"poster_path": "/ikBSCmgG5Z4jequUUAjKpf1QG3T.jpg",
"season_number": 0,
"vote_average": 0
},
{
"air_date": "2008-01-20",
"episode_count": 7,
"id": 3572,
"name": "Season 1",
"overview": "High school chemistry teacher Walter White's life is suddenly transformed by a dire medical diagn...",
"poster_path": "/91EIXdWxmp2mHNRsSuDW3WyDJLj.jpg",
"season_number": 1,
"vote_average": 0
}
],
"status": "Ended"
}Cómo leer el estado y el siguiente episodio
El texto de status te dice cómo etiquetar una serie. next_episode_to_air es un objeto solo mientras hay un episodio programado, así que es null entre temporadas y también después del final. Comprueba status antes de mostrar «finalizada».
status | Significado | Qué mostrar |
|---|---|---|
| Returning Series | Se esperan más episodios | La fecha de emisión si existe el objeto, si no «renovada» |
| In Production | Se está produciendo, aún no se emite | «En producción» |
| Planned | Solo anunciada | «Planificada» |
| Pilot | Solo existe un piloto | «Piloto» |
| Ended | La serie terminó | «Finalizada» y last_air_date |
| Canceled | Se detuvo antes del final previsto | «Cancelada» |
Campos dentro de next_episode_to_air y last_episode_to_air: air_date, season_number, episode_number, episode_type, id, show_id, name, overview, runtime y still_path. El texto de status también puede venir vacío en algunos títulos, así que ten lista una etiqueta neutral.
Los detalles se guardan en la caché perimetral durante 6 horas, así que pedir la misma serie más de cuatro veces al día devuelve el mismo cuerpo. Consulta una o dos veces al día las series que sigues y actualiza la que abre un usuario.
Temporadas, episodios y lo que se emite
La temporada 0, cuando una serie la tiene, contiene los especiales. Las temporadas regulares empiezan en 1.
| Llamada | Devuelve | Parámetros |
|---|---|---|
GET / | Registro de la temporada con una lista episodes | language, append_to_response |
GET /3/tv/airing_today | Series con un episodio que se emite hoy | page, language |
GET /3/tv/on_the_air | Series que se emiten en la próxima semana | page, language |
GET /3/discover/tv | Series filtradas por cadena, estado y más | with_networks, with_status, sort_by, page |
Las listas y los resultados de discover se guardan en caché 30 minutos, así que una solicitud cada media hora basta para una insignia de «se emite pronto». Compara los ids devueltos con las series que siguen tus usuarios. Los detalles de temporadas y episodios están en la página de la guía de episodios.
Crea una lista de seguimiento con cuentas regresivas
Una pantalla de «series que sigo» necesita un id guardado por serie y una pequeña tarea diaria.
- Guarda el
idde la serie cuando un usuario la sigue. - Una vez al día, llama a
/3/tv/{series_id}por cada id seguido y guardastatus,next_episode_to_airylast_air_date. - Cuando
next_episode_to_aires un objeto, muestraair_datecomo fecha. No incluye hora del día ni zona horaria, así que no cuentes hacia atrás hasta el minuto. - Cuando es null y
statuses Returning Series, muestra «temporada nueva sin programar». - Pide la llamada de temporada solo cuando un usuario abre la serie, porque es la respuesta más grande.
Un 404 con status_code 34 significa que el id no existe, y un 429 significa que superaste tus solicitudes por minuto: espera Retry-After segundos. Con 200 series seguidas, una pasada diaria son 200 solicitudes, unos diez minutos a 20 solicitudes por minuto. Consulta límites de solicitudes y errores.
Cómo se compara
| Capacidad | Hacer scraping de las páginas tú mismo | API de metadatos con nivel gratuito | amodb |
|---|---|---|---|
| Estructura de temporadas y episodios | Reconstruida a partir del diseño de las páginas | Varía, revisa la documentación | Llamada de temporada con una lista episodes |
| Próxima fecha de emisión | Extraída de una página de programación | Varía, revisa la documentación | next_episode_to_air, null cuando no hay ninguno programado |
| Estado de la serie | Texto libre en una página | Varía, revisa la documentación | Texto status e indicador in_production |
| Emisiones de esta semana | Hacer scraping de una programación | Varía, revisa la documentación | /3/tv/on_the_air y /3/tv/airing_today |
| Idiomas | Los que ofrezca la página | Varía | 14, elegidos con language |
| Términos de acceso | Se aplican los términos del sitio | Nivel gratuito con términos de uso | De pago, prepago, sin nivel gratuito |
Precios
Paga una vez por 1, 3, 6, 12 o 24 meses. Los periodos más largos tienen un descuento del 10, 20, 30 o 40 por ciento y nada se renueva automáticamente. Todos los planes dan acceso a todos los datos de TV, con 20, 40 o 120 solicitudes por minuto como única diferencia. Consulta precios, crea una clave y tu primera llamada de serie cuesta una solicitud.