Consulta Cliente
A API de Consulta de Clientes permite consultar uma lista de CNPJs e receber os dados básicos dos clientes, pessoas, responsáveis, contatos, vencimentos e o indicador de enriquecimento.
Endereço
POST https://api.xeotech.com.br/api/v1/clientes/consulta/{token}
O token é informado na URL. Para localizar seu token, consulte a página Meu token.
Autorização e acesso
O token precisa possuir um vínculo ativo com uma estrutura ativa. A estrutura é obtida pelo usuário do token: não envie estruturaId no payload.
Usuários com perfil PROPRIETARIO ou permissão CLIENTE_CARTEIRA_VER_TUDO podem consultar os clientes da estrutura. Os demais precisam estar cadastrados como responsáveis diretos pelo cliente. A consulta aos dados extras segue essa regra; estar na hierarquia de um responsável não substitui o vínculo direto.
CNPJs inexistentes ou sem autorização aparecem na mesma lista cnpjsNaoEncontradosOuNaoAutorizados. A API não revela cadastros de outras estruturas.
Payload
{
"cnpjs": [
"55275604000132",
"12.345.678/0001-90"
]
}
| Campo | Obrigatório | Descrição |
|---|---|---|
cnpjs |
Sim | Lista de 1 a 50 CNPJs distintos, enviados como texto. Aceita 14 dígitos ou a máscara 00.000.000/0000-00. |
Somente o campo cnpjs é aceito. Não envie formato: o retorno é exclusivamente JSON. CNPJs repetidos são rejeitados, inclusive quando um é enviado com máscara e outro sem máscara.
A máscara é removida antes da consulta. O cadastro é localizado pelo CNPJ armazenado sem máscara. Os dígitos verificadores não são validados nessa consulta. Números JSON, CPFs, listas vazias e campos adicionais são rejeitados.
Exemplo cURL
curl --fail-with-body --request POST \
'https://api.xeotech.com.br/api/v1/clientes/consulta/SEU_TOKEN' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--output clientes.json \
--data '{"cnpjs":["55275604000132","12.345.678/0001-90"]}'
Retorno JSON
Exemplo ilustrativo. Os IDs, nomes e dados abaixo são fictícios; os campos correspondem ao contrato da API.
{
"requestId": "d8e4c3c2-0000-0000-0000-000000000000",
"totalRegistros": 1,
"dados": [
{
"id": 1001,
"cpfCnpj": "55275604000132",
"nome": "Empresa Exemplo Ltda.",
"cep": "88330000",
"logradouro": "Rua Exemplo",
"numero": "100",
"complemento": null,
"bairro": "Centro",
"cidade": "Balneário Camboriú",
"estado": "SC",
"inscricaoEstadual": null,
"tags": "#CLIENTE",
"observacao": null,
"dataHoraAtualizacao": "2026-10-05T08:00:00",
"classificacao": "Cliente",
"enriquecido": true,
"pessoas": [
{
"id": 101,
"nome": "Pessoa Exemplo",
"cpf": null,
"rg": null,
"email": "pessoa@example.com",
"celular": "47999990000",
"telefone2": null,
"nascimento": null,
"papel": "Contato comercial"
}
],
"responsaveis": [
{
"id": 201,
"usuarioId": 301,
"nome": "Consultor Exemplo",
"login": "consultor@example.com",
"estruturaUsuarioId": 401,
"ativo": true,
"equipeId": 501,
"equipeNome": "Equipe Comercial"
}
],
"contatos": [
{
"id": 601,
"tipo": null,
"valor": "47999990000",
"verificado": null
}
],
"vencimentos": [
{
"id": 701,
"identificador": "NUMERO-CONTRATO",
"dia": 10,
"apartir": "2026-01-01",
"ate": "2026-12-31"
}
]
}
],
"cnpjsNaoEncontradosOuNaoAutorizados": [
"12345678000190"
]
}
Campos sem valor podem retornar null. As listas sem registros retornam []. Os valores de tipo e verificado, quando preenchidos, são os nomes dos indicadores cadastrados no Xeotech.
| Campo da resposta | Descrição |
|---|---|
requestId |
Identificador da requisição para suporte; também enviado no header X-Request-Id. |
totalRegistros |
Quantidade de clientes disponíveis retornados. |
dados |
Lista de clientes, na ordem dos CNPJs solicitados, omitindo os indisponíveis. |
cnpjsNaoEncontradosOuNaoAutorizados |
CNPJs normalizados que não foram localizados ou autorizados. |
Dados básicos do cliente
| Grupo | Campos e descrição |
|---|---|
| Identificação | id, cpfCnpj e nome. |
| Endereço | cep, logradouro, numero, complemento, bairro, cidade e estado. |
| Cadastro | inscricaoEstadual, tags, observacao, cadastroWhatsapp e dataHoraAtualizacao. |
| Classificação | classificacao: nome da classificação, ou null. |
| Enriquecimento | enriquecido: indicador booleano de enriquecimento existente na estrutura autorizada. |
Pessoas
| Campo | Descrição |
|---|---|
id |
Identificador da pessoa. |
nome |
Nome cadastrado. |
cpf / rg |
Documentos cadastrados, quando disponíveis. |
email / celular / telefone2 |
Dados de contato. |
nascimento |
Data de nascimento, no formato yyyy-MM-dd. |
papel |
Papel da pessoa no cliente. |
Responsáveis
| Campo | Descrição |
|---|---|
id |
Identificador do registro de responsabilidade. |
funcao |
Função cadastrada. |
usuarioId / nome / login |
Identificação do usuário responsável. |
estruturaUsuarioId |
Identificador do vínculo do usuário com a estrutura. |
ativo |
Situação do vínculo com a estrutura. |
equipeId / equipeNome |
Equipe vinculada ao responsável, ou null. |
Contatos
| Campo | Descrição |
|---|---|
id |
Identificador do contato. |
tipo |
Tipo do contato, conforme cadastro. |
valor |
Telefone, e-mail ou outro valor cadastrado. |
verificado |
Indicador de verificação cadastrado. |
nivelRelevancia |
Nível de relevância do contato. |
temWhats |
Indica WhatsApp cadastrado; pode retornar null. |
dataWhats |
Data da informação de WhatsApp. |
Vencimentos
| Campo | Descrição |
|---|---|
id |
Identificador do vencimento. |
nome |
Descrição cadastrada. |
dia |
Dia informado para o vencimento. |
apartir |
Data inicial de vigência, no formato yyyy-MM-dd. O nome do campo é exatamente apartir. |
ate |
Data final de vigência, ou null. |
Indicador enriquecido
enriquecido: true significa que existe um registro de enriquecimento para esse CNPJ na estrutura do token. false significa que não foi localizado esse registro. O indicador não garante que todos os contatos estejam preenchidos ou atualizados.
Essa consulta apenas informa o enriquecimento existente. Ela não executa enriquecimento e não consome créditos para enriquecer o cliente.
Limites e guard
A consulta compartilha o guard da API de pedidos. Chamadas de consulta de clientes e das APIs de pedidos disputam os mesmos limites de execução; trocar o token não elimina os limites por estrutura.
| Regra | Limite padrão |
|---|---|
| Execuções simultâneas no guard compartilhado | 2 |
| Execuções simultâneas por estrutura | 1 |
| Intervalo após o término de uma execução | 120 segundos |
| Execuções por estrutura | 3 a cada 10 minutos |
| Tentativas por token | 20 a cada 60 segundos |
| Tentativas globais | 600 a cada 60 segundos |
| Autenticações simultâneas | 8 |
| CNPJs por requisição | 50 |
| Payload | 16 KiB |
| Itens de cada coleção no lote completo | 5.000 por coleção: pessoas, responsáveis, contatos ou vencimentos |
| Timeout configurado de processamento no banco | 30 segundos; limite de consulta configurado de 10 segundos |
Concorrência global e intervalo entre execuções seguem a configuração vigente do servidor. Quando um limite é atingido, a API retorna 429 com o header Retry-After, indicando quantos segundos aguardar. O controle é aplicado por instância da aplicação.
Se uma coleção ultrapassar 5.000 itens somando todos os clientes do lote, a API rejeita a resposta inteira com LIMITE_ITENS. Reduza a quantidade de CNPJs e consulte novamente. A resposta não é truncada silenciosamente.
Respostas de erro
| HTTP | Código | Como tratar |
|---|---|---|
| 400 | PAYLOAD_INVALIDO / JSON_INVALIDO |
Corrija o JSON, os CNPJs ou a quantidade de itens. |
| 401 | TOKEN_INVALIDO |
Verifique o token. |
| 403 | ACESSO_NEGADO |
Verifique o vínculo e a estrutura autorizada. |
| 413 | PAYLOAD_GRANDE |
Reduza o payload para até 16 KiB. |
| 422 | LIMITE_ITENS |
Divida a lista de CNPJs em lotes menores. |
| 422 | CADASTRO_AMBIGUO |
Há cadastros duplicados para CNPJs solicitados; contate o suporte. |
| 429 | LIMITE_API |
Aguarde o tempo informado em Retry-After. |
| 504 | TEMPO_EXCEDIDO |
Reduza o lote e respeite o intervalo antes de repetir. |
| 500 | ERRO_INTERNO |
Informe o requestId ao suporte. |
{
"codigo": "LIMITE_ITENS",
"mensagem": "Uma coleção excedeu 5.000 itens. Reduza a lista de CNPJs.",
"requestId": "d8e4c3c2-0000-0000-0000-000000000000"
}
Quando nenhum CNPJ está disponível, a resposta é HTTP 200, com dados: [], totalRegistros: 0 e a lista dos CNPJs indisponíveis. Não é retornado HTTP 404 para cada cliente.
Boas práticas
- Agrupe consultas em lotes de até 50 CNPJs e evite uma chamada por cliente.
- Armazene os dados necessários na integração para evitar consultas repetidas.
- Respeite o Retry-After e os limites compartilhados com pedidos.
- Trate listas vazias e campos null.
- Não registre o token completo nos logs.
- O retorno inclui documentos e contatos de pessoas; restrinja o acesso a esses dados na sua integração.
Senhas e credenciais de gestor ou conta online não fazem parte da resposta.
No comments to display
No comments to display