> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Relatório de Document AI: campos extraídos

> Referência do Document AI da Didit: endpoint de upload de documentos, JSON de campos extraídos por documento, status e entrada features[] da decisão.

## Visão geral

O Document AI aceita até 3 documentos por etapa (PDF ou imagem: PDF, JPG, JPEG, PNG, TIFF, WebP). Cada documento é classificado pelo `document_key` configurado, lido por um modelo de visão-linguagem com um esquema montado a partir das suas definições de campos e submetido a análise forense de PDF/EXIF. Para cada documento, ele armazena:

* Os **campos extraídos**: um mapa indexado pela `key` de campo que você configurou, com valores tipados conforme você os declarou (`text` → string, `number` → número, `date` → `YYYY-MM-DD`). Os campos que não puderam ser lidos ficam como `null`.
* **QR codes e códigos de barras detectados**: payloads decodificados e coordenadas em pixels para cada página renderizada. Um QR code que pode ser localizado, mas não decodificado, ainda é retornado com `parsed_payload: null`.
* O **status do documento**: `Approved`, `In Review`, `Declined` ou `Not Finished`.
* **Metadados do documento**: análise forense do arquivo, incluindo qualquer evidência de sobreposição/manipulação.
* **Resultados das verificações cruzadas**: o resultado da correspondência do nome com a identidade verificada e de quaisquer referências cruzadas de campos personalizados.

## Envio de documentos

Os documentos são enviados um de cada vez para o endpoint do Document AI. Em uma sessão hospedada ou em um fluxo com SDK, isso é feito automaticamente; o contrato é:

```text theme={null}
POST https://verification.didit.me/v3/document-ai/documents/
multipart/form-data — Session-Token: <session token>
```

| Campo | Obrigatório | Descrição |
| - | - | - |
| `document_key` | sim | O documento configurado que este arquivo atende |
| `document` | sim | O arquivo a ser enviado |
| `locale` | não | Localidade usada para definir o título/descrição exibidos na tela |

A resposta faz o fluxo avançar:

```json theme={null}
{
  "valid": true,
  "next_step": "DOCUMENT_AI",
  "document_ai_status": "In Progress",
  "uploaded_document_keys": ["proof_of_funds"],
  "required_document_keys": ["proof_of_funds", "payslip"]
}
```

A etapa é concluída (`next_step` passa de `DOCUMENT_AI`) quando todas as entradas de `required_document_keys` aparecem em `uploaded_document_keys` e nenhum documento permanece pendente.

## Onde aparece nas respostas da API

`GET /v3/session/{sessionId}/decision/` exibe o Document AI em dois lugares, tanto em sessões de Verificação de usuários (KYC) quanto de Verificação de empresas (KYB). O array `document_ai_documents[]` e o relatório em PDF são idênticos, independentemente do `session_kind`:

* **`features[]`**: uma entrada de resumo por nó do Document AI, usada para listar quais recursos foram executados:

  ```json theme={null}
  { "features": [ { "feature": "DOCUMENT_AI", "node_id": "feature_document_ai_1" } ] }
  ```

* **`document_ai_documents[]`**: o resultado completo, com um grupo por nó do Document AI. Cada grupo traz o `status` combinado do nó, a lista de `items` enviados e quaisquer `warnings`. Cada documento enviado é um item com os campos que você configurou (em `extracted_data`), os códigos detectados (em `detected_codes`), seu próprio `status`, as definições de campos, os metadados forenses do documento (`document_metadata`) e o `cross_check_result`.

Os status de cada documento de um nó se combinam no status do nó segundo a precedência **Declined > In Review > Approved**.

## Exemplo de decisão

Para um documento de **Comprovante de fundos** configurado com `account_holder` (texto), `balance` (número), `currency` (texto) e `statement_date` (data):

```json theme={null}
{
  "document_ai_documents": [
    {
      "node_id": "feature_document_ai_1",
      "status": "Approved",
      "items": [
        {
          "uuid": "5c1f0a2e-9b3d-4c7a-8f21-0a4e8e7d6c12",
          "document_key": "proof_of_funds",
          "status": "Approved",
          "original_filename": "statement.pdf",
          "extracted_data": {
            "account_holder": "Sophia Martinez",
            "balance": 18450.75,
            "currency": "EUR",
            "statement_date": "2026-05-31"
          },
          "detected_codes": [
            {
              "type": "QR_CODE",
              "page_number": 2,
              "position": [[124, 86], [306, 86], [306, 268], [124, 268]],
              "x": 124,
              "y": 86,
              "width": 182,
              "height": 182,
              "page_width": 1190,
              "page_height": 1684,
              "raw_payload": "SU5WLTIwMjYtMDA0Mg==",
              "parsed_payload": "INV-2026-0042"
            }
          ],
          "fields": [
            { "key": "account_holder", "name": "Account holder", "type": "text", "required": true },
            { "key": "balance", "name": "Balance", "type": "number", "required": false },
            { "key": "currency", "name": "Currency", "type": "text", "required": false },
            { "key": "statement_date", "name": "Statement date", "type": "date", "required": false }
          ],
          "document_metadata": { "is_tampered": false },
          "cross_check_result": null,
          "created_at": "2026-05-31T10:12:00Z"
        }
      ],
      "warnings": []
    }
  ]
}
```

`page_number` começa em 1. `position` contém o polígono detectado, enquanto `x`, `y`, `width` e `height` fornecem sua caixa delimitadora. Todas as coordenadas usam o espaço em pixels da página renderizada, cujas dimensões são `page_width` e `page_height`. `detected_codes` é um array vazio quando nenhum código compatível é encontrado. Trate um item com `parsed_payload: null` apenas como indicação de presença e localização, não como um valor decodificado.

Como cada campo pode ser referenciado como `document_ai.<field_key>`, você pode controlar ramificações e [regras de status personalizadas](https://docs.didit.me/pt-br/core-technology/document-ai/warnings-document-ai.md) diretamente a partir dos valores de `extracted_data`, inclusive com referências cruzadas a outras etapas, como `kyc.full_name` ou respostas de questionários.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.