Manual de Integração — API Direct Data
A Pesquisa Avançada é o produto Direct Data que permite ao cliente realizar buscas filtradas de Pessoas Jurídicas (PJ) e Pessoas Físicas (PF). O fluxo é dividido em duas etapas:
Id) e dados básicos. Essa etapa não consome saldo.
Ids desejados e dispara o
processamento. O backend faz o enriquecimento completo dos registros e retorna um
SearchUid que identifica a pesquisa concluída. Os resultados detalhados são
obtidos via ViewSearch. Essa etapa consome saldo conforme a
quantidade de itens processados.
/api/AdvancedSearchapplication/json) em todos os endpoints
Todos os endpoints exigem autenticação via header Token contendo o GUID
de API emitido pela Direct Data para a sua empresa. Esse token é único por empresa e deve ser tratado
como credencial sensível.
| Header | Tipo | Obrigatório | Descrição |
|---|---|---|---|
Token |
Guid | Sim | Token de API fornecido pela Direct Data, no formato 00000000-0000-0000-0000-000000000000. |
Content-Type |
string | Sim | Sempre application/json. |
https://app.directd.com.br/configuracoes/perfil.
O Token é exibido nessa página e pode ser copiado para uso em todas as chamadas desta API.
Todas as respostas estendem o envelope ResponseMetaDataDTO. Independente de sucesso ou
falha, o cliente sempre receberá os campos abaixo no corpo da resposta:
{
"success": true,
"status": "OK",
"elapsedTimeMs": 124,
"dateTimeExecution": "08/05/2026 14:32:15",
"error": null
}
| Campo | Tipo | Descrição |
|---|---|---|
success | bool | Indica se a operação foi bem sucedida (HTTP 2xx). |
status | string | Descrição textual do status HTTP retornado. |
elapsedTimeMs | long | Tempo total de processamento da requisição em milissegundos. |
dateTimeExecution | string | Data e hora em que a requisição foi executada no servidor. |
error | object | Objeto com fieldName e message em caso de erro. null em caso de sucesso. |
success para decidir se a chamada foi bem sucedida — ele reflete o código HTTP retornado.error.message para exibir a falha ao usuário final quando aplicável.elapsedTimeMs para monitoramento e SLAs internos.resultId)
Após chamar ProcessingIds, cada item da pesquisa passa por um ciclo de processamento.
O campo resultId retornado em ViewSearch.searchItems[] indica o estado
atual do item, e o campo result traz a descrição textual correspondente.
Os valores possíveis retornados pela API são:
| resultId | result (texto) | Descrição |
|---|---|---|
1 | Na Fila | Item criado e aguardando para iniciar o processamento. |
3 | Pesquisando | Item em execução |
4 | Pesquisado com Sucesso | Pesquisa concluída com sucesso. |
5 | Parcialmente Pequisado | Pesquisa concluída parcialmente |
6 | Falha na Pesquisa | Falha ao processar o item. Candidato típico para Reprocessing. |
7 | Resultado Sigiloso | Documento localizado, porém com informação de natureza sigilosa. |
4 — Pesquisado com Sucesso, 5 — Parcialmente Pequisado, 6 — Falha na Pesquisa e 7 — Resultado Sigiloso. Esses estados não mudarão sem uma nova chamada de Reprocessing.1 — Na Fila e 3 — Pesquisando indicam que o item ainda está em processamento. Quando algum item da pesquisa estiver em estado transitório, repita a chamada de ViewSearch após alguns segundos.
O fluxo padrão de uso da API combina os endpoints de Filtro, Processamento e Visualização, conforme o diagrama abaixo:
FilterLegalPerson por FilterNaturalPerson.
Os demais passos (ProcessingIds, ViewSearch, Reprocessing)
são compartilhados entre PJ e PF.
Realiza a busca filtrada de Pessoas Jurídicas. Retorna a lista de empresas que atendem aos critérios e a quantidade total de registros encontrados. Esta operação não consome saldo — ela serve para o cliente avaliar o resultado antes de disparar o processamento.
application/json
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
companyName | string | Não | Razão Social ou parte da razão social. |
openingDateStart | string | Não | Data inicial de abertura da empresa. Formatos aceitos: yyyy-MM-dd ou dd-MM-yyyy. |
openingDateEnd | string | Não | Data final de abertura da empresa. Formatos aceitos: yyyy-MM-dd ou dd-MM-yyyy. |
companySize | string | Não | ID do porte. Aceita: "0" Não Informado, "1" Micro Empresa, "3" Empresa de Porte Pequeno, "5" Demais. |
cnae | string | Não | Código CNAE (apenas dígitos, ex: "6201500"). |
city | string | Não | Nome ou código da cidade. |
state | string | Não | Sigla da UF, 2 letras (ex: "SP"). |
legalNature | string | Não | Código da Natureza Jurídica (apenas dígitos, ex: "2062"). A tabela oficial é mantida pelo IBGE/CONCLA e adotada pela Receita Federal. Versão atualmente vigente: Natureza Jurídica 2021. Sempre confira a versão mais atual no índice oficial do CONCLA. |
POST /api/AdvancedSearch/FilterLegalPerson HTTP/1.1
Host: {base-url-directdata}
Token: 00000000-0000-0000-0000-000000000000
Content-Type: application/json
{
"companyName": "",
"openingDateStart": "2020-01-01",
"openingDateEnd": "2024-12-31",
"companySize": "",
"cnae": "6201500",
"city": "",
"state": "SP",
"legalNature": ""
}
{
"success": true,
"status": "OK",
"elapsedTimeMs": 845,
"dateTimeExecution": "08/05/2026 14:32:15",
"error": null,
"listFilters": [
{
"id": "9c4b1e02-...",
"cnpj": "12345678000190",
"companyName": "EXEMPLO TECNOLOGIA LTDA",
"tradeName": "EXEMPLO TECH",
"openingDate": "2021-04-12"
}
],
"numberOfCompanies": 1
}
| Campo | Tipo | Descrição |
|---|---|---|
listFilters | array | Lista de empresas que atendem aos critérios. |
listFilters[].id | string | Identificador interno do registro — usar em ProcessingIds. |
listFilters[].cnpj | string | CNPJ da empresa (apenas dígitos). |
listFilters[].companyName | string | Razão Social. |
listFilters[].tradeName | string | Nome Fantasia. |
listFilters[].openingDate | string | Data de abertura da empresa. |
numberOfCompanies | int | Quantidade total de empresas encontradas pelo filtro. |
Realiza a busca filtrada de Pessoas Físicas. Retorna a lista de pessoas que atendem aos critérios e a quantidade total de registros encontrados. Esta operação não consome saldo.
application/json
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
fullName | string | Não | Nome completo ou parte do nome. |
motherName | string | Não | Nome da mãe. |
postalCode | string | Não | CEP no formato NNNNN-NNN ou NNNNNNN. |
street | string | Não | Logradouro. |
city | string | Não | Cidade. |
state | string | Não | Sigla da UF, 2 letras (ex: "RJ"). |
number | string | Não | Número do endereço. |
neighborhood | string | Não | Bairro. |
email | string | Não | E-mail. |
phoneNumber | string | Não | Telefone (apenas dígitos). |
dateOfBirthStart | string | Não | Data inicial de nascimento. Formatos aceitos: yyyy-MM-dd ou dd-MM-yyyy. |
dateOfBirthEnd | string | Não | Data final de nascimento. Formatos aceitos: yyyy-MM-dd ou dd-MM-yyyy. |
receiveAuxilioEmergencial | boolean? | Não Premium | Filtra por recebimento de Auxílio Emergencial. true = recebe; false = não recebe; omitido = filtro desligado. |
receiveAuxilioReconstrucao | boolean? | Não Premium | Filtra por recebimento de Auxílio Reconstrução. true = recebe; false = não recebe; omitido = filtro desligado. |
receiveBolsaFamilia | boolean? | Não Premium | Filtra por recebimento de Bolsa Família. true = recebe; false = não recebe; omitido = filtro desligado. |
receiveBPC | boolean? | Não Premium | Filtra por recebimento de BPC (Benefício de Prestação Continuada). true = recebe; false = não recebe; omitido = filtro desligado. |
receiveGarantiaSafra | boolean? | Não Premium | Filtra por recebimento de Garantia Safra. true = recebe; false = não recebe; omitido = filtro desligado. |
receiveSeguroDefeso | boolean? | Não Premium | Filtra por recebimento de Seguro Defeso. true = recebe; false = não recebe; omitido = filtro desligado. |
POST /api/AdvancedSearch/FilterNaturalPerson HTTP/1.1
Host: {base-url-directdata}
Token: 00000000-0000-0000-0000-000000000000
Content-Type: application/json
{
"fullName": "JOAO DA SILVA",
"state": "RJ",
"dateOfBirthStart": "1980-01-01",
"dateOfBirthEnd": "1990-12-31"
}
POST /api/AdvancedSearch/FilterNaturalPerson HTTP/1.1
Host: {base-url-directdata}
Token: 00000000-0000-0000-0000-000000000000
Content-Type: application/json
{
"state": "SP",
"receiveBolsaFamilia": true,
"receiveBPC": false
}
{
"success": true,
"status": "OK",
"elapsedTimeMs": 612,
"dateTimeExecution": "08/05/2026 14:33:02",
"error": null,
"listFilters": [
{
"id": "0a5d7b22-...",
"cpf": "12345678901",
"fullName": "JOAO DA SILVA",
"motherName": "MARIA DA SILVA",
"dateOfBirth": "1985-07-22"
}
],
"numberOfPeople": 1
}
| Campo | Tipo | Descrição |
|---|---|---|
listFilters | array | Lista de pessoas que atendem aos critérios. |
listFilters[].id | string | Identificador interno do registro — usar em ProcessingIds. |
listFilters[].cpf | string | CPF (apenas dígitos). |
listFilters[].fullName | string | Nome completo. |
listFilters[].motherName | string | Nome da mãe. |
listFilters[].dateOfBirth | string | Data de nascimento. |
numberOfPeople | int | Quantidade total de pessoas encontradas pelo filtro. |
Dispara o processamento dos registros selecionados a partir do resultado de
FilterLegalPerson ou FilterNaturalPerson. O backend cria uma pesquisa,
retorna imediatamente o SearchUid e o enriquecimento ocorre de forma assíncrona.
O cliente deve aguardar e consultar os resultados via ViewSearch.
listIds e a tabela de preços contratada. Verifique seu saldo antes de disparar
processamentos com listas grandes.
application/json
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
listIds | array<string> | Sim | Lista de Ids retornados em FilterLegalPerson.listFilters[].id ou FilterNaturalPerson.listFilters[].id. |
searchName | string | Não | Nome amigável da pesquisa, usado para identificá-la posteriormente em relatórios. |
premium | boolean | Não Premium | Quando true, o retorno inclui dados de benefícios sociais. Aplicável somente a CPFs. Padrão: false. |
ViewSearchpremium: false (padrão) devolvem o payload plano de
Cadastro Pessoa Física Plus em searchItems[].returnJson.premium: true devolvem um envelope com dois sub-objetos:
{
"metaDados": { ... },
"retorno": {
"cadastroPessoaFisicaPlus": { ... },
"beneficiosSociais": { ... }
}
}
Se o serviço de Benefícios Sociais falhar, beneficiosSociais será null
e o resultado do item ficará como Sucesso Com Ressalvas.
POST /api/AdvancedSearch/ProcessingIds HTTP/1.1
Host: {base-url-directdata}
Token: 00000000-0000-0000-0000-000000000000
Content-Type: application/json
{
"listIds": [
"9c4b1e02-...",
"0a5d7b22-..."
],
"searchName": "Prospecção SP — Tecnologia (Maio/2026)"
}
POST /api/AdvancedSearch/ProcessingIds HTTP/1.1
Host: {base-url-directdata}
Token: 00000000-0000-0000-0000-000000000000
Content-Type: application/json
{
"listIds": [
"9c4b1e02-...",
"0a5d7b22-..."
],
"searchName": "Beneficiários SP (Maio/2026)",
"premium": true
}
{
"success": true,
"status": "OK",
"elapsedTimeMs": 215,
"dateTimeExecution": "08/05/2026 14:34:18",
"error": null,
"searchUid": "f1e2d3c4-b5a6-7890-1234-567890abcdef"
}
| Campo | Tipo | Descrição |
|---|---|---|
searchUid | Guid | Identificador único da pesquisa criada — utilizar em ViewSearch e Reprocessing. |
Retorna o detalhamento completo de uma pesquisa previamente criada via ProcessingIds.
Inclui o consumo total da pesquisa e a lista de itens processados — cada item com seu status
individual e o JSON enriquecido devolvido pelas fontes de dados.
application/json
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
searchUid | Guid | Sim | SearchUid retornado por ProcessingIds. |
POST /api/AdvancedSearch/ViewSearch HTTP/1.1
Host: {base-url-directdata}
Token: 00000000-0000-0000-0000-000000000000
Content-Type: application/json
{
"searchUid": "f1e2d3c4-b5a6-7890-1234-567890abcdef"
}
{
"success": true,
"status": "OK",
"elapsedTimeMs": 380,
"dateTimeExecution": "08/05/2026 14:36:45",
"error": null,
"viewSearch": {
"consumptionTotal": 4.50,
"errors": [],
"warnings": [
{
"title": "Documento não localizado",
"description": "1 item retornou sem dados na fonte externa."
}
],
"searchItems": [
{
"name": "EXEMPLO TECNOLOGIA LTDA",
"document": "12345678000190",
"resultId": 4,
"result": "Pesquisado com Sucesso",
"returnJson": { "...": "payload completo do enriquecimento" }
},
{
"name": "OUTRA EMPRESA EXEMPLO LTDA",
"document": "98765432000110",
"resultId": 6,
"result": "Falha na Pesquisa",
"returnJson": null
}
]
}
}
| Campo | Tipo | Descrição |
|---|---|---|
viewSearch | object | Objeto com o detalhamento completo da pesquisa. |
viewSearch.consumptionTotal | decimal | Total consumido em saldo pela pesquisa. |
viewSearch.errors | array | Lista de erros agregados da pesquisa (title, description). |
viewSearch.warnings | array | Lista de avisos/ressalvas da pesquisa (title, description). |
viewSearch.searchItems | array | Itens processados na pesquisa. |
searchItems[].name | string | Nome ou Razão Social do item. |
searchItems[].document | string | CPF ou CNPJ do item (apenas dígitos). |
searchItems[].resultId | int | Status do item conforme tabela em 1.4 Enumeradores. Valores possíveis: 1, 3, 4, 5, 6 ou 7. |
searchItems[].result | string | Descrição textual do status (ex: "Pesquisado com Sucesso", "Falha na Pesquisa"). |
searchItems[].returnJson | dynamic | JSON enriquecido devolvido pela fonte de dados — varia por tipo de pesquisa. null em caso de falha ou item ainda não processado. |
resultId = 1 (Na Fila) ou
resultId = 3 (Pesquisando) ainda estão em processamento. Aguarde alguns segundos e chame
ViewSearch novamente. Recomenda-se polling com intervalo crescente (ex: 3s, 5s, 10s, 30s)
até que todos os itens estejam em estado terminal — 4 (Pesquisado com Sucesso),
5 (Parcialmente Pequisado), 6 (Falha na Pesquisa) ou 7
(Resultado Sigiloso).
Solicita o reprocessamento de uma pesquisa existente. Útil quando a pesquisa terminou com itens
em status terminal de falha — tipicamente 6 — Falha na Pesquisa — e o cliente quer
tentar novamente sem precisar refazer a etapa de filtragem. Também pode ser usado para itens
em 5 — Parcialmente Pequisado caso se queira tentar uma nova consulta nas fontes
que não responderam.
application/json
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
guid | Guid | Sim | SearchUid da pesquisa que será reprocessada. |
POST /api/AdvancedSearch/Reprocessing HTTP/1.1
Host: {base-url-directdata}
Token: 00000000-0000-0000-0000-000000000000
Content-Type: application/json
{
"guid": "f1e2d3c4-b5a6-7890-1234-567890abcdef"
}
{
"success": true,
"status": "OK",
"elapsedTimeMs": 142,
"dateTimeExecution": "08/05/2026 14:38:02",
"error": null
}
Reprocessing, a pesquisa volta ao ciclo de processamento. Use
ViewSearch com o mesmo searchUid para acompanhar o resultado.
Quando uma requisição falha, o envelope ResponseMetaDataDTO retorna o campo
error preenchido com o nome do campo problemático e a mensagem correspondente.
O campo success será false e o status HTTP refletirá o tipo de falha.
// Exemplo de resposta 401 Unauthorized (token inválido)
{
"success": false,
"status": "Unauthorized",
"elapsedTimeMs": 12,
"dateTimeExecution": "08/05/2026 14:40:01",
"error": {
"fieldName": "Token",
"message": "Token de acesso inválido. Verifique suas credenciais."
}
}
// Exemplo de resposta 403 Forbidden (produto não liberado)
{
"success": false,
"status": "Forbidden",
"elapsedTimeMs": 18,
"dateTimeExecution": "08/05/2026 14:40:14",
"error": {
"fieldName": "Product",
"message": "Produto não liberado para esta empresa."
}
}
// Exemplo de resposta 500 Internal Server Error
{
"success": false,
"status": "Internal Server Error",
"elapsedTimeMs": 320,
"dateTimeExecution": "08/05/2026 14:40:55",
"error": {
"fieldName": null,
"message": "Erro inesperado ao processar a requisição."
}
}
Token está ausente, mal formado ou não corresponde a uma
empresa válida.POST /api/AdvancedSearch/FilterLegalPerson
| Código | Condição | Campo | Mensagem |
|---|---|---|---|
| 400 | Body inválido ou todos os filtros vazios | filter | Pelo menos um filtro deve ser informado. |
| 401 | Header Token ausente ou inválido | Token | Token de acesso inválido. Verifique suas credenciais. |
| 403 | Empresa sem o produto Pesquisa Avançada habilitado | Product | Produto não liberado para esta empresa. |
| 500 | Exceção não tratada no servidor | — | Erro inesperado ao processar a requisição. |
POST /api/AdvancedSearch/FilterNaturalPerson
| Código | Condição | Campo | Mensagem |
|---|---|---|---|
| 400 | Body inválido ou todos os filtros vazios/nulos | filter | Pelo menos um filtro deve ser informado. |
| 401 | Header Token ausente ou inválido | Token | Token de acesso inválido. Verifique suas credenciais. |
| 403 | Empresa sem o produto Pesquisa Avançada habilitado | Product | Produto não liberado para esta empresa. |
| 403 | Filtro Premium utilizado sem o produto Pesquisa Avançada Premium contratado | Product | Sua empresa não possui contratação do módulo Pesquisa Avançada Premium. Entre em contato com o comercial. |
| 500 | Exceção não tratada no servidor | — | Erro inesperado ao processar a requisição. |
POST /api/AdvancedSearch/ProcessingIds
| Código | Condição | Campo | Mensagem |
|---|---|---|---|
| 400 | listIds vazio ou nulo | listIds | É necessário informar ao menos um Id para processamento. |
| 400 | Algum Id informado não pertence ao resultado de filtros do cliente | listIds | Um ou mais Ids são inválidos ou não pertencem à empresa. |
| 400 | premium: true enviado com CNPJs na lista | premium | Filtros Premium estão disponíveis apenas para Pessoa Física. |
| 401 | Header Token ausente ou inválido | Token | Token de acesso inválido. Verifique suas credenciais. |
| 403 | Empresa sem o produto habilitado ou saldo insuficiente | Product | Produto não liberado ou saldo insuficiente para esta operação. |
| 403 | premium: true enviado sem o produto Pesquisa Avançada Premium contratado | Product | Sua empresa não possui contratação do módulo Pesquisa Avançada Premium. Entre em contato com o comercial. |
| 500 | Exceção não tratada no servidor | — | Erro inesperado ao processar a requisição. |
POST /api/AdvancedSearch/ViewSearch
| Código | Condição | Campo | Mensagem |
|---|---|---|---|
| 400 | searchUid vazio ou em formato inválido | searchUid | SearchUid inválido. |
| 404 | Pesquisa não encontrada para a empresa autenticada | searchUid | Não foi encontrada nenhuma pesquisa com este identificador. |
| 401 | Header Token ausente ou inválido | Token | Token de acesso inválido. Verifique suas credenciais. |
| 500 | Exceção não tratada no servidor | — | Erro inesperado ao processar a requisição. |
POST /api/AdvancedSearch/Reprocessing
| Código | Condição | Campo | Mensagem |
|---|---|---|---|
| 400 | guid vazio ou em formato inválido | guid | SearchUid inválido. |
| 404 | Pesquisa não encontrada para a empresa autenticada | guid | Não foi encontrada nenhuma pesquisa com este identificador. |
| 401 | Header Token ausente ou inválido | Token | Token de acesso inválido. Verifique suas credenciais. |
| 500 | Exceção não tratada no servidor | — | Erro inesperado ao processar a requisição. |