Manual de Integração — API Direct Data
O Dossiê é o produto Direct Data que consolida em um único relatório os retornos de múltiplas APIs configuradas em um Template, para um ou mais documentos (CPFs ou CNPJs). Cada dossiê passa por um ciclo assíncrono — é criado, processado pelas APIs do template e fica disponível para consulta detalhada e/ou geração de PDF.
Esta API permite ao cliente: processar novos dossiês a partir de um template, consultar templates disponíveis, status e detalhes (resumo ou completo), gerar PDF de um dossiê concluído, listar o histórico filtrado e habilitar/desabilitar o monitoramento de um dossiê.
/api/Dossierapplication/json) — exceto GeneratePDF, que retorna application/pdf.
Antes de usar a API, é importante entender as três entidades centrais do produto:
| Conceito | Identificador | Descrição |
|---|---|---|
| Template | templateID |
Configuração reutilizável que define quais APIs serão consultadas para cada dossiê. Templates são tipados por personType (PF ou PJ) e mantidos pelo cliente na plataforma web Direct Data. |
| Dossiê | dossieID |
Instância de execução de um template para um documento específico. Possui um ciclo de vida assíncrono (situação, tipo de resultado e status) e fica disponível indefinidamente após o processamento. |
| Monitoramento | — | Quando ligado em um dossiê, dispara reexecuções automáticas e gera eventos de alteração nos dados retornados pelas APIs do template, similar ao produto Monitor. |
https://app.directd.com.br/dossie/setup,
crie um novo template, escolha o tipo de pessoa (PF ou PJ),
selecione os módulos/APIs desejados e salve. A partir desse momento o template fica disponível em
GET /Templates, que retorna o id a ser usado
como templateID em POST /Process.
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 (POST/PATCH) | Sempre application/json nos endpoints POST e PATCH. |
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 (exceto GeneratePDF, que retorna o binário do PDF em caso de sucesso)
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. |
Usado em GET /Templates (filtro) e em respostas de histórico:
| Valor | Descrição |
|---|---|
1 | Pessoa Física (PF) — templates aplicáveis a CPFs. |
2 | Pessoa Jurídica (PJ) — templates aplicáveis a CNPJs. |
O ciclo de vida de um dossiê é descrito por três campos independentes, todos do tipo
{ id, description }. Os três aparecem juntos no envelope dossierStatus de
GET /Status, GET /Details e
GET /Full-Details, e também em POST /History (como
situationType, resultType e status).
situation — Situação do dossiêRepresenta em qual etapa do ciclo de processamento o dossiê está.
| id | description |
|---|---|
1 | Aguardando na fila |
2 | Processando |
3 | Concluído |
4 | Concluído com erros |
6 | Cancelado |
7 | Saldo Insuficiente |
3 Concluído, 4 Concluído com erros, 6 Cancelado e 7 Saldo Insuficiente.1 Aguardando na fila e 2 Processando — repita o polling em GET /Status até alcançar um estado terminal.
resultType — Tipo do resultado consolidadoReflete o desfecho do processamento sob a ótica do dado retornado pelas APIs do template.
| id | description |
|---|---|
5 | Aguardando Processamento |
6 | Finalizado |
7 | Indisponível |
8 | Erro |
9 | Documento Protegido pela LGPD |
10 | Pessoa Exposta Politicamente (PEP) |
11 | Documento Não Encontrado |
status — Apontamento agregadoSintetiza o nível de atenção exigido pelo conjunto de APIs consultadas.
| id | description |
|---|---|
1 | Regular |
2 | Atenção |
3 | Alerta |
4 | Inconclusiva |
5 | Indisponível |
O fluxo padrão de uso da API combina descoberta de templates, processamento, polling de status e consulta de detalhes:
Inicia o processamento de um ou mais dossiês a partir de um template e uma lista de documentos
(CPFs ou CNPJs). Retorna imediatamente os dossieIDs criados — o processamento das APIs
do template ocorre de forma assíncrona. Acompanhe o progresso via GET /Status.
documents e a configuração do template (quantidade de APIs e custo por API).
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
templateID | string | Sim | Identificador do template — obtido via GET /Templates. |
documents | array<string> | Sim | Lista de CPFs (PF) ou CNPJs (PJ) que serão processados. Apenas dígitos. O tipo deve ser compatível com o personType do template informado. |
POST /api/Dossier/Process HTTP/1.1
Host: {base-url-directdata}
Token: 00000000-0000-0000-0000-000000000000
Content-Type: application/json
{
"templateID": "TPL-9c4b1e02",
"documents": [
"12345678000190",
"98765432000110"
]
}
{
"success": true,
"status": "OK",
"elapsedTimeMs": 245,
"dateTimeExecution": "08/05/2026 14:32:15",
"error": null,
"dossierProcesses": [
{
"dossieID": "DOS-f1e2d3c4-...",
"document": "12345678000190",
"message": "Dossiê em processamento."
},
{
"dossieID": "DOS-a5b6c7d8-...",
"document": "98765432000110",
"message": "Dossiê em processamento."
}
]
}
| Campo | Tipo | Descrição |
|---|---|---|
dossierProcesses[] | array | Um item por documento enviado em documents. |
dossierProcesses[].dossieID | string | Identificador do dossiê criado — usar nos endpoints Status, Details, Full-Details, GeneratePDF e Monitoring-Config. |
dossierProcesses[].document | string | CPF ou CNPJ correspondente. |
dossierProcesses[].message | string | Mensagem descritiva do resultado individual de cada documento. |
Retorna o histórico paginado de dossiês da empresa autenticada com filtros por data, tipo de pessoa,
status, template, etc. Use a paginação via take para controlar o volume de resultados.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
startDate | string | Não | Data inicial. Formatos aceitos: yyyy-MM-dd ou dd-MM-yyyy. Padrão: data atual. |
endDate | string | Não | Data final. Formatos aceitos: yyyy-MM-dd ou dd-MM-yyyy. Padrão: data atual. |
hasMonitoring | bool | Não | true = apenas com monitoramento ativo, false = apenas sem, null = ambos. |
resultType | int | Não | Filtra por tipo de resultado. 0 = todos. |
situationType | int | Não | Filtra por situação. 0 = todas. |
id | string | Não | Filtra por dossieID específico. |
name | string | Não | Filtra por nome (Razão Social ou Nome) — busca parcial. |
personType | short | Não | 1 = PF, 2 = PJ. 0 = ambos. |
statusId | short | Não | Filtra por status do dossiê. 0 = todos. |
templateID | string | Não | Filtra por template específico. |
version | string | Não | Filtra pela versão do template usada na geração. |
take | int | Não | Quantidade máxima de registros retornados. Padrão: 10. |
POST /api/Dossier/History HTTP/1.1
Host: {base-url-directdata}
Token: 00000000-0000-0000-0000-000000000000
Content-Type: application/json
{
"startDate": "2026-04-01",
"endDate": "2026-05-08",
"personType": 2,
"take": 50
}
{
"success": true,
"status": "OK",
"elapsedTimeMs": 312,
"dateTimeExecution": "08/05/2026 14:35:02",
"error": null,
"histories": [
{
"guid": "DOS-f1e2d3c4-...",
"name": "EXEMPLO TECNOLOGIA LTDA",
"date": "07/05/2026",
"user": "joao.silva@cliente.com.br",
"company": "Cliente Exemplo Ltda",
"hasMonitor": true,
"iCanView": true,
"resultType": { "id": 6, "description": "Finalizado" },
"situationType": { "id": 3, "description": "Concluído" },
"status": { "id": 1, "description": "Regular" },
"templateName": "Análise Tributária PJ",
"personType": "Pessoa Jurídica",
"version": "1.0"
}
]
}
histories[]| Campo | Tipo | Descrição |
|---|---|---|
guid | string | dossieID — usar nos endpoints de detalhe, status, PDF e monitoramento. |
name | string | Razão Social ou Nome do documento processado. |
date | string | Data de criação do dossiê. |
user | string | Usuário que disparou o processamento. |
company | string | Empresa do usuário. |
hasMonitor | bool | Indica se o dossiê tem monitoramento ativo. |
iCanView | bool | Indica se o usuário autenticado tem permissão de visualizar este dossiê. |
resultType | object | { id, description } — tipo do resultado. |
situationType | object | { id, description } — situação geral. |
status | object | { id, description } — status detalhado. |
templateName | string | Nome do template utilizado. |
personType | string | Descrição textual: "Pessoa Física" ou "Pessoa Jurídica". |
version | string | Versão do template utilizada. |
Retorna o PDF de um dossiê concluído. Em caso de sucesso, a resposta é um arquivo
application/pdf binário (não JSON).
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
dossieID | string | Sim | Identificador do dossiê. |
POST /api/Dossier/GeneratePDF?dossieID=DOS-f1e2d3c4-... HTTP/1.1
Host: {base-url-directdata}
Token: 00000000-0000-0000-0000-000000000000
Em caso de sucesso, a resposta é o binário do PDF — Content-Type: application/pdf,
com o nome do arquivo igual ao dossieID.
Em caso de erro, a resposta segue o envelope padrão ResponseMetaDataDTO em JSON
(com success: false e o detalhe em error).
Lista os templates disponíveis para a empresa autenticada, filtrados pelo tipo de pessoa.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
personType | int | Sim | 1 = PF, 2 = PJ. |
GET /api/Dossier/Templates?personType=2 HTTP/1.1
Host: {base-url-directdata}
Token: 00000000-0000-0000-0000-000000000000
{
"success": true,
"status": "OK",
"elapsedTimeMs": 88,
"dateTimeExecution": "08/05/2026 14:30:01",
"error": null,
"templates": [
{
"id": "TPL-9c4b1e02",
"name": "Análise Tributária PJ",
"date": "12/01/2026",
"personType": 2
}
]
}
templates[]| Campo | Tipo | Descrição |
|---|---|---|
id | string | Identificador do template — usar como templateID em POST /Process. |
name | string | Nome do template. |
date | string | Data de criação do template. |
personType | int | 1 (PF) ou 2 (PJ). |
Consulta o status atual de um dossiê. Use este endpoint como polling após
POST /Process, até que situation indique conclusão.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
dossieID | string | Sim | Identificador do dossiê. |
GET /api/Dossier/Status?dossieID=DOS-f1e2d3c4-... HTTP/1.1
Host: {base-url-directdata}
Token: 00000000-0000-0000-0000-000000000000
{
"success": true,
"status": "OK",
"elapsedTimeMs": 38,
"dateTimeExecution": "08/05/2026 14:33:18",
"error": null,
"dossierStatus": {
"situation": { "id": 3, "description": "Concluído" },
"resultType": { "id": 6, "description": "Finalizado" },
"status": { "id": 1, "description": "Regular" }
}
}
Os três campos seguem o padrão { id, description } descrito em
1.5 Enumeradores.
Retorna o resumo das APIs do dossiê e seus alertas, sem o payload completo. Use para listar todas as
APIs com seu status individual e priorização. Para o conteúdo completo (payload object),
use Full-Details.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
dossieID | string | Sim | Identificador do dossiê. |
GET /api/Dossier/Details?dossieID=DOS-f1e2d3c4-... HTTP/1.1
Host: {base-url-directdata}
Token: 00000000-0000-0000-0000-000000000000
{
"success": true,
"status": "OK",
"elapsedTimeMs": 124,
"dateTimeExecution": "08/05/2026 14:34:12",
"error": null,
"listDetails": [
{
"nameAPI": "Receita Federal CNPJ",
"moduleName": "Cadastro",
"apiID": "API-001",
"hasPdf": false,
"origin": "Template",
"statusPriority": "Sucesso",
"alertList": [
{
"resultType": { "id": 6, "description": "Finalizado" }
}
]
}
],
"dossierStatus": {
"situation": { "id": 3, "description": "Concluído" },
"resultType": { "id": 6, "description": "Finalizado" },
"status": { "id": 1, "description": "Regular" }
}
}
listDetails[]| Campo | Tipo | Descrição |
|---|---|---|
nameAPI | string | Nome legível da API consultada. |
moduleName | string | Módulo/categoria da API (ex: Cadastro, Fiscal). |
apiID | string | Identificador interno da API. |
hasPdf | bool | Indica se a API original gerou um PDF anexável. |
origin | string | Origem da configuração (ex: Template). |
statusPriority | string | Status priorizado (texto descritivo). |
alertList[] | array | Lista de alertas/apontamentos detectados nesta API. |
O bloco dossierStatus segue a mesma estrutura descrita em
GET /Status.
Retorna o conteúdo completo do dossiê — incluindo o sumário com nome do documento processado, o
retorno bruto de cada API (object), histórico de monitoramento e, quando disponível,
a análise de IA (aiAnalysis).
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
dossieID | string | Sim | Identificador do dossiê. |
GET /api/Dossier/Full-Details?dossieID=DOS-f1e2d3c4-... HTTP/1.1
Host: {base-url-directdata}
Token: 00000000-0000-0000-0000-000000000000
{
"success": true,
"status": "OK",
"elapsedTimeMs": 412,
"dateTimeExecution": "08/05/2026 14:36:45",
"error": null,
"summary": {
"name": "EXEMPLO TECNOLOGIA LTDA",
"document": "12.345.678/0001-90",
"lastUpdate": "07/05/2026",
"hasMonitored": true,
"status": "Concluído",
"frequency": "Mensal",
"templateName": "Análise Tributária PJ",
"personType": 2
},
"details": [
{
"nameAPI": "Receita Federal CNPJ",
"apiID": "API-001",
"hasPdf": false,
"origin": "Template",
"moduleName": "Cadastro",
"alertList": [],
"object": { "...": "payload completo da API" },
"result": "Sucesso",
"statusPriority": "Sucesso",
"hasChanged": false,
"lastUpdated": "07/05/2026",
"monitoringHistory": [
{
"api": "Receita Federal CNPJ",
"apiID": "API-001",
"monitoringID": "MON-...",
"events": [
{ "date": "07/05/2026", "event": "Sem alteração detectada", "guid": "..." }
]
}
],
"aiInsights": []
}
],
"dossierStatus": {
"situation": { "id": 3, "description": "Concluído" },
"resultType": { "id": 6, "description": "Finalizado" },
"status": { "id": 1, "description": "Regular" }
},
"aiAnalysis": null
}
object: ele é declarado como dynamic (sem
schema fixo) porque seu conteúdo varia conforme cada API consultada no template. Cada item de
details[] carrega seu próprio payload em object, com a estrutura
retornada pela API correspondente — identificada pelos campos nameAPI e
apiID. Para conhecer e mapear o schema de cada API individualmente, consulte a
documentação Swagger em
https://apiv3.directd.com.br/swagger/index.html,
localize a API pelo nome/identificador e tipe o retorno na sua aplicação a partir do schema
documentado lá.
summary| Campo | Tipo | Descrição |
|---|---|---|
name | string | Razão Social ou Nome do documento. |
document | string | CPF ou CNPJ formatado. |
lastUpdate | string | Data da última atualização do dossiê. |
hasMonitored | bool | Indica se o dossiê tem monitoramento ativo. |
status | string | Texto descritivo do status agregado. |
frequency | string | Frequência do monitoramento, quando aplicável. |
templateName | string | Nome do template utilizado. |
personType | int | 1 (PF) ou 2 (PJ). |
details[]| Campo | Tipo | Descrição |
|---|---|---|
nameAPI / apiID / moduleName / origin / statusPriority / alertList | — | Mesma semântica de GET /Details. |
object | dynamic | Payload completo retornado pela API consultada — varia por tipo de API. |
result | string | Resultado textual da execução desta API. |
hasChanged | bool | Indica se houve alteração em relação à execução anterior (relevante quando há monitoramento). |
lastUpdated | string | Data da última atualização desta API no dossiê. |
monitoringHistory[] | array | Histórico de eventos de monitoramento para esta API. Cada item contém api, apiID, monitoringID e events[] (cada evento: date, event, guid). |
aiInsights[] | array | Insights gerados por IA para esta API, quando disponíveis. |
| Campo | Tipo | Descrição |
|---|---|---|
dossierStatus | object | Status agregado do dossiê — mesma estrutura de GET /Status. |
aiAnalysis | dynamic | Análise consolidada de IA do dossiê inteiro, quando disponível. null caso contrário. |
Habilita ou desabilita o monitoramento de um dossiê. Quando habilitado, o dossiê passa a ser
reexecutado periodicamente e gera eventos a cada alteração detectada — visíveis em
Full-Details.details[].monitoringHistory[].
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
dossieID | string | Sim | Identificador do dossiê. |
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
monitoring | bool | Sim | true = liga o monitoramento, false = desliga. Padrão: true. |
PATCH /api/Dossier/Monitoring-Config?dossieID=DOS-f1e2d3c4-... HTTP/1.1
Host: {base-url-directdata}
Token: 00000000-0000-0000-0000-000000000000
Content-Type: application/json
{
"monitoring": true
}
{
"success": true,
"status": "OK",
"elapsedTimeMs": 76,
"dateTimeExecution": "08/05/2026 14:38:02",
"error": null
}
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 404 Not Found (dossiê não pertence à empresa)
{
"success": false,
"status": "Not Found",
"elapsedTimeMs": 28,
"dateTimeExecution": "08/05/2026 14:40:14",
"error": {
"fieldName": "dossieID",
"message": "Dossiê não encontrado."
}
}
Token está ausente, mal formado ou
não corresponde a uma empresa válida.dossieID ou templateID informado não existe ou não pertence à empresa
autenticada.
Mesma família de erros se aplica a todos os endpoints da controller.
| Código | Condição | Endpoints aplicáveis |
|---|---|---|
| 400 | Body inválido / parâmetro obrigatório ausente / Guid mal formado | Todos |
| 400 | templateID não encontrado ou inválido | Process |
| 400 | documents[] vazio ou tipo incompatível com o template | Process |
| 401 | Header Token ausente ou inválido | Todos |
| 403 | Empresa sem o produto Dossiê habilitado, ou limite mensal atingido | Todos |
| 404 | dossieID não pertence à empresa autenticada | Status, Details, Full-Details, GeneratePDF, Monitoring-Config |
| 404 | Dossiê ainda não concluído (PDF não disponível) | GeneratePDF |
| 500 | Exceção não tratada no servidor | Todos |