# Limites de requisições

> Cada plano define uma taxa em requisições por minuto: 20, 40 ou 120. O amodb conta as requisições em uma janela deslizante de 60 segundos. Toda resposta traz X-RateLimit-Limit, X-RateLimit-Remaining e X-RateLimit-Reset. Acima do limite você recebe HTTP 429 com status_code 25 e um cabeçalho Retry-After em segundos. Respostas em cache também contam.

## Limites por plano

| Requisições por minuto | Requisições por dia na taxa máxima |
| ---------------------- | ---------------------------------- |
| 20                     | 28.800                             |
| 40                     | 57.600                             |
| 120                    | 172.800                            |

Todo plano inclui os mesmos endpoints e dados. Veja [preços](https://amodb.dev/pt/pricing/) para os nomes e preços dos planos.

## Como a janela funciona

O amodb conta as requisições de cada chave nos últimos 60 segundos. A janela desliza: uma requisição feita às 12:00:30 deixa de contar às 12:01:30. Não há reinício na virada do minuto, então uma taxa constante funciona melhor que rajadas.

A verificação da chave e o limite de requisições rodam antes do cache de borda. Uma resposta servida do cache ainda conta como uma requisição.

## Cabeçalhos de resposta

Toda chamada feita com uma chave retorna estes cabeçalhos:

| Cabeçalho               | Significado                                                   |
| ----------------------- | ------------------------------------------------------------- |
| `X-RateLimit-Limit`     | Requisições permitidas a cada 60 segundos para esta chave.    |
| `X-RateLimit-Remaining` | Requisições restantes na janela atual.                        |
| `X-RateLimit-Reset`     | Segundos até a requisição contada mais antiga sair da janela. |
| `Retry-After`           | Só no 429: segundos de espera antes da próxima chamada.       |

## Quando você atinge o limite

A resposta é HTTP 429 com o corpo de erro do TMDB:

```json
{
  "success": false,
  "status_code": 25,
  "status_message": "Your request count (41) is over the allowed limit of (40)."
}
```

Aguarde `Retry-After` segundos e tente de novo. Não repita em um loop apertado.

```js
async function amodb(path) {
  for (let attempt = 0; attempt < 3; attempt++) {
    const res = await fetch(`https://api.amodb.dev${path}`, {
      headers: { Authorization: `Bearer ${process.env.AMODB_KEY}` },
    });
    if (res.status !== 429) return res.json();
    const wait = Number(res.headers.get("Retry-After") ?? 1);
    await new Promise((r) => setTimeout(r, wait * 1000));
  }
  throw new Error("amodb: still rate limited after 3 attempts");
}
```

```python
import os
import time
import requests

def amodb(path):
    for _ in range(3):
        res = requests.get(
            f"https://api.amodb.dev{path}",
            headers={"Authorization": f"Bearer {os.environ['AMODB_KEY']}"},
            timeout=10,
        )
        if res.status_code != 429:
            return res.json()
        time.sleep(int(res.headers.get("Retry-After", "1")))
    raise RuntimeError("amodb: still rate limited after 3 attempts")
```

## Fique abaixo do limite

- Guarde as respostas em cache do seu lado. Os detalhes mudam raramente; 6 horas é um padrão seguro.
- Use `append_to_response` para obter detalhes, créditos e imagens em uma requisição em vez de três.
- Espalhe os trabalhos em lote: com 40 requisições por minuto, envie uma requisição a cada 1,5 segundo.
- Leia `X-RateLimit-Remaining` e desacelere antes que chegue a 0.

## Perguntas e respostas

### Todas as minhas chaves compartilham um limite?

Cada chave é contada em sua própria janela, e toda chave recebe a taxa do seu plano. Use uma chave por app para que um app movimentado não deixe outro lento.

### Existe um teto diário?

Não. O único limite é a taxa por minuto. Com 40 requisições por minuto, uma chave pode fazer até 57.600 requisições por dia.

### As requisições de imagem contam?

Não. As imagens em img.amodb.dev não precisam de chave e não contam na sua taxa.

## Páginas relacionadas

- [Preços](https://amodb.dev/pt/pricing/): Os planos do amodb diferem só em requisições por minuto: 20, 40 ou 120. Todo plano inclui todos os dados do TMDB v3 e OMDb. Pré-pago, sem renovação nem teste.
- [Erros](https://amodb.dev/pt/errors/): Todos os erros do amodb com status HTTP, status_code e mensagem do TMDB, mais o formato de erro do OMDb. O que cada um significa e o que seu cliente deve fazer.
- [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/rate-limits/
