# Endpoint compatible con OMDb

> GET https://api.amodb.dev/omdb/ responde solicitudes al estilo de OMDb con los mismos nombres de parámetros y campos. Busca un título por id de IMDb con i o por título con t, o explora con s. Los pósteres apuntan a img.amodb.dev. Solo se sirven r=json, películas y series. Cambia la URL base y la clave, y un cliente típico sigue funcionando.

## Endpoint

`GET /omdb/`

```bash
curl "https://api.amodb.dev/omdb/?i=tt0137523&plot=short&apikey=$AMODB_KEY"
```

Respuesta:

```json
{
  "Title": "Fight Club",
  "Year": "1999",
  "Rated": "R",
  "Released": "15 Oct 1999",
  "Runtime": "139 min",
  "Genre": "Crime, Drama, Thriller",
  "Director": "David Fincher",
  "Writer": "Chuck Palahniuk, Jim Uhls",
  "Actors": "Brad Pitt, Edward Norton, Meat Loaf",
  "Plot": "A nameless first-person narrator attends support groups in an attempt to subdue his emotional state and relieve his insomniac state.",
  "Language": "English",
  "Country": "United States, Germany",
  "Awards": "Nominated for 1 Oscar. 12 wins & 38 nominations total",
  "Poster": "https://img.amodb.dev/t/p/w300/pfPob0mrC1KiPVP9NXZnqvpks9u.jpg",
  "Ratings": [
    {
      "Source": "Internet Movie Database",
      "Value": "8.8/10"
    },
    {
      "Source": "Rotten Tomatoes",
      "Value": "81%"
    },
    {
      "Source": "Metacritic",
      "Value": "67/100"
    }
  ],
  "Metascore": "67",
  "imdbRating": "8.8",
  "imdbVotes": "2,669,989",
  "imdbID": "tt0137523",
  "Type": "movie",
  "DVD": "N/A",
  "BoxOffice": "$38,003,039",
  "Production": "N/A",
  "Website": "N/A",
  "Response": "True"
}
```

## Buscar un título por id de IMDb o por título

`GET https://api.amodb.dev/omdb/` devuelve un título como JSON plano con los nombres de campo de OMDb. Pasa `i` para un id de IMDb como `tt0137523`, o `t` para un título. La autenticación es el parámetro de consulta `apikey`. La respuesta trae `Response` en `True` si salió bien y en `False` si falló.

El ejemplo carga Fight Club por id de IMDb y se detiene con el texto de error de OMDb cuando `Response` es `False`.

```bash
curl -sf "https://api.amodb.dev/omdb/?i=tt0137523&plot=short&apikey=$AMODB_KEY"
```

```js
const params = new URLSearchParams({ i: 'tt0137523', plot: 'short', apikey: process.env.AMODB_KEY });
const res = await fetch(`https://api.amodb.dev/omdb/?${params}`);
if (!res.ok) throw new Error(`amodb returned ${res.status}`);
const data = await res.json();
if (data.Response === 'False') throw new Error(data.Error);
console.log(data.Title, data.Year, data.imdbRating);
```

```python
import os
import requests

r = requests.get(
    "https://api.amodb.dev/omdb/",
    params={"i": "tt0137523", "plot": "short", "apikey": os.environ["AMODB_KEY"]},
    timeout=10,
)
r.raise_for_status()
data = r.json()
if data["Response"] == "False":
    raise SystemExit(data["Error"])
print(data["Title"], data["Year"], data["imdbRating"])
```

```php
<?php
$query = http_build_query(['i' => 'tt0137523', 'plot' => 'short', 'apikey' => getenv('AMODB_KEY')]);
$ch = curl_init('https://api.amodb.dev/omdb/?' . $query);
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 10]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($status !== 200) {
    throw new RuntimeException("amodb returned $status");
}
$data = json_decode($body, true);
if ($data['Response'] === 'False') {
    throw new RuntimeException($data['Error']);
}
echo $data['Title'], ' ', $data['Year'], ' ', $data['imdbRating'], PHP_EOL;
```

```go
package main

import (
	"encoding/json"
	"fmt"
	"net/http"
	"net/url"
	"os"
	"time"
)

type Title struct {
	Title      string `json:"Title"`
	Year       string `json:"Year"`
	ImdbRating string `json:"imdbRating"`
	Response   string `json:"Response"`
	Error      string `json:"Error"`
}

func main() {
	q := url.Values{"i": {"tt0137523"}, "plot": {"short"}, "apikey": {os.Getenv("AMODB_KEY")}}
	client := &http.Client{Timeout: 10 * time.Second}
	res, err := client.Get("https://api.amodb.dev/omdb/?" + q.Encode())
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()
	if res.StatusCode != http.StatusOK {
		panic(res.Status)
	}
	var t Title
	if err := json.NewDecoder(res.Body).Decode(&t); err != nil {
		panic(err)
	}
	if t.Response == "False" {
		panic(t.Error)
	}
	fmt.Println(t.Title, t.Year, t.ImdbRating)
}
```

### Parámetros

| Parámetro | En       | Obligatorio          | Descripción                                                             |
| --------- | -------- | -------------------- | ----------------------------------------------------------------------- |
| `apikey`  | consulta | sí                   | Tu clave de amodb.                                                      |
| `i`       | consulta | uno de `i`, `t`, `s` | Id de IMDb del título: `tt` más 7 a 9 dígitos, por ejemplo `tt0137523`. |
| `t`       | consulta | uno de `i`, `t`, `s` | Título que buscar, devuelve la mejor coincidencia.                      |
| `s`       | consulta | uno de `i`, `t`, `s` | Texto de búsqueda de al menos 3 letras, devuelve una lista.             |
| `type`    | consulta | no                   | `movie` o `series`. `episode` no encuentra nada.                        |
| `y`       | consulta | no                   | Año de estreno.                                                         |
| `plot`    | consulta | no                   | `short` o `full`. Valor por defecto `short`.                            |
| `page`    | consulta | no                   | Página de resultados de búsqueda, de 1 a 100. Se usa con `s`.           |
| `r`       | consulta | no                   | Solo `json`. Cualquier otro valor devuelve HTTP 400.                    |

Los parámetros `Season`, `Episode`, `callback` y `v` de la API original de OMDb no se admiten y se ignoran.

### Campos de la respuesta

| Campo                                            | Notas                                                                                                             |
| ------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------- |
| `Title`, `Year`, `Rated`, `Released`, `Runtime`  | Texto. `Released` se lee como `15 Oct 1999`.                                                                      |
| `Genre`, `Director`, `Writer`, `Actors`          | Nombres separados por comas.                                                                                      |
| `Plot`, `Language`, `Country`, `Awards`          | Texto.                                                                                                            |
| `Poster`                                         | Dirección en `https://img.amodb.dev/t/p/w300/`.                                                                   |
| `Ratings`                                        | Array de objetos con `Source` y `Value`.                                                                          |
| `Metascore`, `imdbRating`, `imdbVotes`, `imdbID` | Texto, incluido el número de votos con comas.                                                                     |
| `Type`                                           | `movie` o `series`.                                                                                               |
| `DVD`, `BoxOffice`, `Production`, `Website`      | Solo películas. `BoxOffice` lleva un valor cuando se conoce. `DVD`, `Production` y `Website` siempre dicen `N/A`. |
| `totalSeasons`                                   | Solo series, como texto. Las respuestas de series no tienen `DVD`, `BoxOffice`, `Production` ni `Website`.        |
| `Response`                                       | `True` o `False`, siempre una cadena de texto.                                                                    |

Los campos siguen a OMDb, así que un analizador de OMDb existente no necesita más cambio que la URL base.

### Ejemplo de respuesta

```json
{
  "Title": "Fight Club",
  "Year": "1999",
  "Rated": "R",
  "Released": "15 Oct 1999",
  "Runtime": "139 min",
  "Genre": "Crime, Drama, Thriller",
  "Director": "David Fincher",
  "Writer": "Chuck Palahniuk, Jim Uhls",
  "Actors": "Brad Pitt, Edward Norton, Meat Loaf",
  "Plot": "A nameless first-person narrator attends support groups in an attempt to subdue his emotional state and relieve his insomniac state.",
  "Language": "English",
  "Country": "United States, Germany",
  "Awards": "Nominated for 1 Oscar. 12 wins & 38 nominations total",
  "Poster": "https://img.amodb.dev/t/p/w300/qkrH7rjYKU4KOwwIl6wF6H3ISvm.jpg",
  "Ratings": [
    { "Source": "Internet Movie Database", "Value": "8.8/10" },
    { "Source": "Rotten Tomatoes", "Value": "81%" },
    { "Source": "Metacritic", "Value": "67/100" }
  ],
  "Metascore": "67",
  "imdbRating": "8.8",
  "imdbVotes": "2,669,989",
  "imdbID": "tt0137523",
  "Type": "movie",
  "DVD": "N/A",
  "BoxOffice": "$38,003,039",
  "Production": "N/A",
  "Website": "N/A",
  "Response": "True"
}
```

Para una serie como The Wire (`i=tt0306414`), la respuesta termina con `"Type": "series"`, `"totalSeasons": "5"` y `"Response": "True"`.

## Buscar con s

Envía `s` para obtener una lista en lugar de un solo título. Cada página contiene 10 elementos, y `totalResults` da el total como cadena de texto. Pide `page=2` para los elementos 11 a 20, y sigue hasta haber leído `totalResults` elementos. Una página posterior a la última responde `Movie not found!`.

```bash
curl -sf "https://api.amodb.dev/omdb/?s=Matrix&type=movie&page=1&apikey=$AMODB_KEY"
```

| Campo          | Notas                                                                        |
| -------------- | ---------------------------------------------------------------------------- |
| `Search`       | Array de hasta 10 elementos con `Title`, `Year`, `imdbID`, `Type`, `Poster`. |
| `totalResults` | Número de todas las coincidencias, como cadena de texto.                     |
| `Response`     | `True` o `False`.                                                            |

```json
{
  "Search": [
    {
      "Title": "The Matrix",
      "Year": "1999",
      "imdbID": "tt0133093",
      "Type": "movie",
      "Poster": "https://img.amodb.dev/t/p/w300/kEDbym5htJgDQNenjUtSJxAHysB.jpg"
    },
    {
      "Title": "The Matrix Reloaded",
      "Year": "2003",
      "imdbID": "tt0234215",
      "Type": "movie",
      "Poster": "https://img.amodb.dev/t/p/w300/d0xVNNxIYxId2qHkqpgE39soOvD.jpg"
    }
  ],
  "totalResults": "20",
  "Response": "True"
}
```

La lista se recorta a 2 de 10 elementos.

## Leer el array Ratings

`Ratings` contiene un objeto por fuente, cada uno con `Source` y `Value`, y `Value` es texto como `8.8/10`. Las fuentes son `Internet Movie Database`, `Rotten Tomatoes` y `Metacritic`, y solo aparecen las que se conocen para el título. Los campos planos `imdbRating`, `imdbVotes` y `Metascore` repiten parte de los mismos datos. Divide `Value` por la barra si necesitas un número. Para números tipados y una puntuación de Kinopoisk y de TMDB, usa en su lugar el endpoint de [puntuaciones](https://amodb.dev/es/ratings/).

## Errores

Los fallos de consulta devuelven `{"Response":"False","Error":"..."}`. La mayoría llegan con HTTP 200, así que lee `Error` y decide según el texto, no solo según el estado HTTP.

| Texto de `Error`                            | HTTP | Cuándo                                                                                                                         |
| ------------------------------------------- | ---- | ------------------------------------------------------------------------------------------------------------------------------ |
| `Movie not found!`                          | 200  | Ningún título coincide con `t`, el valor de `i` es válido pero desconocido, o una página de búsqueda es posterior a la última. |
| `Incorrect IMDb ID.`                        | 200  | El valor de `i` no tiene la forma de un id de IMDb.                                                                            |
| `Too many results.`                         | 200  | El texto de búsqueda tiene menos de 3 letras o coincide con demasiados títulos. Alarga el texto o añade `type` o `y`.          |
| `Something went wrong.`                     | 200  | No se envió ninguno de `i`, `t` y `s`.                                                                                         |
| `Only r=json is supported.`                 | 400  | `r` tiene un valor distinto de `json`.                                                                                         |
| `No API key provided.` o `Invalid API key!` | 401  | La `apikey` falta o es incorrecta.                                                                                             |
| `Request limit reached!`                    | 429  | Superaste tus solicitudes por minuto. Espera los segundos de `Retry-After`.                                                    |

Un plan terminado responde HTTP 402. Consulta los [errores](https://amodb.dev/es/errors/) y los [límites de solicitudes](https://amodb.dev/es/rate-limits/).

## Migrar un cliente de OMDb

La migración son dos cambios: la URL base y la clave. Nada más cambia en la solicitud.

```js
// Before: the base URL and key of your current OMDb setup.
// After:
const OMDB_BASE = 'https://api.amodb.dev/omdb/';
const OMDB_KEY = process.env.AMODB_KEY;
```

Quita `r=xml` si lo envías. Un cliente que lee episodios, `Season` o `callback` necesita otra fuente para esas partes. El límite de solicitudes es por clave, así que las llamadas al estilo de OMDb y las [llamadas al estilo de TMDB](https://amodb.dev/es/movies/) comparten un solo presupuesto de 20, 40 o 120 solicitudes por minuto.

## Notas prácticas

- Trata todos los valores como texto. Convierte `Year`, `imdbRating` y `totalResults` por tu cuenta, y trata `N/A` como dato ausente.
- Usa `plot=full` solo cuando muestres la sinopsis larga. `short` mantiene las respuestas más pequeñas.
- Las consultas por `i` o `t` se guardan en caché más tiempo que las búsquedas con `s`, así que una consulta repetida devuelve la respuesta almacenada.
- Para obtener un id de TMDB a partir de un id de IMDb, usa la [búsqueda por id externo](https://amodb.dev/es/find-by-external-id/).
- Los pósteres están en `w300`. Para otros tamaños, construye la dirección con el `poster_path` al estilo de TMDB y la lista de tamaños de [imágenes](https://amodb.dev/es/images-api/).
- Mantén la clave en un servidor. Una `apikey` en la URL de una página es visible para todos los visitantes.

## Preguntas y respuestas

### ¿Necesito una clave distinta para el endpoint de OMDb?

No. La misma clave de 32 caracteres funciona en las rutas al estilo de TMDB y en el endpoint de OMDb. Envíala como el parámetro de consulta apikey, exactamente como lo hace hoy un cliente de OMDb.

### ¿Puedo pedir XML?

No. Solo se sirve r=json. Una solicitud con r=xml devuelve HTTP 400 con el texto Only r=json is supported., así que quita ese parámetro o ponlo en json antes de cambiar la URL base.

### ¿Por qué todos los valores son cadenas de texto?

El cuerpo sigue a OMDb campo por campo, y ese formato envía como texto números como Year, imdbRating y totalResults. Conviértelos en tu propio código. Los valores desconocidos se leen como N/A.

### ¿Se admiten temporadas y episodios?

No. Los parámetros Season, Episode, callback y v se ignoran, y type=episode no encuentra nada. La respuesta de una serie tiene totalSeasons pero no datos de episodios. Usa los endpoints tv al estilo de TMDB para las temporadas.

### ¿De dónde vienen los pósteres?

El campo Poster contiene una dirección en img.amodb.dev con el tamaño w300. Las imágenes no necesitan clave, así que puedes poner la dirección directamente en una etiqueta img.

## Páginas relacionadas

- [Alternativa a la API de OMDb](https://amodb.dev/es/omdb-api-alternative/): ¿Te limita el tope diario de OMDb o necesitas más de un registro por llamada? amodb responde al estilo OMDb y sirve endpoints TMDB v3 con la misma clave.
- [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.
- [API de detalles de película](https://amodb.dev/es/movies/): API de detalles de película con rutas y JSON de TMDB v3. Obtén una película por id y añade créditos, puntuaciones y moods con append_to_response, en 14 idiomas.
- [API de imágenes y host de imágenes](https://amodb.dev/es/images-api/): API de imágenes de películas con rutas TMDB v3: lista pósters, fondos, logos y fotogramas por título y cárgalos desde img.amodb.dev en 10 tamaños sin clave.
- [Autenticación](https://amodb.dev/es/authentication/): Cómo enviar tu clave de amodb: api_key en la consulta, un encabezado Bearer o apikey en llamadas OMDb. Formato, almacenamiento, rotación y errores 401.
- [Inicio rápido](https://amodb.dev/es/quickstart/): Haz tu primera llamada a amodb: consigue una clave, pide los detalles de una película en curl, JavaScript, Python, PHP o Go y carga el póster. En 2 minutos.

Actualizado: 2026-10-18. Source: https://amodb.dev/es/omdb-endpoint/
