# Limites e planos

> Quais planos têm API, quantas chamadas cada um faz por minuto e por mês, e como ler os cabeçalhos RateLimit.

URL: https://precificador3d.com.br/docs/api/limites

A API e os webhooks estão em **todos os planos**, com limites que crescem com o plano. Os limites protegem a sua conta e a plataforma: sob pressão, a API responde `429` ou `503` antes de o app ficar lento para quem está usando.

> **Tetos iniciais:** Os números abaixo são tetos iniciais. Podem mudar depois do teste de carga e do uso real; mudanças aparecem no [changelog](https://precificador3d.com.br/docs/api/changelog).

|  | Bancada | Oficina | Farm |
| --- | --- | --- | --- |
| API e webhooks | Sim | Sim | Sim |
| Chaves de API ativas | 2 | 3 | 10 |
| Endpoints de webhook | 1 | 3 | 10 |
| Leituras por minuto (conta) | 30 | 60 | 180 |
| Escritas por minuto (conta) | 10 | 20 | 60 |
| Chamadas por mês | 50.000 | 150.000 | 750.000 |
| Rajada por chave | 5, repõe 1 por segundo | 10, repõe 2 por segundo | 20, repõe 5 por segundo |
| Requisições simultâneas (chave / conta) | 2 / 3 | 3 / 3 | 3 / 3 |
| Entregas de webhook por hora | 300 | 1.000 | 5.000 |

_Tetos iniciais._

## Custo de cada chamada

| Operação | Custo | Classe |
| --- | --- | --- |
| `GET` de um recurso | 1 | leitura |
| `GET` de lista com `limite` até 25 | 1 | leitura |
| `GET` de lista com `limite` de 26 a 100, ou com 2 ou mais filtros | 3 | cara |
| `GET /produtos` (o motor calcula o preço de cada produto) | 1 + 1 a cada 25 produtos | cara acima de 25 |
| `POST /estoque/movimentos` | 2 | escrita |
| `POST /cotacoes` e `POST /pedidos-producao` | 5 | escrita |
| Resposta `304` ou repetição idempotente | 1 na rajada, 0 no mês | leitura |

## Cabeçalhos

```http
RateLimit-Policy: "rajada";q=10;w=1, "minuto";q=60;w=60, "mes";q=150000;w=2592000
RateLimit: "minuto";r=42;t=18
Retry-After: 18
```

- `RateLimit-Policy`: os limites desta chave (`q` = quantidade, `w` = janela em segundos).
- `RateLimit`: o limite mais perto de estourar (`r` = restante, `t` = segundos até repor).
- `Retry-After`: no `429` e no `503`, quantos segundos esperar.

## Recebeu 429?

- Espere `Retry-After` e reduza o ritmo; não repita em laço.
- Use webhooks em vez de consultar de minuto em minuto.
- Use `If-None-Match`: `304` não gasta a cota do mês.
- Chave com muitas recusas seguidas por limite é suspensa por 15 minutos, com e-mail ao dono.
