Endpoints de em alta e de listas

Os endpoints de em alta e de listas retornam páginas ranqueadas de filmes, séries ou pessoas. Use GET /3/trending/{media_type}/{time_window} para os rankings do dia e da semana, e os caminhos de movie e tv para populares, mais bem avaliados, em cartaz, em breve, no ar hoje e no ar. Cada página tem 20 resultados, com cache de 30 minutos.

Atualizado em Ver em Markdown

Obter os títulos em alta

GET /3/trending/{media_type}/{time_window} retorna uma página ranqueada do que as pessoas estão assistindo ou pesquisando agora. media_type é all, movie, tv ou person. time_window é day ou week. Os rankings do dia mudam rápido e servem para uma faixa “hoje à noite”. Os rankings da semana são mais estáveis e servem para uma página inicial.

O exemplo pede o ranking semanal de filmes e imprime os dez primeiros títulos.

bashjspyphpgo
curl -s "https://api.amodb.dev/3/trending/movie/week?language=en-US&page=1" \
  -H "Authorization: Bearer $AMODB_KEY"
const url = 'https://api.amodb.dev/3/trending/movie/week?language=en-US&page=1';
const res = await fetch(url, { headers: { Authorization: `Bearer ${process.env.AMODB_KEY}` } });
if (!res.ok) throw new Error(`amodb returned ${res.status}`);
const chart = await res.json();
for (const [i, m] of chart.results.slice(0, 10).entries()) {
  console.log(i + 1, m.title, m.release_date);
}
import os
import requests

r = requests.get(
    "https://api.amodb.dev/3/trending/movie/week",
    params={"language": "en-US", "page": 1},
    headers={"Authorization": f"Bearer {os.environ['AMODB_KEY']}"},
    timeout=10,
)
r.raise_for_status()
for i, m in enumerate(r.json()["results"][:10], start=1):
    print(i, m["title"], m.get("release_date"))
<?php
$url = 'https://api.amodb.dev/3/trending/movie/week?language=en-US&page=1';
$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");
}
$chart = json_decode($body, true);
foreach (array_slice($chart['results'], 0, 10) as $i => $m) {
    echo ($i + 1), ' ', $m['title'], ' ', $m['release_date'] ?? '', PHP_EOL;
}
package main

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

type Chart struct {
	Results []struct {
		Title       string `json:"title"`
		ReleaseDate string `json:"release_date"`
	} `json:"results"`
}

func main() {
	url := "https://api.amodb.dev/3/trending/movie/week?language=en-US&page=1"
	req, _ := http.NewRequest("GET", url, nil)
	req.Header.Set("Authorization", "Bearer "+os.Getenv("AMODB_KEY"))
	client := &http.Client{Timeout: 10 * time.Second}
	res, err := client.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()
	if res.StatusCode != http.StatusOK {
		panic(res.Status)
	}
	var chart Chart
	if err := json.NewDecoder(res.Body).Decode(&chart); err != nil {
		panic(err)
	}
	for i, m := range chart.Results {
		if i == 10 {
			break
		}
		fmt.Println(i+1, m.Title, m.ReleaseDate)
	}
}

Parâmetros

  • media_typecaminhoobrigatório
    all, movie, tv ou person.
  • time_windowcaminhoobrigatório
    day ou week.
  • api_keyconsultaum dos dois
    Sua chave. Use este parâmetro ou o header Authorization: Bearer.
  • languageconsulta
    Tag do TMDB como en-US ou ru-RU. 14 idiomas base são atendidos, qualquer outro volta para o inglês.
  • pageconsulta
    Número da página, de 1 a 500. Cada página tem 20 resultados.

Campos da resposta

CampoTipoObservações
pageinteiroA página que você pediu.
resultsarrayObjetos de filme, série ou pessoa, do melhor ranking para o pior.
total_pages, total_resultsinteiroTotais de paginação. Os rankings em alta informam no máximo 500 páginas e 10000 resultados.
media_typestringmovie, tv ou person em todo item em alta. Leia-o quando pedir all.
idinteiroUse com filmes, séries de TV ou pessoas.
title, original_titlestringItens de filme. Os itens de série usam name e original_name.
release_date, first_air_datestringYYYY-MM-DD para itens de filme e de série.
genre_idsarrayIds numéricos. Os nomes vêm de gêneros.
popularity, vote_average, vote_countnúmeroDados do ranking e a nota agregada dos usuários.
poster_path, backdrop_path, profile_pathstring ou nullAcrescente a https://img.amodb.dev/t/p/{size}.
name, original_name, gender, known_for_departmentstring ou inteiroItens de pessoa. known_for é um array vazio nos itens de pessoa em alta.

Exemplo de resposta

JSON
{
  "page": 1,
  "results": [
    {
      "adult": false,
      "backdrop_path": "/7ULXMNvmZSi13zN3EZjz8wbER9B.jpg",
      "genre_ids": [28, 53],
      "id": 1561726,
      "original_language": "en",
      "original_title": "Masterplan",
      "overview": "When a legendary thief sets his sights on the Mona Lisa, he recruits two young strangers to help him before...",
      "popularity": 189.8286,
      "poster_path": "/3x3AfF0qVwSUDDciTaNKcPHZUN8.jpg",
      "release_date": "2026-10-16",
      "title": "Masterplan",
      "video": false,
      "vote_average": 7.279,
      "vote_count": 61,
      "media_type": "movie"
    },
    {
      "adult": false,
      "backdrop_path": "/mBZKC8ActTlM4W3HEGI1Cl1RtO3.jpg",
      "genre_ids": [878, 9648, 28],
      "id": 1058424,
      "original_language": "ko",
      "original_title": "호프",
      "overview": "In the remote South Korean village of Hope Harbor, police chief Bum-seok and officer Sung-ae are called to...",
      "popularity": 294.6518,
      "poster_path": "/bcK5naYzzfY0JBCgrPrsrbV6NO1.jpg",
      "release_date": "2026-07-15",
      "title": "Hope",
      "video": false,
      "vote_average": 6.917,
      "vote_count": 246,
      "media_type": "movie"
    },
    {
      "adult": false,
      "backdrop_path": "/5YfPIIMzGBkIjHt3PTXBWyfBTGS.jpg",
      "genre_ids": [28, 14],
      "id": 1153576,
      "original_language": "en",
      "original_title": "Street Fighter",
      "overview": "In 1993, estranged Street Fighters Ryu and Ken Masters are thrown back into combat when the mysterious Chun...",
      "popularity": 209.3923,
      "poster_path": "/utKzCSCz2HtXwcDGfWLj2IHhSob.jpg",
      "release_date": "2026-10-13",
      "title": "Street Fighter",
      "video": false,
      "vote_average": 6.316,
      "vote_count": 76,
      "media_type": "movie"
    }
  ],
  "total_pages": 500,
  "total_results": 10000
}

A resposta veio da API real e foi cortada para 3 das 20 entradas da página 1. Os textos longos de overview estão abreviados, e posições e contagens mudam a cada atualização.

Listas de filmes

Os rankings de filmes têm um formato só: um array results paginado de objetos de filme. now_playing e upcoming acrescentam um objeto dates com minimum e maximum, a janela de lançamentos que a lista cobre. Os quatro aceitam language, page e region.

Método e caminhoRetorna
GET /movie/now_playingFilmes lançados dentro da janela dates em torno de hoje, mais dates
GET /movie/popularFilmes ordenados pela popularidade atual
GET /movie/top_ratedFilmes ordenados pela nota dos usuários
GET /movie/upcomingFilmes com data de lançamento no futuro, mais dates
GET /movie/latestUm objeto de filme: a entrada mais recente do catálogo. Não é uma lista

Um objeto dates real é assim:

JSON
{ "dates": { "maximum": "2026-10-21", "minimum": "2026-09-09" } }

region é um código ISO 3166-1 em maiúsculas, como DE ou GB. Em now_playing e upcoming ele mantém só os títulos lançados nesse país, então a lista é uma parte pequena da mundial. Um código desconhecido retorna uma lista vazia. Em popular e top_rated ele só troca release_date pela data local e não muda a ordem. Para ver onde um filme está em cartaz, combine now_playing com horários de sessões.

Listas de séries

Os rankings de séries retornam os mesmos campos de paginação. Os itens usam name, original_name, first_air_date e origin_country no lugar dos nomes dos filmes. Os quatro aceitam language e page.

Método e caminhoRetornaParâmetros extras
GET /tv/airing_todaySéries com um episódio no ar hojetimezone
GET /tv/on_the_airSéries com um episódio no ar nos próximos diastimezone
GET /tv/popularSéries ordenadas pela popularidade atualnenhum
GET /tv/top_ratedSéries ordenadas pela nota dos usuáriosnenhum
GET /tv/latestUm objeto de série: a entrada mais recente do catálogo. Não é uma listanenhum

timezone é um nome IANA como Europe/Rome. Ele decide qual dia do calendário conta como “hoje”, então airing_today retorna um conjunto diferente para Asia/Tokyo e para Pacific/Auckland. As listas de séries não têm o parâmetro region.

Listas de pessoas

GET /person/popular retorna uma lista paginada de pessoas ordenadas por popularidade, com language e page. Cada entrada tem id, name, original_name, known_for_department, gender, profile_path, popularity e um array known_for com até 3 cards de filme ou de série, cada um com media_type. Abra uma pessoa em pessoas.

JSON
{
  "page": 1,
  "results": [
    {
      "adult": false,
      "gender": 1,
      "id": 1247604,
      "known_for_department": "Acting",
      "name": "Agnez Mo",
      "original_name": "Agnez Mo",
      "popularity": 45.8988,
      "profile_path": "/7GuBJxf5szQRCKLk3iG2ztfCo39.jpg",
      "known_for": [
        {
          "adult": false,
          "backdrop_path": "/pF0qkRsrHkdYadPWY9AMeFZfcwk.jpg",
          "first_air_date": "2022-02-03",
          "genre_ids": [10759],
          "id": 108978,
          "name": "Reacher",
          "origin_country": ["US"],
          "original_language": "en",
          "original_name": "Reacher",
          "overview": "Jack Reacher, a veteran military police investigator, has just recently enter...",
          "popularity": 411.841,
          "poster_path": "/f1VCQIG2iCyOookdgOzwtUpwWC0.jpg",
          "vote_average": 8.1,
          "vote_count": 3508,
          "media_type": "tv"
        }
      ]
    }
  ],
  "total_pages": 1001,
  "total_results": 20001
}

O amodb não oferece person/latest nem os feeds de changes.

Escolher a lista certa para cada tela

TelaChamadaAtualização
Faixa de destaque da página inicial/trending/all/weekNo máximo a cada 30 minutos
Aba “Nos cinemas”/movie/now_playing com o seu regionNo máximo a cada 30 minutos
Aba “Em breve”/movie/upcoming com o seu regionNo máximo a cada 30 minutos
Faixa “Hoje à noite na TV”/tv/airing_today com um timezoneNo máximo a cada 30 minutos
Favoritos de todos os tempos/movie/top_ratedUma vez por dia basta
Pessoas que o público está procurando/trending/person/dayNo máximo a cada 30 minutos
Pessoas mais populares no geral/person/popularNo máximo a cada 30 minutos

Erros

HTTPstatus_codeQuando
4017A chave está ausente ou incorreta.
40236O período do plano terminou.
40434O caminho não existe, por exemplo um nome de lista com erro de grafia ou um media_type ou time_window que não está nas listas acima.
40537Você usou um método de escrita em um caminho de lista.
42925Você passou do seu limite de requisições por minuto. Espere os segundos indicados em Retry-After.
50011Um valor de page acima de 500.

A tabela completa está na página de erros. Os limites por plano estão em limites de requisições.

Notas práticas

  • O cache de borda guarda as listas de em alta, populares, em cartaz e no ar por 30 minutos, e todas as chaves compartilham a mesma entrada. Uma tarefa de atualização a cada 30 minutos basta.
  • As páginas vão de 1 a 500. As listas de populares informam total_results de 20001, que é um teto e não uma contagem real. Depois da página 500, use o discover com sort_by e filtros, que alcança títulos que um ranking nunca mostra.
  • Os itens da lista trazem só os campos necessários para um card. Para duração, imdb_id ou créditos, chame os detalhes do filme com append_to_response, uma vez por card que o usuário abrir.
  • language controla o idioma de títulos e sinopses. Títulos sem tradução voltam no texto original, então confira se há strings vazias antes de renderizar um card.
  • Guarde o id de uma lista, não a posição. As posições mudam a cada atualização.