Pular para o conteúdo

Contatos

Base path: /api/v1/contacts Scopes: contacts:read | contacts:write

Contatos são pessoas físicas no seu CRM — leads, clientes, prospects. Cada contato pode estar associado a uma ou mais empresas e ter múltiplos negócios.

Lista contatos

GET /api/v1/contacts

Scope: contacts:read

Query params:

ParamTipoDefaultDescrição
pagenumber1Página atual
pageSizenumber50Itens por página (máx 100)
searchstringBusca em nome, email, telefone
ownerIdstringFiltra por owner
sortKeystringcreatedAtCampo de ordenação
sortOrderasc | descdescDireção

Exemplo:

Terminal window
curl "https://app.indutivacrm.com.br/api/v1/contacts?page=1&pageSize=20" \
-H "X-API-Key: crm_live_..."

Busca avançada (com filtros)

POST /api/v1/contacts/search

Scope: contacts:read

Use quando precisar de filtros complexos que não cabem em query string (AND/OR, ranges, múltiplos valores).

Body:

{
"filters": {
"operator": "AND",
"conditions": [
{ "field": "ownerId", "operator": "eq", "value": "ckl4z00..." },
{ "field": "score", "operator": "gte", "value": 80 },
{ "field": "createdAt", "operator": "after", "value": "2026-01-01T00:00:00Z" }
]
},
"page": 1,
"pageSize": 50,
"sortKey": "score",
"sortOrder": "desc"
}

Busca um contato

GET /api/v1/contacts/:id

Scope: contacts:read

Retorna o contato com todos os campos padrão + valores das propriedades customizadas em customProperties.

Terminal window
curl https://app.indutivacrm.com.br/api/v1/contacts/ckl4z9w8v0001abcdef123456 \
-H "X-API-Key: crm_live_..."

Resposta 404 se não existir ou foi soft-deletado.

Cria um contato

POST /api/v1/contacts

Scope: contacts:write

Body (campos):

CampoTipoObrigatórioDescrição
firstNamestringNome
lastNamestringSobrenome
emailstringE-mail (validado, único por tenant)
phonestringTelefone (E.164 recomendado, será normalizado)
companyIdstringID da empresa associada
ownerIdstringID do user dono
tagsstring[]Array de tag IDs
customPropertiesobject{ propertyId: value } pra cada custom field
Terminal window
curl -X POST https://app.indutivacrm.com.br/api/v1/contacts \
-H "X-API-Key: crm_live_..." \
-H "Content-Type: application/json" \
-d '{
"firstName": "Maria",
"lastName": "Silva",
"email": "maria@empresa.com.br",
"phone": "+5511999999999",
"ownerId": "ckl4z00...",
"customProperties": {
"cargo": "Diretora Comercial",
"industria": "Manufatura"
}
}'

Resposta 201 Created com o contato completo (incluindo id gerado).

Atualiza um contato

PATCH /api/v1/contacts/:id

Scope: contacts:write

Atualização parcial — só envie os campos que mudaram. Campos omitidos ficam intactos.

Terminal window
curl -X PATCH https://app.indutivacrm.com.br/api/v1/contacts/ckl4z9w8v0001abcdef123456 \
-H "X-API-Key: crm_live_..." \
-H "Content-Type: application/json" \
-d '{"phone": "+5511988888888"}'

Deleta um contato

DELETE /api/v1/contacts/:id

Scope: contacts:write

Soft-delete — o registro fica no banco com deletedAt preenchido, sai das listagens normais. Pra recuperar, suporte interno.

Resposta 204 No Content.

Lista negócios de um contato

GET /api/v1/contacts/:id/deals

Scope: contacts:read

Retorna os deals associados, ordenados: abertos primeiro, depois updatedAt desc.

[
{
"id": "ckl4d01...",
"title": "Proposta CRM Enterprise",
"stageId": "ckl4s01...",
"pipelineId": "ckl4p01...",
"value": 12000,
"currency": "BRL",
"isWon": false,
"isLost": false,
"updatedAt": "2026-05-22T14:30:00.000Z"
}
]

Erros específicos de contatos

StatuserrorCenário
409duplicate_emailPOST com email já existente. Inclui existingContactId na resposta
409duplicate_phonePOST com telefone já existente (após normalização)
400validation_failedCampos obrigatórios faltando ou formato inválido
404not_foundid não existe ou foi deletado

Veja Erros pra formato completo das respostas.