VendeeDocs
Referência

Contatos

Listar, consultar, criar e atualizar contatos (pessoas) do CRM.

GET   {BASE_URL}/api-v1-contacts        # lista
GET   {BASE_URL}/api-v1-contacts/:id     # detalhe
POST  {BASE_URL}/api-v1-contacts        # cria
PATCH {BASE_URL}/api-v1-contacts/:id     # atualiza

Escopos: contacts:read para os GET; contacts:write para POST e PATCH.

O recurso Contato

CampoTipo
iduuid
workspace_iduuid
namestring
emailstring | null
phonestring | null
phone2string | null
whatsappstring | null
job_titlestring | null
company_iduuid | null
owner_iduuid
instagramstring | null
linkedinstring | null
notesstring | null
custom_fieldsobject | null
created_atdatetime
updated_atdatetime

Listar contatos

GET {BASE_URL}/api-v1-contacts

Filtro (query)TipoNotas
emailstringIgualdade exata (normalizado para minúsculas).
company_iduuid
sinceISO 8601created_at >= since.
limitintPadrão 50, máx 200.
cursoruuidPróxima página.
curl "{BASE_URL}/[email protected]" \
  -H "X-API-Key: vnd_sua_chave_aqui"
{
  "data": [ { "id": "1a2b...", "name": "Maria Silva", "email": "[email protected]", "...": "..." } ],
  "meta": { "next_cursor": null, "has_more": false }
}

Consultar um contato

GET {BASE_URL}/api-v1-contacts/:id → o recurso Contato, ou 404 not_found.

Criar um contato

POST {BASE_URL}/api-v1-contacts — escopo contacts:write.

CampoTipoObrigatório
namestringSim (1–255).
owner_iduuidNão (resolução automática quando ausente).
emailstringNão (e-mail válido, minúsculas).
phonestringNão
phone2stringNão
whatsappstringNão
job_titlestringNão
company_iduuidNão (deve pertencer ao workspace).
instagramstringNão
linkedinstringNão
notesstringNão (até 10.000).
custom_fieldsobjectNão (≤ 50 chaves, ≤ 10 KB).
curl -X POST "{BASE_URL}/api-v1-contacts" \
  -H "X-API-Key: vnd_sua_chave_aqui" \
  -H "Content-Type: application/json" \
  -d '{ "name": "João Souza", "email": "[email protected]", "job_title": "Diretor" }'

Resposta 201 Created:

{ "id": "1a2b..." }

Idempotência

Envie um header Idempotency-Key (1–255 caracteres, qualquer string única sua) para tornar o POST acima seguro de reenviar em caso de timeout de rede ou retry automático:

curl -X POST "{BASE_URL}/api-v1-contacts" \
  -H "X-API-Key: vnd_sua_chave_aqui" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: pedido-9f21" \
  -d '{ "name": "João Souza", "email": "[email protected]" }'
  • Mesma chave, mesmo corpo: a segunda chamada não cria outro contato — responde 200 OK com o corpo da resposta original (não 201), e o webhook contact.created não é reemitido.
  • Mesma chave, corpo diferente (ou reusada em outro recurso): 422 idempotency_conflict.
  • Mesma chave, requisição original ainda processando: 409 idempotency_in_progress — duas chamadas concorrentes com a mesma chave; espere e tente de novo.
  • Janela: a chave fica registrada por 24 horas; depois disso pode ser reusada como se fosse nova.
  • Sem o header: comportamento idêntico ao de hoje — cada POST cria um contato novo.

Atualizar um contato

PATCH {BASE_URL}/api-v1-contacts/:id — escopo contacts:write. Mesmos campos do POST, todos opcionais. Retorna o contato completo atualizado (200 OK).

curl -X PATCH "{BASE_URL}/api-v1-contacts/1a2b..." \
  -H "X-API-Key: vnd_sua_chave_aqui" \
  -H "Content-Type: application/json" \
  -d '{ "whatsapp": "+55 11 98888-0000" }'

Erros possíveis

HTTPcodeQuando
401missing_api_key / invalid_api_key / revoked_api_keyAutenticação.
403insufficient_scopeFalta contacts:read ou contacts:write.
404not_foundContato não existe nesse workspace.
400bad_requestCorpo ausente/JSON inválido.
422validation_errorCampo inválido.
422invalid_referencecompany_id/owner_id fora do workspace.
422no_owner_availableSem responsável ativo possível.
400invalid_idempotency_keyIdempotency-Key fora de 1–255 caracteres.
422idempotency_conflictMesma Idempotency-Key com corpo ou recurso diferente.
409idempotency_in_progressMesma Idempotency-Key já em processamento (corrida).
405method_not_allowedMétodo não suportado.
500internal_errorFalha interna.

Nesta página