API · Atualizado em 12/10/2026
Erros, respostas e paginação da API
Entenda o formato de erro da API do Pipe, os códigos HTTP mais comuns, como paginar listas com cursor e como tratar cada falha.
A API do Pipe usa o status HTTP de verdade: sucesso é 2xx e falha é 4xx ou 5xx. Nada de erro escondido dentro de uma resposta 200 nas rotas /v1. O corpo de qualquer erro tem sempre o mesmo formato.
Quando usar
Ao escrever o tratamento de erros da integração, e ao investigar uma chamada que não deu certo.
Formato do erro
{
"error": {
"code": "contact_phone_invalid",
"message": "Informe um telefone no formato E.164 (ex.: +5511987654321).",
"detalhe": {}
}
}
| Campo | O que é |
|---|---|
error.code | Identificador estável do erro. Use este campo no seu código |
error.message | Texto em português para mostrar a uma pessoa. Pode ser melhorado com o tempo |
error.detalhe | Informações extras, quando existem (por exemplo o escopo que faltou ou o limite excedido) |
Códigos HTTP
| Status | Quando acontece | O que fazer |
|---|---|---|
| 200, 201 | Deu certo. 201 indica que algo foi criado | Ler o corpo |
| 400 | Parâmetro ou corpo inválido, como data mal escrita, JSON inválido (json_invalid) ou campo obrigatório ausente | Corrigir a requisição |
| 401 | not_authorized: chave ausente, inválida, revogada ou expirada | Conferir a chave e o cabeçalho |
| 403 | without_scope, ip_not_allowed, tenant_mismatch, financial_state_read_only ou chave de fluxo em rota de outro fluxo | Ver Escopos e permissões |
| 404 | not_found: o recurso não existe ou está fora do fluxo da chave | Conferir o id e o fluxo |
| 409 | Conflito com o estado atual, como template_nao_aprovado, janela_fechada ou idempotency_conflict | Ler o code e ajustar |
| 413 | corpo_grande: o corpo passa do limite (1 MB em JSON) | Reduzir o corpo |
| 422 | A requisição é válida, mas a regra de negócio recusou, como text_too_long ou location_invalid | Ler o code e ajustar |
| 429 | rate_limited: limite de chamadas excedido | Esperar o tempo de Retry-After |
| 500 | erro_interno: falha do Pipe | Tentar de novo com espera; se persistir, avisar o suporte |
Paginação por cursor
Rotas de lista devolvem os itens em data e o controle em page_info:
{
"data": [ { "id": "..." } ],
"page_info": {
"has_next_page": true,
"end_cursor": "eyJ2YWx1ZSI6IjIwMjYtMTAtMTJUMTI6MDA6MDAuMDAwWiIsImlkIjoiYjNhMSJ9"
}
}
Parâmetros comuns:
| Parâmetro | O que faz |
|---|---|
limit | Itens por página. Padrão 50, máximo 100. Valor menor que 1 ou que não é inteiro dá 400 limit_invalid |
cursor | O end_cursor da página anterior. Cursor inventado dá 400 cursor_invalid |
order_by | Campo de ordenação, com [asc] ou [desc], por exemplo criada_em[desc]. Cada rota aceita um conjunto de campos |
Para percorrer tudo:
- Faça a primeira chamada sem
cursor. - Processe os itens de
data. - Se
has_next_pagefortrue, chame de novo comcursorigual aoend_cursor. - Pare quando
has_next_pageforfalse.
curl -s "https://http.pipebr.app/v1/contacts?limit=100&cursor=$CURSOR" \
-H "Authorization: Bearer $PIPE_CHAVE"
Algumas listas usam outro estilo, com pagina e porPagina (campanhas) ou page e perPage (histórico de tickets). Cada artigo indica qual vale.
Formatos de data e telefone
- Instantes usam ISO 8601 em UTC, como
2026-10-12T14:30:00.000Z. - Filtros por dia nos relatórios usam
AAAA-MM-DD, no fuso da conta. - Telefones seguem o formato internacional E.164, com
+e o código do país, como+5511955550101.
Resultado esperado
Sua integração consegue distinguir erro seu (4xx) de falha do Pipe (5xx), repetir apenas o que vale repetir e percorrer listas grandes sem perder itens.
Problemas comuns
- Lista que "repete" itens: não monte o cursor à mão. Use sempre o
end_cursorque a API devolveu, sem alterar a ordenação entre as páginas. - 400
json_invalidcom corpo certo: confira o cabeçalhoContent-Type: application/jsone a codificação UTF-8. - 422 em envio de mensagem: o
codediz o motivo, como mensagem acima de 4096 caracteres (text_too_long) ou arquivo em formato que o WhatsApp não aceita.
Boas práticas
- Trate 429 e 5xx com nova tentativa e espera crescente. Trate 4xx como erro de requisição, que repetir não resolve.
- Registre o
error.codee omessagenos seus logs, nunca a chave. - Use Idempotency-Key nas escritas que você pode repetir.
Próximos passos
- Entenda limites e repetição segura em Limites de uso e idempotência.
- Veja o que mudou na API em Versões e notas de versão.
Perguntas frequentes
Como a API devolve um erro?
Com o status HTTP correto e um corpo JSON no formato { error: { code, message } }. Alguns erros trazem também o campo detalhe com informações extras.
Posso confiar no texto da mensagem de erro?
Use o texto para mostrar ao usuário ou registrar. Para decidir o que fazer, use o campo code, que é estável.
Como pego a próxima página de uma lista?
Se page_info.has_next_page for true, repita a chamada com cursor igual ao valor de page_info.end_cursor.
Qual o tamanho máximo de uma página?
100 itens. O padrão é 50. Pedir mais que 100 devolve 100.
Esse artigo foi útil?
Obrigado pelo retorno!