Direct Data

Dossiê

Manual de Integração — API Direct Data


Produto: Dossiê — Consolidação de Dados em Relatório

Base URL: /api/Dossier

Autenticação: Header Token (Guid)

Versão: 2.0

Sumário

1. Visão Geral

1.1 Descrição do Produto

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ê.

Base URL: /api/Dossier
Protocolo: HTTPS
Formato de dados: JSON (application/json) — exceto GeneratePDF, que retorna application/pdf.

1.2 Conceitos-Chave

Antes de usar a API, é importante entender as três entidades centrais do produto:

ConceitoIdentificadorDescriçã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.
Pré-requisito — criação de templates: os templates precisam ser criados previamente na plataforma web Direct Data. Acesse 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.

1.3 Autenticação

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.

HeaderTipoObrigatórioDescrição
TokenGuidSimToken de API fornecido pela Direct Data, no formato 00000000-0000-0000-0000-000000000000.
Content-TypestringSim (POST/PATCH)Sempre application/json nos endpoints POST e PATCH.
Como obter seu Token de API: acesse o painel da Direct Data, faça login com sua conta e vá até a tela de perfil em 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.

1.4 Estrutura de Resposta Padrão

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
}
CampoTipoDescrição
successboolIndica se a operação foi bem sucedida (HTTP 2xx).
statusstringDescrição textual do status HTTP retornado.
elapsedTimeMslongTempo total de processamento da requisição em milissegundos.
dateTimeExecutionstringData e hora em que a requisição foi executada no servidor.
errorobjectObjeto com fieldName e message em caso de erro. null em caso de sucesso.

1.5 Enumeradores

PersonType (tipo de pessoa)

Usado em GET /Templates (filtro) e em respostas de histórico:

ValorDescrição
1Pessoa Física (PF) — templates aplicáveis a CPFs.
2Pessoa Jurídica (PJ) — templates aplicáveis a CNPJs.

Estrutura de Status do Dossiê

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á.

iddescription
1Aguardando na fila
2Processando
3Concluído
4Concluído com erros
6Cancelado
7Saldo Insuficiente
Status finais (terminais): 3 Concluído, 4 Concluído com erros, 6 Cancelado e 7 Saldo Insuficiente.
Status transitórios: 1 Aguardando na fila e 2 Processando — repita o polling em GET /Status até alcançar um estado terminal.

resultType — Tipo do resultado consolidado

Reflete o desfecho do processamento sob a ótica do dado retornado pelas APIs do template.

iddescription
5Aguardando Processamento
6Finalizado
7Indisponível
8Erro
9Documento Protegido pela LGPD
10Pessoa Exposta Politicamente (PEP)
11Documento Não Encontrado

status — Apontamento agregado

Sintetiza o nível de atenção exigido pelo conjunto de APIs consultadas.

iddescription
1Regular
2Atenção
3Alerta
4Inconclusiva
5Indisponível

1.6 Fluxo de Integração Recomendado

O fluxo padrão de uso da API combina descoberta de templates, processamento, polling de status e consulta de detalhes:

Cliente Direct Data API | | | Descoberta: | |-- GET /Templates?personType=2 --------->| |<-- 200 { templates: [...] } -------------| | | | Processamento: | |-- POST /Process ----------------------->| | { templateID, documents[] } | |<-- 200 { dossierProcesses: [...] } ------| | | | (polling até concluir) | |-- GET /Status?dossieID=... ------------>| |<-- 200 { situation, resultType, status }-| | | | Consulta de resultados: | |-- GET /Details?dossieID=... ----------->| (resumo de APIs e alertas) |-- GET /Full-Details?dossieID=... ------>| (com object dynamic e histórico) |<-- 200 { ... } --------------------------| | | | Saída/relatório: | |-- POST /GeneratePDF ------------------->| |<-- 200 application/pdf ------------------| | | | Auxiliares: | |-- POST /History (lista filtrada) | |-- PATCH /Monitoring-Config (liga/desliga monitoramento)

2. Endpoints POST

2.1 Process

POST /api/Dossier/Process

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.

Esta operação consome saldo conforme a quantidade de documentos enviados em documents e a configuração do template (quantidade de APIs e custo por API).

Body da Requisição

CampoTipoObrigatórioDescrição
templateIDstringSimIdentificador do template — obtido via GET /Templates.
documentsarray<string>SimLista 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.

Exemplo de Requisição

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"
  ]
}

Exemplo de Resposta (200)

{
  "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."
    }
  ]
}

Campos da Resposta

CampoTipoDescrição
dossierProcesses[]arrayUm item por documento enviado em documents.
dossierProcesses[].dossieIDstringIdentificador do dossiê criado — usar nos endpoints Status, Details, Full-Details, GeneratePDF e Monitoring-Config.
dossierProcesses[].documentstringCPF ou CNPJ correspondente.
dossierProcesses[].messagestringMensagem descritiva do resultado individual de cada documento.

2.2 History

POST /api/Dossier/History

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.

Body da Requisição

CampoTipoObrigatórioDescrição
startDatestringNãoData inicial. Formatos aceitos: yyyy-MM-dd ou dd-MM-yyyy. Padrão: data atual.
endDatestringNãoData final. Formatos aceitos: yyyy-MM-dd ou dd-MM-yyyy. Padrão: data atual.
hasMonitoringboolNãotrue = apenas com monitoramento ativo, false = apenas sem, null = ambos.
resultTypeintNãoFiltra por tipo de resultado. 0 = todos.
situationTypeintNãoFiltra por situação. 0 = todas.
idstringNãoFiltra por dossieID específico.
namestringNãoFiltra por nome (Razão Social ou Nome) — busca parcial.
personTypeshortNão1 = PF, 2 = PJ. 0 = ambos.
statusIdshortNãoFiltra por status do dossiê. 0 = todos.
templateIDstringNãoFiltra por template específico.
versionstringNãoFiltra pela versão do template usada na geração.
takeintNãoQuantidade máxima de registros retornados. Padrão: 10.

Exemplo de Requisição

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
}

Exemplo de Resposta (200)

{
  "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"
    }
  ]
}

Campos da Resposta — histories[]

CampoTipoDescrição
guidstringdossieID — usar nos endpoints de detalhe, status, PDF e monitoramento.
namestringRazão Social ou Nome do documento processado.
datestringData de criação do dossiê.
userstringUsuário que disparou o processamento.
companystringEmpresa do usuário.
hasMonitorboolIndica se o dossiê tem monitoramento ativo.
iCanViewboolIndica se o usuário autenticado tem permissão de visualizar este dossiê.
resultTypeobject{ id, description } — tipo do resultado.
situationTypeobject{ id, description } — situação geral.
statusobject{ id, description } — status detalhado.
templateNamestringNome do template utilizado.
personTypestringDescrição textual: "Pessoa Física" ou "Pessoa Jurídica".
versionstringVersão do template utilizada.

2.3 GeneratePDF

POST /api/Dossier/GeneratePDF

Retorna o PDF de um dossiê concluído. Em caso de sucesso, a resposta é um arquivo application/pdf binário (não JSON).

Pré-requisito: o dossiê precisa estar em situação concluída (consulte GET /Status antes de chamar este endpoint). Dossiês ainda em processamento retornam erro.

Query Parameters

ParâmetroTipoObrigatórioDescrição
dossieIDstringSimIdentificador do dossiê.

Exemplo de Requisição

POST /api/Dossier/GeneratePDF?dossieID=DOS-f1e2d3c4-... HTTP/1.1
Host: {base-url-directdata}
Token: 00000000-0000-0000-0000-000000000000

Resposta de Sucesso

Em caso de sucesso, a resposta é o binário do PDF — Content-Type: application/pdf, com o nome do arquivo igual ao dossieID.

Resposta de Erro

Em caso de erro, a resposta segue o envelope padrão ResponseMetaDataDTO em JSON (com success: false e o detalhe em error).

3. Endpoints GET

3.1 Templates

GET /api/Dossier/Templates

Lista os templates disponíveis para a empresa autenticada, filtrados pelo tipo de pessoa.

Query Parameters

ParâmetroTipoObrigatórioDescrição
personTypeintSim1 = PF, 2 = PJ.

Exemplo de Requisição

GET /api/Dossier/Templates?personType=2 HTTP/1.1
Host: {base-url-directdata}
Token: 00000000-0000-0000-0000-000000000000

Exemplo de Resposta (200)

{
  "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
    }
  ]
}

Campos da Resposta — templates[]

CampoTipoDescrição
idstringIdentificador do template — usar como templateID em POST /Process.
namestringNome do template.
datestringData de criação do template.
personTypeint1 (PF) ou 2 (PJ).

3.2 Status

GET /api/Dossier/Status

Consulta o status atual de um dossiê. Use este endpoint como polling após POST /Process, até que situation indique conclusão.

Query Parameters

ParâmetroTipoObrigatórioDescrição
dossieIDstringSimIdentificador do dossiê.

Exemplo de Requisição

GET /api/Dossier/Status?dossieID=DOS-f1e2d3c4-... HTTP/1.1
Host: {base-url-directdata}
Token: 00000000-0000-0000-0000-000000000000

Exemplo de Resposta (200)

{
  "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.

3.3 Details

GET /api/Dossier/Details

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.

Query Parameters

ParâmetroTipoObrigatórioDescrição
dossieIDstringSimIdentificador do dossiê.

Exemplo de Requisição

GET /api/Dossier/Details?dossieID=DOS-f1e2d3c4-... HTTP/1.1
Host: {base-url-directdata}
Token: 00000000-0000-0000-0000-000000000000

Exemplo de Resposta (200)

{
  "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" }
  }
}

Campos da Resposta — listDetails[]

CampoTipoDescrição
nameAPIstringNome legível da API consultada.
moduleNamestringMódulo/categoria da API (ex: Cadastro, Fiscal).
apiIDstringIdentificador interno da API.
hasPdfboolIndica se a API original gerou um PDF anexável.
originstringOrigem da configuração (ex: Template).
statusPrioritystringStatus priorizado (texto descritivo).
alertList[]arrayLista de alertas/apontamentos detectados nesta API.

O bloco dossierStatus segue a mesma estrutura descrita em GET /Status.

3.4 Full-Details

GET /api/Dossier/Full-Details

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).

Query Parameters

ParâmetroTipoObrigatórioDescrição
dossieIDstringSimIdentificador do dossiê.

Exemplo de Requisição

GET /api/Dossier/Full-Details?dossieID=DOS-f1e2d3c4-... HTTP/1.1
Host: {base-url-directdata}
Token: 00000000-0000-0000-0000-000000000000

Exemplo de Resposta (200)

{
  "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
}
Sobre o campo 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á.

Campos da Resposta — summary

CampoTipoDescrição
namestringRazão Social ou Nome do documento.
documentstringCPF ou CNPJ formatado.
lastUpdatestringData da última atualização do dossiê.
hasMonitoredboolIndica se o dossiê tem monitoramento ativo.
statusstringTexto descritivo do status agregado.
frequencystringFrequência do monitoramento, quando aplicável.
templateNamestringNome do template utilizado.
personTypeint1 (PF) ou 2 (PJ).

Campos da Resposta — details[]

CampoTipoDescrição
nameAPI / apiID / moduleName / origin / statusPriority / alertListMesma semântica de GET /Details.
objectdynamicPayload completo retornado pela API consultada — varia por tipo de API.
resultstringResultado textual da execução desta API.
hasChangedboolIndica se houve alteração em relação à execução anterior (relevante quando há monitoramento).
lastUpdatedstringData da última atualização desta API no dossiê.
monitoringHistory[]arrayHistórico de eventos de monitoramento para esta API. Cada item contém api, apiID, monitoringID e events[] (cada evento: date, event, guid).
aiInsights[]arrayInsights gerados por IA para esta API, quando disponíveis.

Campos Restantes

CampoTipoDescrição
dossierStatusobjectStatus agregado do dossiê — mesma estrutura de GET /Status.
aiAnalysisdynamicAnálise consolidada de IA do dossiê inteiro, quando disponível. null caso contrário.

4. Endpoints PATCH

4.1 Monitoring-Config

PATCH /api/Dossier/Monitoring-Config

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[].

Query Parameters

ParâmetroTipoObrigatórioDescrição
dossieIDstringSimIdentificador do dossiê.

Body da Requisição

CampoTipoObrigatórioDescrição
monitoringboolSimtrue = liga o monitoramento, false = desliga. Padrão: true.

Exemplo de Requisição

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
}

Exemplo de Resposta (200)

{
  "success": true,
  "status": "OK",
  "elapsedTimeMs": 76,
  "dateTimeExecution": "08/05/2026 14:38:02",
  "error": null
}

5. Mapeamento de Erros por Endpoint

5.1 Estrutura do Erro

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."
  }
}
401 Unauthorized é retornado por todos os endpoints quando o header Token está ausente, mal formado ou não corresponde a uma empresa válida.
403 Forbidden é retornado quando o token é válido mas a empresa não tem o produto Dossiê habilitado em seu contrato (ou o limite mensal foi atingido).
404 Not Found é retornado quando o dossieID ou templateID informado não existe ou não pertence à empresa autenticada.

5.2 Tabela Consolidada

Mesma família de erros se aplica a todos os endpoints da controller.

CódigoCondiçãoEndpoints aplicáveis
400Body inválido / parâmetro obrigatório ausente / Guid mal formadoTodos
400templateID não encontrado ou inválidoProcess
400documents[] vazio ou tipo incompatível com o templateProcess
401Header Token ausente ou inválidoTodos
403Empresa sem o produto Dossiê habilitado, ou limite mensal atingidoTodos
404dossieID não pertence à empresa autenticadaStatus, Details, Full-Details, GeneratePDF, Monitoring-Config
404Dossiê ainda não concluído (PDF não disponível)GeneratePDF
500Exceção não tratada no servidorTodos