Pular para o conteúdo principal

Contatos

Pessoas, endereços, tags e anotações.

18 rotas. Todas exigem a chave de API no header Authorization, salvo quando marcadas como públicas. Abrir este módulo no Swagger.

Listar contatos da empresa com paginação​

GET /companie/person/list/{skip}/{take}

  • skip/take: quantos registros pular e quantos trazer.
  • Cada contato vem com tags, anotações, atividades e oportunidades vinculadas.
  • Para filtros por tag, origem, cidade ou financeiro, use POST /companie/person/filterAdvanced/....

Parâmetros

NomeEmTipoObrigatórioDescrição
skipURLstringsim
takeURLstringsim
blackListquerytrue · falseSó contatos na blacklist (true) ou fora dela (false). Omita para trazer todos.
orderqueryname_asc · name_desc · whatsapp_asc · whatsapp_desc · document_asc · document_desc · created_at_asc · created_at_descOrdenação. Padrão name_asc.

Respostas

StatusDescrição
200Página de contatos.
400Parâmetros inválidos. (ValidationError)
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger

Listar contatos com filtros avançados​

POST /companie/person/filterAdvanced/{filter}/{date_start}/{date_end}

Corpo mínimo (todos estes campos são obrigatórios, mesmo vazios):

{ "tags": [], "campaign_id": [], "skip": 0, "take": 20, "is_vm": false }
  • skip/take: paginação.
  • is_vm: use false. Com true, a última compra passa a ser lida do campo date_last do cliente.
  • tags / tags_excluded: ids de tag (GET /companie/tag) que o contato deve ter / não pode ter.
  • campaign_id: ids de campanha de disparo; traz só contatos dessas campanhas.
  • key: busca por nome, WhatsApp, e-mail ou CPF/CNPJ.
  • blackList: true, false ou "all".
  • positions: lista de cargos (texto do campo office).
  • created_at e last_purchase: { "filter": "this_month" } ou { "filter": "other_period", "value_start": "2026-01-01", "value_end": "2026-01-31" }.
  • qty_payed, value_payed, average_ticket: { "value_start": 100, "filter": "gte" }; com between, informe também value_end.
  • origin_type + origin_sales_channel_id ou origin_automation_type: origem do lead.

Atenção: o período da URL (filter, date_start, date_end) filtra pela data de vencimento dos lançamentos financeiros do cliente vinculado, não pela data de cadastro. Com qualquer valor diferente de all, contatos sem lançamento no período ficam de fora. Para filtrar pela data de cadastro, use all na URL e created_at no corpo. Datas no formato YYYY-MM-DD.

Parâmetros

NomeEmTipoObrigatórioDescrição
filterURLall · today · yesterday · this_week · last_week · this_month · last_month · last_30_days · …sim
date_startURLstringOpcional na URL: pode ser omitido junto com os segmentos seguintes.
date_endURLstringOpcional na URL: pode ser omitido junto com os segmentos seguintes.

Corpo (application/json)

CampoTipoObrigatórioDescrição
tags_excludednúmero[]
keystring
tagsnúmero[]sim
campaign_idnúmero[]sim
genderstring
companie_idnúmero
skipnúmerosim
takenúmerosim
is_whatsappboolean
birthday_monthnúmero
person_debtorboolean
citystring ou null
statestring ou null
qty_payedobject
qty_payed.value_startnúmerosim
qty_payed.value_endnúmero
qty_payed.filtergte · lte · between
value_payedobject
value_payed.value_startnúmerosim
value_payed.value_endnúmero
value_payed.filtergte · lte · between
average_ticketobject
average_ticket.value_startnúmerosim
average_ticket.value_endnúmero
average_ticket.filtergte · lte · between
last_purchaseobject
last_purchase.value_startstring
last_purchase.value_endstring
last_purchase.filterall · today · yesterday · this_week · last_week · this_month · last_month · last_30_days · …
created_atobject
created_at.value_startstring
created_at.value_endstring
created_at.filterall · today · yesterday · this_week · last_week · this_month · last_month · last_30_days · …
funnel_idnúmero ou null
funnel_step_idnúmero ou null
is_vmbooleansim
blackListboolean ou all
positionsobjeto[]
ordername_asc · name_desc · whatsapp_asc · whatsapp_desc · document_asc · document_desc · created_at_asc · created_at_desc
origin_typesales_channel · input_automation · ``
origin_sales_channel_idnúmero ou null
origin_automation_typeimport · api · instagram · checkout · manual · ``

Respostas

StatusDescrição
200Página de contatos. Cada item traz também campaign_person com as campanhas do contato.
400Parâmetros inválidos. (ValidationError)
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger

Detalhar contato​

GET /companie/person/detail/{id}

Traz o contato com tags, anotações, atividades e oportunidades vinculadas.

Parâmetros

NomeEmTipoObrigatórioDescrição
idURLnúmerosimId do contato.

Respostas

StatusDescrição
200Contato.
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
404error_person_not_exist (ErrorCode)
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger

Criar contato​

POST /companie/person

  • companie_user_id: id do usuário dono do contato; normalmente o dono da chave.
  • WhatsApp e telefone são normalizados para DDI+DDD+número (sem DDI, assume 55).
  • birth: data YYYY-MM-DD.
  • Recusa com 409 se CPF/CNPJ, e-mail ou WhatsApp/telefone já estiverem em outro contato da empresa. Com a opção da empresa que permite contato duplicado, só o CPF/CNPJ é conferido.
  • Também cria o cadastro de cliente ligado ao contato. Se o contato tiver WhatsApp e a empresa tiver a automação de boas-vindas ativa, a mensagem entra na fila de envio.
  • Endereço: envie depois com PUT /companie/person/address/:id.

Corpo (application/json)

CampoTipoObrigatórioDescrição
companie_user_idnúmerosim
namestringsim
documentstring
organizationstring
phonestring
whatsappstring
emailstring
officestring
birthdata ou null
email_secundarystring ou null
whatsapp_secundarystring ou null

Respostas

StatusDescrição
200Contato criado.
400Parâmetros inválidos. (ValidationError)
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
409error_companie_user_id_not_exist (string JSON) ou o objeto de duplicidade abaixo.
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger

Editar contato​

PUT /companie/person/{id}

Substitui os dados do contato. Envie todos os campos, não só os alterados:

  • whatsapp ausente ou vazio apaga o WhatsApp do contato.
  • phone é gravado com o mesmo valor do whatsapp; o valor enviado em phone só entra na checagem de duplicidade.
  • Campos de texto omitidos ficam como estão; email_secundary e whatsapp_secundary omitidos são apagados.

Recusa com 409 se CPF/CNPJ, e-mail ou WhatsApp/telefone já estiverem em outro contato da empresa. Com a opção da empresa que permite contato duplicado, só o CPF/CNPJ é conferido.

Parâmetros

NomeEmTipoObrigatórioDescrição
idURLstringsim

Corpo (application/json)

CampoTipoObrigatórioDescrição
documentstring
namestringsim
organizationstring
phonestring
whatsappstring
emailstring
officestring
birthdata ou null
email_secundarystring ou null
whatsapp_secundarystring ou null

Respostas

StatusDescrição
200Contato atualizado.
400Parâmetros inválidos. (ValidationError)
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
404error_person_not_exist (ErrorCode)
409Dado já usado por outro contato.
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger

Excluir contato​

DELETE /companie/person/{id}

Recusa a exclusão quando o contato:

  • está vinculado a qualquer oportunidade (error_exist_opportunity_person_in_person), seja ele o único contato dela ou não. Remova o vínculo ou a oportunidade antes;
  • tem cliente com lançamento financeiro (error_exist_financial_in_person).

Tags e anotações do contato são apagadas junto.

Parâmetros

NomeEmTipoObrigatórioDescrição
idURLstringsim

Respostas

StatusDescrição
200Contato excluído.
400Parâmetros inválidos. (ValidationError)
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
409error_person_not_exist, error_exist_opportunity_person_in_person ou error_exist_financial_in_person em message. (GenericError)
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger

Consultar endereço do contato​

GET /companie/person/address/{id}

Parâmetros

NomeEmTipoObrigatórioDescrição
idURLstringsim

Respostas

StatusDescrição
200Endereço.
400Parâmetros inválidos. (ValidationError)
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
404error_person_not_exist (ErrorCode)
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger

Atualizar endereço do contato​

PUT /companie/person/address/{id}

Grava o endereço no contato e no cadastro de cliente ligado a ele. zipcode com 8 dígitos sem traço; state é a UF com 2 letras; province é o bairro.

Parâmetros

NomeEmTipoObrigatórioDescrição
idURLstringsim

Corpo (application/json)

CampoTipoObrigatórioDescrição
zipcodestringsim
addressstringsim
numberstringsim
complementstring
provincestringsim
citystringsim
statestringsim
countrystring

Respostas

StatusDescrição
200Contato com o endereço atualizado.
400Parâmetros inválidos. (ValidationError)
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
409error_person_not_exist (ErrorCode)
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger

Incluir ou tirar contato da blacklist​

PUT /companie/person/blacklist/{personId}

Contato na blacklist não recebe mensagens automáticas. Ao incluir (true), as mensagens de WhatsApp pendentes para o contato são bloqueadas. O cadastro de cliente ligado ao contato recebe o mesmo valor.

Parâmetros

NomeEmTipoObrigatórioDescrição
personIdURLstringsim

Corpo (application/json)

CampoTipoObrigatórioDescrição
is_blacklistbooleansimtrue inclui na blacklist; false tira.

Respostas

StatusDescrição
200Contato atualizado. Quando há cliente ligado, vem { person, client }; senão, só o contato.
400Parâmetros inválidos. (ValidationError)
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
409person_not_exists (ErrorCode)
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger

Buscar contatos por texto​

GET /companie/person/autocomplete/find

Procura q no nome, WhatsApp, e-mail e CPF/CNPJ dos contatos da empresa. Informe sempre q, skip e take.

Parâmetros

NomeEmTipoObrigatórioDescrição
qquerystringsimTexto da busca.
skipquerynúmerosim
takequerynúmerosim
blackListquerytrue · falseSó contatos na blacklist (true) ou fora dela (false). Omita para trazer todos.
orderqueryname_asc · name_desc · whatsapp_asc · whatsapp_desc · document_asc · document_desc · created_at_asc · created_at_descOrdenação. Padrão name_asc.

Respostas

StatusDescrição
200Contatos encontrados.
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger

Listar anotações do contato​

GET /companie/person/annotation/{personId}

Ordenadas pelo texto da anotação (ordem alfabética), não pela data.

Parâmetros

NomeEmTipoObrigatórioDescrição
personIdURLstringsim

Respostas

StatusDescrição
200Anotações.
400Parâmetros inválidos. (ValidationError)
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger

Criar anotação no contato​

POST /companie/person/annotation

companie_user_id: autor da anotação; normalmente o dono da chave.

Corpo (application/json)

CampoTipoObrigatórioDescrição
person_idnúmerosim
companie_user_idnúmerosim
descriptionstringsim

Respostas

StatusDescrição
200Anotação criada.
400Parâmetros inválidos. (ValidationError)
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
409error_companie_user_id_not_exist ou error_person_id_not_exist (ErrorCode)
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger

Editar anotação​

PUT /companie/person/annotation/{id}

Parâmetros

NomeEmTipoObrigatórioDescrição
idURLstringsim

Corpo (application/json)

CampoTipoObrigatórioDescrição
descriptionstringsim

Respostas

StatusDescrição
200Anotação atualizada.
400Parâmetros inválidos. (ValidationError)
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
409error_person_annotation_not_exist (ErrorCode)
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger

Excluir anotação​

DELETE /companie/person/annotation/{id}

Parâmetros

NomeEmTipoObrigatórioDescrição
idURLstringsim

Respostas

StatusDescrição
200Anotação excluída.
400Parâmetros inválidos. (ValidationError)
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
409error_person_annotation_not_exist (ErrorCode)
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger

Listar todos os vínculos de tag com contato da empresa​

GET /companie/personTag

Respostas

StatusDescrição
200Vínculos contato-tag.
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger

Adicionar tag ao contato​

POST /companie/personTag

Pegue o tag_id em GET /companie/tag. Se o contato já tiver a tag, o vínculo é recriado (novo id).

Corpo (application/json)

CampoTipoObrigatórioDescrição
person_idnúmerosim
tag_idnúmerosim

Respostas

StatusDescrição
200Vínculo criado.
400Parâmetros inválidos. (ValidationError)
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
409error_person_not_exist ou error_tag_not_exist (ErrorCode)
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger

Listar tags do contato​

GET /companie/personTag/person/{personId}

Parâmetros

NomeEmTipoObrigatórioDescrição
personIdURLstringsim

Respostas

StatusDescrição
200Vínculos do contato com as tags.
400Parâmetros inválidos. (ValidationError)
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger

Remover tag do contato​

DELETE /companie/personTag/{id}

id é o id do vínculo (person_tag[].id no contato ou id em GET /companie/personTag/person/:personId), não o id da tag.

Parâmetros

NomeEmTipoObrigatórioDescrição
idURLstringsim

Respostas

StatusDescrição
200Tag removida.
400Parâmetros inválidos. (ValidationError)
401Chave ausente, inválida, revogada ou vencida. (ErrorCode)
403Acesso via API desligado, empresa inativa ou rota não permitida. (ErrorCode)
409error_tag_not_exist: vínculo não encontrado. (ErrorCode)
429Limite de requisições excedido. (ErrorCode)
Testar no Swagger