Rate limits
Pra proteger a plataforma contra abuso e estouro de cota, cada endpoint tem um limite por minuto, contado pelo token usado.
Limites atuais
| Endpoint | Limite | Janela | Contagem por |
|---|---|---|---|
POST /contacts |
300 req | 60 s | API key |
GET /contacts-schema |
60 req | 60 s | API key |
POST /automation-trigger |
sem limite explícito | — | flow token |
POST /send-template |
60 req | 60 s | API key |
POST /send-message |
60 req | 60 s | API key |
GET /health |
sem limite | — | — |
Resposta quando estoura
Quando você ultrapassa o limite, a resposta é:
- HTTP 429 Too Many Requests
- Header
Retry-After: <segundos>(quanto tempo esperar antes da próxima tentativa). - Corpo JSON:
{ "error": "Too many requests", "retry_after": <segundos> }
curl -i -X POST https://api.wevi.chat/functions/v1/contacts \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{...}'
# HTTP/1.1 429 Too Many Requests
# Retry-After: 47
# {"error":"Too many requests","retry_after":47}
const res = await fetch(url, { method: "POST", headers, body });
if (res.status === 429) {
const wait = Number(res.headers.get("Retry-After") ?? 60);
await new Promise(r => setTimeout(r, wait * 1000));
// ... retry
}
Estratégia recomendada
- Backoff exponencial: na primeira falha 429, espera o
Retry-After. Na segunda seguida, dobre o tempo. - Não paralelize além do limite. Se vai sincronizar 10 mil contatos, faça em série ou em lotes pequenos com
setTimeout. - Use
idempotency_keynos endpoints de envio (/send-template,/send-message) pra retries não duplicarem mensagens.
Limites mais altos
Se precisa de throughput maior que os 300 req/min do /contacts (por exemplo, importação inicial de uma base grande), fale com a gente em contato@wevi.chat. Podemos liberar caso a caso ou recomendar import via CSV pela UI.
Próximo
Códigos de erro