Rate limiting
Cada API key está sujeita a um limite de 100 requisições por minuto. O limite é contado por janela deslizante de 60 segundos, por chave.Headers de controle
Toda resposta inclui headers que informam o estado atual do seu limite:| Header | Descrição |
|---|---|
X-RateLimit-Limit | Limite total da janela atual |
X-RateLimit-Remaining | Requisições restantes na janela |
X-RateLimit-Reset | Timestamp Unix em que o contador zera |
Quando o limite é atingido
A API retorna429 Too Many Requests com o header Retry-After informando quantos segundos aguardar:
Implementando retry com backoff
Paginação
Todas as rotas de listagem suportam paginação via query params:| Parâmetro | Padrão | Máximo | Descrição |
|---|---|---|---|
page | 1 | — | Número da página |
per_page | 20 | 100 | Itens por página |
meta com total de registros:
total_pages para saber quando parar de paginar. Quando page > total_pages, o campo data retorna array vazio.
Códigos de erro
A API usa status HTTP semânticos. Todos os erros seguem o mesmo formato de envelope:Tabela de erros
| Status | Quando ocorre | O que fazer |
|---|---|---|
400 Bad Request | Payload inválido, campo obrigatório ausente, formato incorreto | Leia error.message — ele especifica o campo problemático |
401 Unauthorized | Header x-api-key ausente, chave inválida ou revogada | Verifique a chave em Configurações → API Keys |
403 Forbidden | Chave válida, mas sem o escopo necessário para a operação | Adicione o escopo faltante à chave ou crie uma nova |
404 Not Found | Recurso não existe ou não pertence ao seu workspace | Confirme o ID e o workspace ativo |
409 Conflict | Recurso já existe (ex: canal com o mesmo nome, webhook duplicado) | Ajuste o payload ou atualize o recurso existente |
429 Too Many Requests | Limite de 100 req/min atingido | Use o header Retry-After para aguardar |
500 Internal Server Error | Erro inesperado no servidor da Timely.ai | Tente novamente. Se persistir, abra um ticket em contato@timelyai.com.br |
Códigos de erro internos (error.code)
Além do status HTTP, o campo code identifica a causa exata:
Autenticação e autorização
Autenticação e autorização
| Código | Descrição |
|---|---|
MISSING_API_KEY | Header x-api-key não foi enviado |
INVALID_API_KEY | Chave não existe ou foi revogada |
INSUFFICIENT_SCOPE | Escopo necessário não está na chave |
WORKSPACE_ACCESS_DENIED | Chave não tem acesso ao workspace informado |
Recursos não encontrados
Recursos não encontrados
| Código | Descrição |
|---|---|
AGENT_NOT_FOUND | Agente não existe neste workspace |
CONVERSATION_NOT_FOUND | Conversa não encontrada |
CONTACT_NOT_FOUND | Contato não encontrado |
CHANNEL_NOT_FOUND | Canal não existe ou não está ativo |
WEBHOOK_NOT_FOUND | Endpoint de webhook não encontrado |
Validação
Validação
| Código | Descrição |
|---|---|
VALIDATION_ERROR | Um ou mais campos com formato inválido |
MISSING_REQUIRED_FIELD | Campo obrigatório ausente no payload |
INVALID_PHONE_FORMAT | Número de telefone fora do formato E.164 |
PAYLOAD_TOO_LARGE | Corpo da requisição excede o limite de 5 MB |
Limites e conflitos
Limites e conflitos
| Código | Descrição |
|---|---|
RATE_LIMIT_EXCEEDED | 100 req/min atingido |
DUPLICATE_WEBHOOK_URL | URL de webhook já cadastrada neste workspace |
CHANNEL_ALREADY_CONNECTED | Canal já conectado a outro agente |
PLAN_LIMIT_REACHED | Limite de agentes ou canais do plano atingido |
Próximos passos
Checklist de produção
Verifique tudo antes de ir ao ar com clientes reais.
Webhooks
Receba eventos em tempo real sem fazer polling.