# Alternativa a la API de TVmaze

> TVmaze es solo de TV, de uso gratuito, con límites por dirección IP, y sus datos están bajo una licencia de atribución. Consulta su documentación para los detalles. amodb es una API de pago para TV, películas y personas, con límites contados por clave y rutas de TMDB v3. Elige según el alcance y el presupuesto.

## Elige según el alcance y el presupuesto

TVmaze es solo de TV. Es de uso gratuito como API pública con límites por dirección IP, y sus datos llegan bajo una licencia de atribución, así que consulta su documentación para los detalles. amodb es de pago y cubre TV, películas y personas. Si tu aplicación es un seguimiento de series y una fuente gratuita cubre tus necesidades, TVmaze es un buen comienzo. Si además muestras películas, páginas de reparto o pósteres en varios idiomas, una clave de amodb sustituye a varias fuentes.

## Qué significa cada alcance para tu aplicación

| Tu aplicación muestra         | TVmaze                    | amodb                                             |
| ----------------------------- | ------------------------- | ------------------------------------------------- |
| Una página de serie de TV     | Sí                        | `GET /3/tv/{series_id}`                           |
| Una lista de episodios        | Sí                        | `GET /3/tv/{series_id}/season/{season_number}`    |
| Una página de película        | Sin películas             | `GET /3/movie/{movie_id}`                         |
| Una página de actor           | Consulta su documentación | `GET /3/person/{person_id}` y créditos combinados |
| Series que se emiten hoy      | Consulta su documentación | `GET /3/tv/airing_today`                          |
| Una sinopsis traducida        | Consulta su documentación | Parámetro `language`, 14 idiomas                  |
| Puntuaciones de varios sitios | Consulta su documentación | Extensión `/ratings`                              |

La fila de las películas decide la mayoría de los casos. Si no tienes páginas de películas, el alcance adicional no te aporta valor.

## Carencias que debes revisar antes de pasar

Los endpoints de temporadas y episodios siguen la forma de TMDB, y algunas de sus partes llegan vacías. Prueba las pantallas que las usan.

- **Reparto de episodio.** En un episodio, `cast` es un array vacío. `guest_stars` y `crew` están rellenos, y la llamada `/credits` de la serie trae el reparto principal.
- **Extras de temporada.** Los `images`, `videos` y `translations` de temporada están vacíos, así que el póster de una temporada sale del registro de la temporada y no de una lista de imágenes.
- **IDs externos.** Los `external_ids` de temporadas y episodios son todos null. Asigna los episodios a tus propios registros por `season_number` y `episode_number`.
- **Creadores.** `created_by` de una serie está vacío en la mayoría de las series.
- **Sin feed de cambios.** amodb no tiene ningún endpoint que liste las series que cambiaron desde una fecha.

## Comparación de funciones

| Función               | TVmaze                                                           | amodb                                                                 |
| --------------------- | ---------------------------------------------------------------- | --------------------------------------------------------------------- |
| Modelo de precios     | API pública de uso gratuito                                      | Prepago, de 1 a 24 meses por compra                                   |
| Nivel gratuito        | Sí, toda la API pública                                          | Ninguno, y sin periodo de prueba                                      |
| Autenticación         | Consulta su documentación                                        | `api_key` o cabecera Bearer                                           |
| Formato de respuesta  | JSON, consulta su documentación                                  | JSON con la forma de TMDB v3                                          |
| Idiomas               | Consulta su documentación                                        | 14 idiomas de interfaz                                                |
| Películas             | No                                                               | Sí                                                                    |
| TV                    | Sí, su único foco                                                | Sí                                                                    |
| Personas              | Consulta su documentación                                        | Sí                                                                    |
| Imágenes              | Consulta su documentación                                        | `img.amodb.dev`, diez tokens de tamaño                                |
| Puntuaciones          | Consulta su documentación                                        | Cinco fuentes cuando se conocen                                       |
| Límite de solicitudes | Por dirección IP, consulta su documentación para ver las cifras  | 20, 40 o 120 por minuto por clave                                     |
| Uso comercial         | Datos bajo una licencia de atribución, consulta su documentación | Planes de pago, consulta los [precios](https://amodb.dev/es/pricing/) |
| Compatibilidad        | Su propia API                                                    | Lecturas de TMDB v3 y OMDb                                            |

## En qué se diferencia amodb

- **El límite sigue a la clave.** Todos tus servidores comparten un contador en una ventana deslizante de 60 segundos, y las respuestas llevan `X-RateLimit-Remaining`. Nada depende de la dirección desde la que sale una solicitud.
- **Películas, TV y personas en un solo lugar.** Un cliente, un formato de error y un conjunto de cabeceras cubren toda la aplicación.
- **Idiomas.** Los títulos y las sinopsis llegan en cualquiera de los 14 idiomas, y `original_name` conserva el título nativo.
- **Protocolo consolidado.** Las bibliotecas escritas para lecturas de TMDB v3 funcionan con una nueva URL base. Consulta la página de la [API de series de TV](https://amodb.dev/es/tv-show-api/) para ver los endpoints de series.

## Dónde encaja mejor TVmaze

- **Sin presupuesto.** Es de uso gratuito, así que un proyecto de estudiante o un seguimiento de fin de semana no necesita pago. amodb no tiene nivel gratuito ni periodo de prueba.
- **Solo TV, sin complicaciones.** Si tu modelo de datos tiene series y episodios y nada más, una API centrada en la TV encaja.
- **Sus propias convenciones.** Las aplicaciones ya construidas en torno al modelo de TVmaze ahorran trabajo si se quedan.

Si te quedas, cumple su licencia de atribución. Consulta su documentación para ver el texto exacto.

## Migrar a amodb

Empieza con un trabajo de asignación. Lee los ids externos que listan tus registros guardados de TVmaze (consulta su documentación para ver los nombres de los campos) y resuélvelos con `/3/find`. El programa de abajo asigna un id de IMDb a una serie e imprime la fecha del próximo episodio.

```go
package main

import (
	"encoding/json"
	"fmt"
	"net/http"
	"os"
	"time"
)

type findResult struct {
	TVResults []struct {
		ID   int    `json:"id"`
		Name string `json:"name"`
	} `json:"tv_results"`
}

type episode struct {
	AirDate       string `json:"air_date"`
	SeasonNumber  int    `json:"season_number"`
	EpisodeNumber int    `json:"episode_number"`
}

type series struct {
	Name        string   `json:"name"`
	Status      string   `json:"status"`
	NextEpisode *episode `json:"next_episode_to_air"`
}

var client = &http.Client{Timeout: 10 * time.Second}

func get(path string, out any) error {
	req, err := http.NewRequest(http.MethodGet, "https://api.amodb.dev/3"+path, nil)
	if err != nil {
		return err
	}
	req.Header.Set("Authorization", "Bearer "+os.Getenv("AMODB_KEY"))
	res, err := client.Do(req)
	if err != nil {
		return err
	}
	defer res.Body.Close()
	if res.StatusCode != http.StatusOK {
		return fmt.Errorf("amodb returned %s", res.Status)
	}
	return json.NewDecoder(res.Body).Decode(out)
}

func main() {
	var found findResult
	if err := get("/find/tt0903747?external_source=imdb_id", &found); err != nil {
		fmt.Println(err)
		return
	}
	if len(found.TVResults) == 0 {
		fmt.Println("no match")
		return
	}
	var s series
	if err := get(fmt.Sprintf("/tv/%d", found.TVResults[0].ID), &s); err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(s.Name, s.Status)
	if s.NextEpisode != nil {
		fmt.Println("next episode:", s.NextEpisode.AirDate)
	}
}
```

El tipo puntero de `NextEpisode` gestiona el `null` que devuelven las series terminadas. Ejecuta la asignación una vez, guarda el id de amodb con cada uno de tus registros y llama a `/3/tv/{id}` a partir de entonces. Un 429 se responde con `Retry-After`, y la página de [buscar por ID externo](https://amodb.dev/es/find-by-external-id/) lista las demás fuentes de ids.

## Dimensionar una sincronización nocturna

Supón que actualizas 300 series cada noche. Son 300 solicitudes, ya que una llamada de serie devuelve una serie. A 20 solicitudes por minuto el trabajo tarda 15 minutos, a 40 tarda 7.5 minutos y a 120 tarda 2.5 minutos. Añade `append_to_response=credits,ratings` a cada llamada para que el reparto y las puntuaciones lleguen en la misma solicitud, en lugar de costar dos más por serie. Lee `X-RateLimit-Remaining` y haz una pausa cuando llegue a cero; después continúa tras los segundos de `X-RateLimit-Reset`.

## Precios

amodb es prepago y nunca se renueva solo. Elige 1, 3, 6, 12 o 24 meses y un plan de 20, 40 o 120 solicitudes por minuto. Los periodos más largos son un 10, 20, 30 o 40 por ciento más baratos, y cada plan incluye todos los datos. Los importes están en [precios](https://amodb.dev/es/pricing/).

## Preguntas y respuestas

### ¿La API de TVmaze es gratuita?

TVmaze ofrece una API pública gratuita con límites por dirección IP, y sus datos están bajo una licencia de atribución. Consulta su documentación para ver los límites vigentes y el texto de la licencia. amodb es de pago y no tiene nivel gratuito.

### ¿amodb cubre películas además de TV?

Sí. Las películas, las series de TV, las temporadas, los episodios y las personas están en la misma clave y URL base. TVmaze es solo de TV, así que una página de película en tu aplicación necesita una segunda fuente si te quedas con TVmaze.

### ¿Cómo asigno las series de TVmaze a ids de amodb?

Los registros de series de TVmaze listan ids de otras bases de datos, como IMDb (consulta su documentación para ver los campos exactos). Llama al endpoint find con el id de IMDb y external_source=imdb_id, y guarda el id de tv_results.

### ¿Por qué importa un límite por IP?

Un límite atado a una dirección IP lo comparte todo lo que hay detrás, como un grupo de servidores o una red de oficina. amodb cuenta las solicitudes por clave en una ventana deslizante de 60 segundos, vengan de donde vengan las llamadas.

### ¿Puedo mostrar la fecha del próximo episodio de una serie?

Sí. Los detalles de la serie devuelven next_episode_to_air con air_date, season_number y episode_number, o null cuando no hay nada programado. La caché perimetral guarda los detalles 6 horas, así que actualiza unas pocas veces al día.

## Páginas relacionadas

- [API de series de TV para temporadas y episodios](https://amodb.dev/es/tv-show-api/): API de series de TV con estado, cadenas, temporadas, episodios y next_episode_to_air. JSON de TMDB v3 en 14 idiomas, desde 20 solicitudes por minuto.
- [API de guía de episodios](https://amodb.dev/es/episode-guide-api/): API de guía de episodios con los endpoints de temporada y episodio de TMDB v3: nombres, fechas, duraciones, imágenes y grupos de episodios, en 14 idiomas.
- [API de temporadas y episodios de TV](https://amodb.dev/es/tv-seasons-episodes/): API de temporadas y episodios de TV con las mismas rutas y JSON que TMDB v3. Lee una temporada con todos sus episodios, o un episodio con fecha y duración.
- [Buscar por id externo](https://amodb.dev/es/find-by-external-id/): Busca una película, serie o persona por id de IMDb, TVDB, Wikidata o Kinopoisk con el endpoint find de TMDB, y lee los ids externos y los datos de Wikidata.
- [Límites de solicitudes](https://amodb.dev/es/rate-limits/): amodb limita cada clave por solicitudes por minuto en una ventana deslizante de 60 segundos: 20, 40 o 120 según el plan. Lee los encabezados y gestiona el 429.
- [Precios](https://amodb.dev/es/pricing/): Los planes de amodb se diferencian solo en solicitudes por minuto: 20, 40 o 120. Todos incluyen todos los datos de TMDB v3 y OMDb. Prepago y sin renovación.

Actualizado: 2026-10-18. Source: https://amodb.dev/es/tvmaze-api-alternative/
