Clientes
Cadastra ou reaproveita cliente pelo CPF/CNPJ
POST
/contacts
- Escopo services:write
- Idempotency-Key obrigatória
- Limite escrita 60/min
Documento novo → cria (201). Documento já cadastrado → 200 matched, preenchendo só campos vazios no Cuidaro. Cadastro excluído com o documento → reativado, 200 restored.
Parâmetros
Idempotency-Key
string · cabeçalho
obrigatório
Chave de idempotência gerada por você para a operação (válida por 24 h, por integração). Operação comum: chave "executando" há mais de 60 s é considerada abandonada e o reenvio executa de novo. Mesma chave + mesmo corpo → resposta original com Idempotent-Replayed: true; corpo diferente → 409 IDEMPOTENCY_KEY_CONFLICT. Ausente → 422 IDEMPOTENCY_KEY_MISSING; fora do formato → 422 IDEMPOTENCY_KEY_INVALID.
Corpo da requisição
document
string
obrigatório
CPF ou CNPJ válido, com ou sem pontuação. Chave do upsert.
name
string
obrigatório
trading_name
string (anulável)
email
string (anulável)
nfe_email
string (anulável)
phone
string (anulável)
mobile
string (anulável)
state_registration
string (anulável)
address
object (anulável)
zip_code
string (anulável)
street
string (anulável)
number
string (anulável)
complement
string (anulável)
neighborhood
string (anulável)
city
string (anulável)
state
string (anulável)
UF com 2 letras (normalizada para maiúsculas). Obrigatória quando vier city_ibge_code.
city_ibge_code
string | integer | null
Código IBGE do município (7 dígitos; número também é aceito). Precisa pertencer à UF informada — senão 422.
Respostas
200
Cliente existente reaproveitado (matched) ou reativado (restored).
data
object
obrigatório
id
integer
obrigatório
types
array de string
obrigatório
Valores conhecidos: customer, supplier, employee.
status
string (anulável)
obrigatório
Valores conhecidos: active, inactive, blocked.
person_type
string (anulável)
obrigatório
individual (CPF) ou company (CNPJ).
name
string
obrigatório
trading_name
string (anulável)
obrigatório
document
string (anulável)
obrigatório
Só dígitos (e letras, no CNPJ alfanumérico).
email
string (anulável)
obrigatório
nfe_email
string (anulável)
obrigatório
phone
string (anulável)
obrigatório
mobile
string (anulável)
obrigatório
state_registration
string (anulável)
obrigatório
address
object
obrigatório
zip_code
string (anulável)
obrigatório
street
string (anulável)
obrigatório
number
string (anulável)
obrigatório
complement
string (anulável)
obrigatório
neighborhood
string (anulável)
obrigatório
city
string (anulável)
obrigatório
state
string (anulável)
obrigatório
city_ibge_code
string (anulável)
obrigatório
created_at
string (anulável)
obrigatório
updated_at
string (anulável)
obrigatório
meta
object
obrigatório
operation
string
obrigatório
201
Cliente criado (created).
data
object
obrigatório
id
integer
obrigatório
types
array de string
obrigatório
Valores conhecidos: customer, supplier, employee.
status
string (anulável)
obrigatório
Valores conhecidos: active, inactive, blocked.
person_type
string (anulável)
obrigatório
individual (CPF) ou company (CNPJ).
name
string
obrigatório
trading_name
string (anulável)
obrigatório
document
string (anulável)
obrigatório
Só dígitos (e letras, no CNPJ alfanumérico).
email
string (anulável)
obrigatório
nfe_email
string (anulável)
obrigatório
phone
string (anulável)
obrigatório
mobile
string (anulável)
obrigatório
state_registration
string (anulável)
obrigatório
address
object
obrigatório
zip_code
string (anulável)
obrigatório
street
string (anulável)
obrigatório
number
string (anulável)
obrigatório
complement
string (anulável)
obrigatório
neighborhood
string (anulável)
obrigatório
city
string (anulável)
obrigatório
state
string (anulável)
obrigatório
city_ibge_code
string (anulável)
obrigatório
created_at
string (anulável)
obrigatório
updated_at
string (anulável)
obrigatório
meta
object
obrigatório
operation
string
obrigatório
409
Limite do plano (traz metric e limit), mais de um cadastro excluído com o documento, ou conflito de idempotência. Códigos possíveis: PLAN_QUOTA_EXCEEDED, RESOURCE_STATE_CONFLICT, IDEMPOTENCY_KEY_CONFLICT, IDEMPOTENCY_KEY_IN_PROGRESS.
type
string
obrigatório
https://cuidaro.com.br/errors/{slug} — ainda não é endereço navegável.
title
string
obrigatório
Título curto e estável por código (inglês).
status
integer
obrigatório
detail
string
obrigatório
Texto para pessoas, em pt-BR. Pode mudar; não use para lógica.
instance
string
obrigatório
Caminho da requisição (ex.: /api/v1/me).
code
string
obrigatório
Catálogo estável de códigos de erro (App\Enums\ApiErrorCode). Código publicado nunca é renomeado nem removido; códigos novos podem surgir — trate valor desconhecido como erro genérico do status HTTP. O status, o título e o type de cada código estão em x-cuidaro-error-catalog.
metric
string
Só em PLAN_QUOTA_EXCEEDED: métrica do plano atingida.
limit
integer (anulável)
Só em PLAN_QUOTA_EXCEEDED: limite do plano.
existing_resource_id
integer
Só em RESOURCE_ALREADY_EXISTS: id do recurso que já existe.
expected_amount
string
Só em SETTLEMENT_AMOUNT_MISMATCH: total da OS.
received_amount
string
Só em SETTLEMENT_AMOUNT_MISMATCH: valor recebido em settlement.amount.
service_order_status
string
Só no RESOURCE_STATE_CONFLICT do faturamento: status público atual da OS.
422
Documento ausente/inválido, IBGE inválido ou de outra UF, ou Idempotency-Key ausente/inválida. Também: IDEMPOTENCY_KEY_MISSING, IDEMPOTENCY_KEY_INVALID.
type
string
obrigatório
https://cuidaro.com.br/errors/{slug} — ainda não é endereço navegável.
title
string
obrigatório
Título curto e estável por código (inglês).
status
integer
obrigatório
detail
string
obrigatório
Texto para pessoas, em pt-BR. Pode mudar; não use para lógica.
instance
string
obrigatório
Caminho da requisição (ex.: /api/v1/me).
code
string
obrigatório
Catálogo estável de códigos de erro (App\Enums\ApiErrorCode). Código publicado nunca é renomeado nem removido; códigos novos podem surgir — trate valor desconhecido como erro genérico do status HTTP. O status, o título e o type de cada código estão em x-cuidaro-error-catalog.
metric
string
Só em PLAN_QUOTA_EXCEEDED: métrica do plano atingida.
limit
integer (anulável)
Só em PLAN_QUOTA_EXCEEDED: limite do plano.
existing_resource_id
integer
Só em RESOURCE_ALREADY_EXISTS: id do recurso que já existe.
expected_amount
string
Só em SETTLEMENT_AMOUNT_MISMATCH: total da OS.
received_amount
string
Só em SETTLEMENT_AMOUNT_MISMATCH: valor recebido em settlement.amount.
service_order_status
string
Só no RESOURCE_STATE_CONFLICT do faturamento: status público atual da OS.
errors
object
Mensagens por campo (pt-BR).
error_codes
object
Códigos estáveis por campo: FIELD_REQUIRED, FIELD_TYPE_INVALID, FIELD_MAX_LENGTH, FIELD_ENUM_INVALID, FIELD_INVALID, WEBHOOK_URL_NOT_ALLOWED.
401
Token ausente, inválido, revogado ou expirado. Códigos: AUTH_TOKEN_MISSING, AUTH_TOKEN_INVALID, AUTH_TOKEN_EXPIRED.
type
string
obrigatório
https://cuidaro.com.br/errors/{slug} — ainda não é endereço navegável.
title
string
obrigatório
Título curto e estável por código (inglês).
status
integer
obrigatório
detail
string
obrigatório
Texto para pessoas, em pt-BR. Pode mudar; não use para lógica.
instance
string
obrigatório
Caminho da requisição (ex.: /api/v1/me).
code
string
obrigatório
Catálogo estável de códigos de erro (App\Enums\ApiErrorCode). Código publicado nunca é renomeado nem removido; códigos novos podem surgir — trate valor desconhecido como erro genérico do status HTTP. O status, o título e o type de cada código estão em x-cuidaro-error-catalog.
metric
string
Só em PLAN_QUOTA_EXCEEDED: métrica do plano atingida.
limit
integer (anulável)
Só em PLAN_QUOTA_EXCEEDED: limite do plano.
existing_resource_id
integer
Só em RESOURCE_ALREADY_EXISTS: id do recurso que já existe.
expected_amount
string
Só em SETTLEMENT_AMOUNT_MISMATCH: total da OS.
received_amount
string
Só em SETTLEMENT_AMOUNT_MISMATCH: valor recebido em settlement.amount.
service_order_status
string
Só no RESOURCE_STATE_CONFLICT do faturamento: status público atual da OS.
403
Escopo insuficiente ou empresa sem acesso à API. Códigos possíveis: AUTH_SCOPE_INSUFFICIENT, AUTH_TENANT_SUSPENDED, AUTH_TENANT_PLAN_WITHOUT_API, ACCESS_DENIED.
type
string
obrigatório
https://cuidaro.com.br/errors/{slug} — ainda não é endereço navegável.
title
string
obrigatório
Título curto e estável por código (inglês).
status
integer
obrigatório
detail
string
obrigatório
Texto para pessoas, em pt-BR. Pode mudar; não use para lógica.
instance
string
obrigatório
Caminho da requisição (ex.: /api/v1/me).
code
string
obrigatório
Catálogo estável de códigos de erro (App\Enums\ApiErrorCode). Código publicado nunca é renomeado nem removido; códigos novos podem surgir — trate valor desconhecido como erro genérico do status HTTP. O status, o título e o type de cada código estão em x-cuidaro-error-catalog.
metric
string
Só em PLAN_QUOTA_EXCEEDED: métrica do plano atingida.
limit
integer (anulável)
Só em PLAN_QUOTA_EXCEEDED: limite do plano.
existing_resource_id
integer
Só em RESOURCE_ALREADY_EXISTS: id do recurso que já existe.
expected_amount
string
Só em SETTLEMENT_AMOUNT_MISMATCH: total da OS.
received_amount
string
Só em SETTLEMENT_AMOUNT_MISMATCH: valor recebido em settlement.amount.
service_order_status
string
Só no RESOURCE_STATE_CONFLICT do faturamento: status público atual da OS.
413
Corpo acima de 512 KB. Códigos possíveis: PAYLOAD_TOO_LARGE.
type
string
obrigatório
https://cuidaro.com.br/errors/{slug} — ainda não é endereço navegável.
title
string
obrigatório
Título curto e estável por código (inglês).
status
integer
obrigatório
detail
string
obrigatório
Texto para pessoas, em pt-BR. Pode mudar; não use para lógica.
instance
string
obrigatório
Caminho da requisição (ex.: /api/v1/me).
code
string
obrigatório
Catálogo estável de códigos de erro (App\Enums\ApiErrorCode). Código publicado nunca é renomeado nem removido; códigos novos podem surgir — trate valor desconhecido como erro genérico do status HTTP. O status, o título e o type de cada código estão em x-cuidaro-error-catalog.
metric
string
Só em PLAN_QUOTA_EXCEEDED: métrica do plano atingida.
limit
integer (anulável)
Só em PLAN_QUOTA_EXCEEDED: limite do plano.
existing_resource_id
integer
Só em RESOURCE_ALREADY_EXISTS: id do recurso que já existe.
expected_amount
string
Só em SETTLEMENT_AMOUNT_MISMATCH: total da OS.
received_amount
string
Só em SETTLEMENT_AMOUNT_MISMATCH: valor recebido em settlement.amount.
service_order_status
string
Só no RESOURCE_STATE_CONFLICT do faturamento: status público atual da OS.
429
Limite de requisições excedido. Código: RATE_LIMIT_EXCEEDED.
type
string
obrigatório
https://cuidaro.com.br/errors/{slug} — ainda não é endereço navegável.
title
string
obrigatório
Título curto e estável por código (inglês).
status
integer
obrigatório
detail
string
obrigatório
Texto para pessoas, em pt-BR. Pode mudar; não use para lógica.
instance
string
obrigatório
Caminho da requisição (ex.: /api/v1/me).
code
string
obrigatório
Catálogo estável de códigos de erro (App\Enums\ApiErrorCode). Código publicado nunca é renomeado nem removido; códigos novos podem surgir — trate valor desconhecido como erro genérico do status HTTP. O status, o título e o type de cada código estão em x-cuidaro-error-catalog.
metric
string
Só em PLAN_QUOTA_EXCEEDED: métrica do plano atingida.
limit
integer (anulável)
Só em PLAN_QUOTA_EXCEEDED: limite do plano.
existing_resource_id
integer
Só em RESOURCE_ALREADY_EXISTS: id do recurso que já existe.
expected_amount
string
Só em SETTLEMENT_AMOUNT_MISMATCH: total da OS.
received_amount
string
Só em SETTLEMENT_AMOUNT_MISMATCH: valor recebido em settlement.amount.
service_order_status
string
Só no RESOURCE_STATE_CONFLICT do faturamento: status público atual da OS.
500
Erro interno, sem mensagem interna nem stack trace. Códigos possíveis: INTERNAL_ERROR.
type
string
obrigatório
https://cuidaro.com.br/errors/{slug} — ainda não é endereço navegável.
title
string
obrigatório
Título curto e estável por código (inglês).
status
integer
obrigatório
detail
string
obrigatório
Texto para pessoas, em pt-BR. Pode mudar; não use para lógica.
instance
string
obrigatório
Caminho da requisição (ex.: /api/v1/me).
code
string
obrigatório
Catálogo estável de códigos de erro (App\Enums\ApiErrorCode). Código publicado nunca é renomeado nem removido; códigos novos podem surgir — trate valor desconhecido como erro genérico do status HTTP. O status, o título e o type de cada código estão em x-cuidaro-error-catalog.
metric
string
Só em PLAN_QUOTA_EXCEEDED: métrica do plano atingida.
limit
integer (anulável)
Só em PLAN_QUOTA_EXCEEDED: limite do plano.
existing_resource_id
integer
Só em RESOURCE_ALREADY_EXISTS: id do recurso que já existe.
expected_amount
string
Só em SETTLEMENT_AMOUNT_MISMATCH: total da OS.
received_amount
string
Só em SETTLEMENT_AMOUNT_MISMATCH: valor recebido em settlement.amount.
service_order_status
string
Só no RESOURCE_STATE_CONFLICT do faturamento: status público atual da OS.