# API de detalhes de filmes

> O endpoint de detalhes retorna um filme por id em GET /3/movie/{movie_id}. O JSON segue o TMDB v3, então os clientes existentes só precisam de uma nova URL base. Use append_to_response para buscar credits, videos, images e os extras do amodb ratings, moods, soundtracks, wikidata e showtimes em uma só requisição.

## Endpoint

`GET /3/movie/{movie_id}`

```bash
curl "https://api.amodb.dev/3/movie/550?language=en-US" \
  -H "Authorization: Bearer $AMODB_KEY"
```

Resposta:

```json
{
  "adult": false,
  "backdrop_path": "/b9HyPoxwxjxkWEUL5ErZdhApQe2.jpg",
  "belongs_to_collection": null,
  "budget": 63000000,
  "genres": [
    {
      "id": 18,
      "name": "Drama"
    },
    {
      "id": 53,
      "name": "Thriller"
    }
  ],
  "homepage": "https://www.20thcenturystudios.com/movies/fight-club",
  "id": 550,
  "imdb_id": "tt0137523",
  "origin_country": [
    "US",
    "DE"
  ],
  "original_language": "en",
  "original_title": "Fight Club",
  "overview": "A ticking-time-bomb insomniac and a slippery soap salesman channel primal male aggression into a shocking new form of therapy. Their concept catches on, with underground \"fight clubs\" forming in every town, until an eccentric gets in the wa...",
  "popularity": 39.0054,
  "poster_path": "/jSziioSwPVrOy9Yow3XhWIBDjq1.jpg",
  "production_companies": [
    {
      "id": 25,
      "logo_path": "/nM2MfoMqzJQRiSynsDabOtFKetD.png",
      "name": "20th Century Fox",
      "origin_country": "US"
    },
    {
      "id": 508,
      "logo_path": "/4sGWXoboEkWPphI6es6rTmqkCBh.png",
      "name": "Regency Enterprises",
      "origin_country": "US"
    },
    {
      "id": 711,
      "logo_path": "/tEiIH5QesdheJmDAqQwvtN60727.png",
      "name": "Fox 2000 Pictures",
      "origin_country": "US"
    }
  ],
  "production_countries": [
    {
      "iso_3166_1": "US",
      "name": "United States of America"
    },
    {
      "iso_3166_1": "DE",
      "name": "Germany"
    }
  ],
  "release_date": "1999-10-15",
  "revenue": 101209702,
  "runtime": 139,
  "spoken_languages": [
    {
      "english_name": "English",
      "iso_639_1": "en",
      "name": "English"
    }
  ],
  "status": "Released",
  "tagline": "Mischief. Mayhem. Soap.",
  "title": "Fight Club",
  "video": false,
  "vote_average": 8.437,
  "vote_count": 33042
}
```

## Obter os detalhes de um filme

`GET /3/movie/{movie_id}` retorna o registro principal de um filme: títulos, sinopse, duração, gêneros, data de lançamento, orçamento, receita, produtoras e caminhos de imagens. O id é o mesmo id numérico que o TMDB usa, então um filme que você já guarda como `550` mantém esse id aqui.

O exemplo abaixo pede o filme em inglês e acrescenta as avaliações dele na mesma chamada.

```bash
curl -s "https://api.amodb.dev/3/movie/550?language=en-US&append_to_response=ratings" \
  -H "Authorization: Bearer $AMODB_KEY"
```

```js
const url = 'https://api.amodb.dev/3/movie/550?language=en-US&append_to_response=ratings';
const res = await fetch(url, { headers: { Authorization: `Bearer ${process.env.AMODB_KEY}` } });
if (!res.ok) throw new Error(`amodb returned ${res.status}`);
const movie = await res.json();
console.log(movie.title, movie.runtime, movie.ratings.imdb?.value);
```

```python
import os
import requests

r = requests.get(
    "https://api.amodb.dev/3/movie/550",
    params={"language": "en-US", "append_to_response": "ratings"},
    headers={"Authorization": f"Bearer {os.environ['AMODB_KEY']}"},
    timeout=10,
)
r.raise_for_status()
movie = r.json()
imdb = movie["ratings"]["imdb"]
print(movie["title"], movie["runtime"], imdb and imdb["value"])
```

```php
<?php
$url = 'https://api.amodb.dev/3/movie/550?language=en-US&append_to_response=ratings';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 10,
    CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('AMODB_KEY')],
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($status !== 200) {
    throw new RuntimeException("amodb returned $status");
}
$movie = json_decode($body, true);
echo $movie['title'], ' ', $movie['runtime'], ' ', $movie['ratings']['imdb']['value'] ?? 'n/a', PHP_EOL;
```

```go
package main

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

type Movie struct {
	Title   string `json:"title"`
	Runtime int    `json:"runtime"`
}

func main() {
	url := "https://api.amodb.dev/3/movie/550?language=en-US"
	req, _ := http.NewRequest("GET", url, nil)
	req.Header.Set("Authorization", "Bearer "+os.Getenv("AMODB_KEY"))
	res, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()
	if res.StatusCode != http.StatusOK {
		panic(res.Status)
	}
	var m Movie
	json.NewDecoder(res.Body).Decode(&m)
	fmt.Println(m.Title, m.Runtime)
}
```

### Parâmetros

| Parâmetro            | Em       | Obrigatório | Descrição                                                                                    |
| -------------------- | -------- | ----------- | -------------------------------------------------------------------------------------------- |
| `movie_id`           | caminho  | sim         | Id numérico do filme, por exemplo `550`.                                                     |
| `api_key`            | consulta | um dos dois | Sua chave. Use este parâmetro ou o header `Authorization: Bearer`.                           |
| `language`           | consulta | não         | Tag do TMDB como `en-US`, `ru-RU` ou `pt-BR`. 14 idiomas base são atendidos. Padrão `en-US`. |
| `append_to_response` | consulta | não         | Lista separada por vírgulas com até 20 subrecursos para juntar à resposta.                   |

### Campos da resposta

| Campo                          | Tipo            | Observações                                                                                        |
| ------------------------------ | --------------- | -------------------------------------------------------------------------------------------------- |
| `id`                           | inteiro         | Id do filme.                                                                                       |
| `imdb_id`                      | string ou null  | Id do IMDb, como `tt0137523`.                                                                      |
| `title`, `original_title`      | string          | Título localizado e título original.                                                               |
| `original_language`            | string          | Código de idioma, como `en`.                                                                       |
| `overview`, `tagline`          | string          | Texto localizado, vazio quando não existe tradução.                                                |
| `homepage`                     | string          | Site oficial, vazio quando desconhecido.                                                           |
| `release_date`                 | string          | `YYYY-MM-DD`, vazio quando desconhecida.                                                           |
| `status`                       | string          | Estado de lançamento, por exemplo `Released` ou `In Production`.                                   |
| `runtime`                      | inteiro         | Minutos.                                                                                           |
| `budget`, `revenue`            | inteiro         | Dólares americanos, `0` quando desconhecido.                                                       |
| `genres`                       | array           | Objetos com `id` e `name`.                                                                         |
| `belongs_to_collection`        | objeto ou null  | `id`, `name`, `poster_path`, `backdrop_path`. Veja [coleções](https://amodb.dev/pt/collections/).  |
| `production_companies`         | array           | `id`, `logo_path`, `name`, `origin_country`.                                                       |
| `production_countries`         | array           | `iso_3166_1`, `name`.                                                                              |
| `spoken_languages`             | array           | `english_name`, `iso_639_1`, `name`.                                                               |
| `origin_country`               | array           | Códigos de país, como `US`.                                                                        |
| `poster_path`, `backdrop_path` | string ou null  | Acrescente a `https://img.amodb.dev/t/p/{size}`. Veja [imagens](https://amodb.dev/pt/images-api/). |
| `popularity`                   | número          | Valor relativo usado pela lista de populares.                                                      |
| `vote_average`, `vote_count`   | número, inteiro | Nota agregada dos usuários.                                                                        |
| `adult`, `video`               | booleano        | Os dois são `false`. Títulos adultos nunca são atendidos.                                          |

### Exemplo de resposta

`GET /3/movie/550?language=en-US&append_to_response=ratings`, com arrays e textos longos abreviados:

```json
{
  "adult": false,
  "backdrop_path": "/b9HyPoxwxjxkWEUL5ErZdhApQe2.jpg",
  "belongs_to_collection": null,
  "budget": 63000000,
  "genres": [
    {
      "id": 18,
      "name": "Drama"
    },
    {
      "id": 53,
      "name": "Thriller"
    }
  ],
  "homepage": "https://www.20thcenturystudios.com/movies/fight-club",
  "id": 550,
  "imdb_id": "tt0137523",
  "origin_country": [
    "US",
    "DE"
  ],
  "original_language": "en",
  "original_title": "Fight Club",
  "overview": "A ticking-time-bomb insomniac and a slippery soap salesman channel primal male aggression into a shocking n...",
  "popularity": 39.0054,
  "poster_path": "/jSziioSwPVrOy9Yow3XhWIBDjq1.jpg",
  "production_companies": [
    {
      "id": 25,
      "logo_path": "/nM2MfoMqzJQRiSynsDabOtFKetD.png",
      "name": "20th Century Fox",
      "origin_country": "US"
    },
    {
      "id": 508,
      "logo_path": "/4sGWXoboEkWPphI6es6rTmqkCBh.png",
      "name": "Regency Enterprises",
      "origin_country": "US"
    }
  ],
  "production_countries": [
    {
      "iso_3166_1": "US",
      "name": "United States of America"
    },
    {
      "iso_3166_1": "DE",
      "name": "Germany"
    }
  ],
  "release_date": "1999-10-15",
  "revenue": 101209702,
  "runtime": 139,
  "spoken_languages": [
    {
      "english_name": "English",
      "iso_639_1": "en",
      "name": "English"
    }
  ],
  "status": "Released",
  "tagline": "Mischief. Mayhem. Soap.",
  "title": "Fight Club",
  "video": false,
  "vote_average": 8.437,
  "vote_count": 33039,
  "ratings": {
    "imdb": {
      "value": 8.8,
      "votes": 2669989
    },
    "kinopoisk": {
      "value": 8.7,
      "votes": null
    },
    "metacritic": {
      "value": 67,
      "votes": null
    },
    "rotten_tomatoes": {
      "value": 81,
      "votes": null
    },
    "tmdb": {
      "value": 8.437,
      "votes": 33039
    }
  }
}
```

O bloco `ratings` vem de `append_to_response`. Cada provedor é um objeto `{value, votes}` ou `null`, como descrito em [avaliações](https://amodb.dev/pt/ratings/).

## Combinar dados com append_to_response

Uma chamada pode substituir seis. Liste os subrecursos de que você precisa e cada um chega sob a própria chave. Os valores padrão do TMDB funcionam: `credits`, `videos`, `images`, `keywords`, `translations`, `external_ids`, `release_dates`, `alternative_titles`, `recommendations`, `similar`, `reviews`, `lists` e `watch/providers`. O amodb acrescenta mais cinco.

| Valor         | Adiciona                                                           | Detalhes                                                           |
| ------------- | ------------------------------------------------------------------ | ------------------------------------------------------------------ |
| `ratings`     | Notas do IMDb, Kinopoisk, Metacritic, Rotten Tomatoes e TMDB       | [Avaliações](https://amodb.dev/pt/ratings/)                        |
| `moods`       | Medidores de mood                                                  | [Moods](https://amodb.dev/pt/moods/)                               |
| `soundtracks` | Faixas que tocam no filme                                          | [Trilhas sonoras](https://amodb.dev/pt/soundtracks/)               |
| `wikidata`    | Id do Wikidata, orçamento, bilheteria, prêmios, locais de filmagem | [Buscar por ID externo](https://amodb.dev/pt/find-by-external-id/) |
| `showtimes`   | Horários de sessões no cinema, quando conhecidos                   | [Horários de sessões](https://amodb.dev/pt/showtimes/)             |

Cada bloco acrescentado conta como parte de uma única requisição HTTP. Uma requisição com dez valores acrescentados ainda usa uma das suas 20, 40 ou 120 requisições por minuto. Os blocos `ratings`, `moods` e `soundtracks` acrescentados omitem a chave `id` que os caminhos isolados retornam.

## Endpoints de filmes relacionados

Todos os caminhos abaixo compartilham a base `https://api.amodb.dev/3` e o parâmetro `language`.

| Método e caminho                           | Retorna                                                   | Parâmetros extras |
| ------------------------------------------ | --------------------------------------------------------- | ----------------- |
| `GET /movie/{movie_id}/alternative_titles` | `{id, titles}`, muitas vezes um array vazio               | nenhum            |
| `GET /movie/{movie_id}/release_dates`      | Datas de lançamento e classificações indicativas por país | nenhum            |
| `GET /movie/{movie_id}/recommendations`    | Uma lista de 20 filmes recomendados                       | nenhum            |
| `GET /movie/{movie_id}/similar`            | Uma lista de 20 filmes semelhantes                        | nenhum            |
| `GET /movie/{movie_id}/reviews`            | `results` fica vazio na maioria dos títulos               | nenhum            |
| `GET /movie/{movie_id}/lists`              | Listas públicas que contêm o filme                        | `page`            |
| `GET /movie/{movie_id}/watch/providers`    | Provedores de streaming e aluguel por país                | nenhum            |
| `GET /movie/latest`                        | O registro de filme mais novo adicionado                  | nenhum            |

As listas de recomendados e de semelhantes sempre retornam a página 1 com 20 itens. A resposta de `lists` é paginada com `page`, 20 listas por página. As listas paginadas no resto da API aceitam `page` de 1 a 500.

Créditos, imagens, vídeos, traduções, palavras-chave e ids externos têm páginas próprias: [créditos](https://amodb.dev/pt/credits/), [imagens](https://amodb.dev/pt/images-api/), [vídeos e trailers](https://amodb.dev/pt/videos-trailers/), [traduções](https://amodb.dev/pt/translations/), [palavras-chave](https://amodb.dev/pt/keywords/) e [buscar por ID externo](https://amodb.dev/pt/find-by-external-id/). O amodb não oferece os caminhos `changes` do TMDB.

## Erros

Os erros usam o corpo do TMDB, por exemplo `{"success": false, "status_code": 34, "status_message": "The resource you requested could not be found."}`.

| HTTP | status_code | Quando                                                                                              |
| ---- | ----------- | --------------------------------------------------------------------------------------------------- |
| 401  | 7           | A chave está ausente ou incorreta.                                                                  |
| 402  | 36          | O período do plano terminou.                                                                        |
| 404  | 34          | Nenhum filme com esse id, um caminho que não é oferecido ou um título adulto.                       |
| 405  | 37          | Você chamou um método de escrita, como avaliar um filme.                                            |
| 429  | 25          | Você passou do seu limite de requisições por minuto. Espere os segundos indicados em `Retry-After`. |

A lista completa está na página de [erros](https://amodb.dev/pt/errors/), e os limites por plano estão em [limites de requisições](https://amodb.dev/pt/rate-limits/).

## Notas práticas

- Guarde `id` e `imdb_id` juntos. Qualquer um dos dois encontra o filme de novo por meio de [buscar por ID externo](https://amodb.dev/pt/find-by-external-id/).
- Peça o idioma que você exibe. Um campo de texto pode vir vazio quando não existe tradução nesse idioma, então verifique se há uma string vazia e peça de novo em `en-US` se precisar de um fallback.
- Guarde os detalhes em cache do seu lado por algumas horas. O cache do servidor já os mantém por 6 horas, então um cache menor no cliente não traz ganho.
- Para listar filmes em vez de ler um só, veja a [busca](https://amodb.dev/pt/search/), o [discover](https://amodb.dev/pt/discover/) e [em alta e listas](https://amodb.dev/pt/trending-lists/).

## Perguntas e respostas

### Preciso mudar o código do meu cliente TMDB?

Não, para os caminhos que o amodb atende. Caminhos, parâmetros de consulta e campos JSON são os mesmos do TMDB v3. Troque a URL base para https://api.amodb.dev/3 e use sua chave do amodb em api_key ou em um header Bearer.

### Quantas subrequisições o append_to_response pode combinar?

Até 20 valores em uma lista separada por vírgulas, como no TMDB. A chamada inteira é uma requisição HTTP, então conta uma vez no seu limite de requisições por minuto. Nomes desconhecidos são ignorados sem erro.

### Qual idioma é usado quando omito o parâmetro language?

Inglês (en-US). O parâmetro language aceita tags do TMDB como ru-RU ou pt-BR. Só os 14 idiomas base são atendidos, e qualquer outra tag volta para o inglês.

### Os métodos de escrita do TMDB, como avaliar um filme, são aceitos?

Não. Os métodos de escrita de conta, sessão, avaliação e listas retornam 405 com status_code 37 no corpo de erro do TMDB. Os caminhos de leitura de títulos, pessoas, listas e busca são atendidos. Alguns caminhos do TMDB, como changes, não são oferecidos.

### Quão atualizados são os dados?

Os detalhes de filmes ficam em cache por 6 horas, e o endpoint do filme mais recente por 10 minutos. Uma alteração em um registro pode levar até 6 horas para aparecer em uma chamada de detalhes.

## Páginas relacionadas

- [API de séries de TV](https://amodb.dev/pt/tv-series/): API de séries de TV com os mesmos caminhos e JSON do TMDB v3. Busque uma série por id com temporadas, emissoras, próximo episódio e classificações.
- [API de créditos](https://amodb.dev/pt/credits/): API de créditos com caminhos e JSON iguais aos do TMDB v3. Elenco e equipe técnica de filmes, séries, temporadas e episódios, com order, department e job.
- [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.
- [Avaliações de filmes e séries](https://amodb.dev/pt/ratings/): API de avaliações de filmes com as notas do IMDb, Kinopoisk, Metacritic, Rotten Tomatoes e TMDB em uma só chamada, com null se a fonte for desconhecida.
- [Endpoints de em alta e de listas](https://amodb.dev/pt/trending-lists/): API de filmes em alta com caminhos do TMDB v3: rankings do dia e da semana, listas em cartaz, populares, mais bem avaliados e em breve. Cache de 30 minutos.
- [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/movies/
