# Endpoint compatível com OMDb

> GET https://api.amodb.dev/omdb/ responde a requisições no estilo OMDb com os mesmos nomes de parâmetros e campos. Busque um título pelo id do IMDb com i ou pelo nome com t, ou pesquise com s. Os links de pôster apontam para img.amodb.dev. Só r=json, filmes e séries são atendidos. Troque a URL base e a chave, e seu cliente continua funcionando.

## Endpoint

`GET /omdb/`

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

Resposta:

```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 um título por id do IMDb ou por nome

`GET https://api.amodb.dev/omdb/` retorna um título como JSON plano com os nomes de campo do OMDb. Envie `i` para um id do IMDb como `tt0137523`, ou `t` para um título. A autenticação é o parâmetro de consulta `apikey`. A resposta tem `Response` igual a `True` em caso de sucesso e `False` em caso de falha.

O exemplo carrega Fight Club pelo id do IMDb e para com o texto de erro do OMDb quando `Response` é `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 | Em       | Obrigatório         | Descrição                                                               |
| --------- | -------- | ------------------- | ----------------------------------------------------------------------- |
| `apikey`  | consulta | sim                 | Sua chave do amodb.                                                     |
| `i`       | consulta | um de `i`, `t`, `s` | Id do IMDb do título: `tt` mais 7 a 9 dígitos, por exemplo `tt0137523`. |
| `t`       | consulta | um de `i`, `t`, `s` | Título a buscar, retorna a melhor correspondência.                      |
| `s`       | consulta | um de `i`, `t`, `s` | Texto de busca com pelo menos 3 letras, retorna uma lista.              |
| `type`    | consulta | não                 | `movie` ou `series`. `episode` não encontra nada.                       |
| `y`       | consulta | não                 | Ano de lançamento.                                                      |
| `plot`    | consulta | não                 | `short` ou `full`. Padrão `short`.                                      |
| `page`    | consulta | não                 | Página dos resultados da busca, de 1 a 100. Usado com `s`.              |
| `r`       | consulta | não                 | Somente `json`. Qualquer outro valor retorna HTTP 400.                  |

Os parâmetros `Season`, `Episode`, `callback` e `v` da API OMDb original não são suportados e são ignorados.

### Campos da resposta

| Campo                                            | Observações                                                                                                        |
| ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ |
| `Title`, `Year`, `Rated`, `Released`, `Runtime`  | Texto. `Released` aparece como `15 Oct 1999`.                                                                      |
| `Genre`, `Director`, `Writer`, `Actors`          | Nomes separados por vírgulas.                                                                                      |
| `Plot`, `Language`, `Country`, `Awards`          | Texto.                                                                                                             |
| `Poster`                                         | Endereço em `https://img.amodb.dev/t/p/w300/`.                                                                     |
| `Ratings`                                        | Array de objetos com `Source` e `Value`.                                                                           |
| `Metascore`, `imdbRating`, `imdbVotes`, `imdbID` | Texto, incluindo a contagem de votos com vírgulas.                                                                 |
| `Type`                                           | `movie` ou `series`.                                                                                               |
| `DVD`, `BoxOffice`, `Production`, `Website`      | Só filmes. `BoxOffice` traz um valor quando conhecido. `DVD`, `Production` e `Website` sempre aparecem como `N/A`. |
| `totalSeasons`                                   | Só séries, como texto. As respostas de séries não têm `DVD`, `BoxOffice`, `Production` nem `Website`.              |
| `Response`                                       | `True` ou `False`, sempre uma string.                                                                              |

Os campos seguem o OMDb, então um parser OMDb existente não precisa de mudança além da URL base.

### Exemplo de resposta

```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 uma série como The Wire (`i=tt0306414`), a resposta termina com `"Type": "series"`, `"totalSeasons": "5"` e `"Response": "True"`.

## Pesquisar com s

Envie `s` para obter uma lista em vez de um título. Cada página tem 10 itens, e `totalResults` dá a contagem total como string. Peça `page=2` para os itens 11 a 20 e continue até ter lido `totalResults` itens. Uma página além da última responde `Movie not found!`.

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

| Campo          | Observações                                                             |
| -------------- | ----------------------------------------------------------------------- |
| `Search`       | Array com até 10 itens com `Title`, `Year`, `imdbID`, `Type`, `Poster`. |
| `totalResults` | Contagem de todas as correspondências, como string.                     |
| `Response`     | `True` ou `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"
}
```

A lista foi cortada para 2 de 10 itens.

## Ler o array Ratings

`Ratings` contém um objeto por fonte, cada um com `Source` e `Value`, e o `Value` é um texto como `8.8/10`. As fontes são `Internet Movie Database`, `Rotten Tomatoes` e `Metacritic`, e só aparecem as conhecidas para o título. Os campos planos `imdbRating`, `imdbVotes` e `Metascore` repetem parte dos mesmos dados. Divida `Value` pela barra se precisar de um número. Para números tipados e para as notas do Kinopoisk e do TMDB, use o endpoint de [avaliações](https://amodb.dev/pt/ratings/).

## Erros

Falhas de consulta retornam `{"Response":"False","Error":"..."}`. A maioria vem com HTTP 200, então leia `Error` e decida pelo texto, não só pelo status HTTP.

| Texto de `Error`                             | HTTP | Quando                                                                                                              |
| -------------------------------------------- | ---- | ------------------------------------------------------------------------------------------------------------------- |
| `Movie not found!`                           | 200  | Nenhum título corresponde a `t`, o valor de `i` é válido mas desconhecido, ou uma página de busca passou da última. |
| `Incorrect IMDb ID.`                         | 200  | O valor de `i` não tem o formato de um id do IMDb.                                                                  |
| `Too many results.`                          | 200  | O texto de busca tem menos de 3 letras ou corresponde a títulos demais. Alongue o texto ou adicione `type` ou `y`.  |
| `Something went wrong.`                      | 200  | Nenhum entre `i`, `t` e `s` foi enviado.                                                                            |
| `Only r=json is supported.`                  | 400  | `r` está definido com qualquer valor diferente de `json`.                                                           |
| `No API key provided.` ou `Invalid API key!` | 401  | A `apikey` está ausente ou incorreta.                                                                               |
| `Request limit reached!`                     | 429  | Acima do seu limite de requisições por minuto. Espere os segundos indicados em `Retry-After`.                       |

Um plano encerrado responde HTTP 402. Veja [erros](https://amodb.dev/pt/errors/) e [limites de requisições](https://amodb.dev/pt/rate-limits/).

## Migrar um cliente OMDb

A migração são duas edições: a URL base e a chave. Nada mais na requisição muda.

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

Remova `r=xml` se você o envia. Um cliente que lê episódios, `Season` ou `callback` precisa de outra fonte para essas partes. O limite é por chave, então chamadas no estilo OMDb e [chamadas no estilo TMDB](https://amodb.dev/pt/movies/) compartilham um único orçamento de 20, 40 ou 120 requisições por minuto.

## Notas práticas

- Trate todo valor como texto. Converta `Year`, `imdbRating` e `totalResults` por conta própria e trate `N/A` como ausente.
- Use `plot=full` só quando exibir a sinopse longa. `short` mantém as respostas menores.
- Consultas por `i` ou `t` ficam em cache por mais tempo que buscas com `s`, então uma consulta repetida retorna a resposta armazenada.
- Para obter um id do TMDB a partir de um id do IMDb, chame [buscar por ID externo](https://amodb.dev/pt/find-by-external-id/).
- Os pôsteres estão em `w300`. Para outros tamanhos, monte o endereço a partir do `poster_path` no estilo TMDB e da lista de tamanhos em [imagens](https://amodb.dev/pt/images-api/).
- Mantenha a chave em um servidor. Uma `apikey` na URL de uma página fica visível para todos os visitantes.

## Perguntas e respostas

### Preciso de uma chave diferente para o endpoint OMDb?

Não. A mesma chave de 32 caracteres funciona nos caminhos no estilo TMDB e no endpoint OMDb. Envie-a no parâmetro de consulta apikey, exatamente como um cliente OMDb faz hoje.

### Posso pedir XML?

Não. Só r=json é atendido. Uma requisição com r=xml retorna HTTP 400 com o texto Only r=json is supported., então remova esse parâmetro ou defina-o como json antes de trocar a URL base.

### Por que todos os valores são strings?

O corpo segue o OMDb campo a campo, e esse formato envia números como Year, imdbRating e totalResults como strings. Converta-os no seu código. Valores desconhecidos aparecem como N/A.

### Temporadas e episódios são suportados?

Não. Os parâmetros Season, Episode, callback e v são ignorados, e type=episode não encontra nada. A resposta de uma série tem totalSeasons, mas nenhum dado de episódio. Use os endpoints tv no estilo TMDB para temporadas.

### De onde vêm os pôsteres?

O campo Poster contém um endereço em img.amodb.dev no tamanho w300. As imagens não exigem chave, então você pode colocar o endereço direto em uma tag img.

## Páginas relacionadas

- [Alternativa à API OMDb](https://amodb.dev/pt/omdb-api-alternative/): Bateu no limite diário do OMDb ou quer mais de um registro por chamada? O amodb responde no estilo OMDb e também serve endpoints TMDB v3, na mesma chave.
- [Buscar por ID externo](https://amodb.dev/pt/find-by-external-id/): Busque um filme, série ou pessoa por id do IMDb, TVDB, Wikidata ou Kinopoisk com o endpoint find do TMDB e leia ids externos e dados do Wikidata de um título.
- [API de detalhes de filmes](https://amodb.dev/pt/movies/): API de detalhes de filmes com caminhos e JSON do TMDB v3. Busque um filme por id e junte créditos, avaliações e moods com append_to_response, em 14 idiomas.
- [API de imagens e host de imagens](https://amodb.dev/pt/images-api/): API de imagens de filmes com caminhos do TMDB v3: liste pôsteres, backdrops, logos e stills por título e carregue-os de img.amodb.dev em 10 tamanhos, sem chave.
- [Autenticação](https://amodb.dev/pt/authentication/): Como enviar sua chave do amodb: api_key na consulta, um cabeçalho Authorization Bearer ou apikey nas chamadas OMDb. Formato, armazenamento, rotação e erros 401.
- [Início rápido](https://amodb.dev/pt/quickstart/): Faça sua primeira chamada ao amodb: obtenha uma chave, peça um filme em curl, JavaScript, Python, PHP ou Go e carregue o pôster. Menos de 2 minutos.

Atualizado: 2026-10-18. Source: https://amodb.dev/pt/omdb-endpoint/
