API · Atualizado em 12/10/2026
Contatos pela API: criar, buscar, editar e etiquetar
Crie ou encontre contatos sem duplicar, busque por telefone, e-mail ou documento, edite campos e atributos, etiquete e leia o histórico do contato.
O contato é a pessoa do outro lado da conversa. Pela API você cria, encontra, edita e etiqueta contatos e lê o histórico de mensagens de cada um.
Quando usar
- Para sincronizar clientes do seu CRM com o Pipe antes de uma campanha ou de um atendimento.
- Para gravar dados do seu sistema no contato, como plano contratado, em
atributos. - Para buscar o contato de um telefone e abrir um ticket para ele.
Pré-requisitos
- Chave com
contatos:lerpara consultar econtatos:escreverpara criar, editar e etiquetar. - Telefones no formato internacional E.164, como
+5511955550101.
Rotas
| Método | Rota | Escopo | O que faz |
|---|---|---|---|
| GET | /v1/contacts | contatos:ler | Lista e busca contatos |
| GET | /v1/contacts/:id | contatos:ler | Lê um contato |
| POST | /v1/contacts | contatos:escrever | Cria ou encontra um contato |
| PATCH | /v1/contacts/:id | contatos:escrever | Edita campos e junta atributos |
| GET | /v1/contacts/:id/messages | mensagens:ler | Lê o histórico de mensagens, incluindo o bot |
| GET | /v1/contacts/:id/labels | contatos:ler | Lista as etiquetas do contato |
| POST | /v1/contacts/:id/labels | contatos:escrever | Aplica uma etiqueta |
| DELETE | /v1/contacts/:id/labels/:labelId | contatos:escrever | Remove uma etiqueta |
Passo a passo: criar ou encontrar um contato
- Envie os dados que você tem. Informe ao menos um identificador: telefone, e-mail ou identidade de canal.
curl -s -X POST https://http.pipebr.app/v1/contacts \
-H "Authorization: Bearer $PIPE_CHAVE" \
-H "Content-Type: application/json" \
-d '{
"name": "Maria Exemplo",
"phoneE164": "+5511955550101",
"email": "maria@exemplo.test",
"atributos": { "plano": "ouro", "cliente_desde": "2024" }
}'
- A resposta é 201 se o contato foi criado e 200 se já existia. O campo
createddiz qual foi:
{
"id": "b3a1c9de-0000-4000-8000-000000000010",
"nome": "Maria Exemplo",
"telefone_e164": "+5511955550101",
"email": "maria@exemplo.test",
"documento": null,
"bloqueado": false,
"criado_em": "2026-10-12T14:30:00.000Z",
"atributos": { "plano": "ouro", "cliente_desde": "2024" },
"created": true
}
Campos do corpo
| Campo | Regra |
|---|---|
name | Até 200 caracteres |
phoneE164 | Formato internacional. Inválido dá 400 contact_phone_invalid |
email | Até 320 caracteres. Inválido dá 400 contact_email_invalid |
document | Até 40 caracteres |
atributos | Objeto com valores simples (texto até 2000 caracteres, número, booleano ou null), até 100 chaves |
channelType | whatsapp_cloud (padrão), instagram, messenger ou widget |
channelIdentity | { channelType, identifier }. Obrigatório fora do WhatsApp. No WhatsApp o identificador são os dígitos do telefone |
Se o contato já existe, os atributos enviados são juntados aos atuais e os campos name, email e document que você enviou preenchem o contato. O telefone é guardado na forma canônica, com o nono dígito.
Para falhar em vez de mesclar, use POST /v1/contacts?upsert=false. Um identificador já usado responde 409 com contact_phone_in_use, contact_identity_in_use ou contact_email_in_use.
Buscar contatos
| Parâmetro | Busca |
|---|---|
telefone | Telefone em qualquer grafia, incluindo o nono dígito |
email | E-mail exato |
documento | Documento exato |
search | Parte do nome, sem diferenciar maiúsculas |
limit, cursor, order_by=criado_em[desc] | Paginação, como em Erros, respostas e paginação |
curl -s "https://http.pipebr.app/v1/contacts?telefone=%2B5511955550101" \
-H "Authorization: Bearer $PIPE_CHAVE"
Editar um contato
PATCH /v1/contacts/:id muda só o que você enviar. Um campo enviado com null é apagado. Os atributos são sempre juntados aos existentes, nunca substituídos.
curl -s -X PATCH https://http.pipebr.app/v1/contacts/b3a1c9de-0000-4000-8000-000000000010 \
-H "Authorization: Bearer $PIPE_CHAVE" \
-H "Content-Type: application/json" \
-d '{"email": "maria.nova@exemplo.test", "atributos": {"plano": "diamante"}}'
Um telefone que já pertence a outro contato dá 409 contact_phone_in_use. A edição não muda as identidades de canal nem o campo bloqueado.
Histórico do contato
GET /v1/contacts/:id/messages junta, em ordem, as mensagens dos tickets do contato e as da conversa com o bot, mesmo quando nunca houve ticket.
| Parâmetro | O que faz |
|---|---|
order | asc (padrão) ou desc |
since, until | Limites de data (ISO ou AAAA-MM-DD) |
include_bot | false para ver só tickets |
limit, cursor | Paginação, até 100 por página |
Cada mensagem traz source (bot ou ticket), conversationId e executionId. Notas internas nunca aparecem.
Etiquetas do contato
Para aplicar, envie o id da etiqueta:
curl -s -X POST https://http.pipebr.app/v1/contacts/b3a1c9de-0000-4000-8000-000000000010/labels \
-H "Authorization: Bearer $PIPE_CHAVE" \
-H "Content-Type: application/json" \
-d '{"etiqueta_id": "b3a1c9de-0000-4000-8000-000000000500"}'
A resposta traz etiqueta_id, nome e aplicada. Para descobrir os ids, use GET /v1/labels?scope=contato, em Consultar cadastros.
Resultado esperado
O contato fica criado ou atualizado, com os atributos do seu sistema, e pronto para receber ticket, mensagem ativa ou campanha.
Problemas comuns
- 409 em chave de fluxo ao criar contato: o telefone já existe, mas o contato está fora do seu fluxo. A chave não altera nem revela contatos de outros fluxos, então nada é gravado.
- 404 logo depois de criar com chave de fluxo: a chave só enxerga contatos que têm ticket ou sessão de bot no fluxo. Abra um ticket ou envie uma mensagem ativa para ele entrar no alcance.
- 400
contact_without_identifier: informe telefone, e-mail ou identidade de canal. Sem um deles, o contato não receberia mensagem.
Boas práticas
- Normalize o telefone para E.164 antes de enviar.
- Use
atributospara dados de negócio e mantenha as chaves em um padrão fixo, comoplanoecliente_desde. - Envie Idempotency-Key se sua rotina de sincronização puder repetir chamadas.
Próximos passos
- Leia e grave variáveis do bot em Contexto do contato e sessões do bot.
- Abra um ticket para o contato em Conversas e tickets.
- Veja o histórico pela tela em Histórico do contato no Desk.
Perguntas frequentes
Criar um contato duas vezes duplica o cadastro?
Não. POST /v1/contacts procura primeiro pela identidade do canal, depois pelo telefone em qualquer grafia e, por último, pelo e-mail. Se achar, devolve 200 e created: false e junta os atributos enviados.
Como recebo erro em vez de mesclar?
Use POST /v1/contacts?upsert=false. Se já existir contato com o mesmo telefone, identidade ou e-mail, a resposta é 409.
A busca por telefone entende o nono dígito?
Sim. +5571997012615 e +557197012615 encontram o mesmo contato. Número fixo nunca ganha o 9.
Minha chave de fluxo não acha o contato que acabei de criar. Por quê?
Chaves de fluxo só enxergam contatos que têm ticket ou sessão de bot no fluxo. Um contato recém-criado, sem conversa, ainda não está no alcance da chave.
Esse artigo foi útil?
Obrigado pelo retorno!