> ## 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 assinatura eletrônica: campo signatures[]

> Leia signatures[] na decisão da sessão e nos webhooks da Didit, baixe os PDFs assinados e o PDF de evidências e revalide uma assinatura.

Cada etapa de [Assinatura eletrônica](https://docs.didit.me/pt-br/core-technology/electronic-signature/overview.md) gera um resultado por signatário. Você o encontra como um item de `signatures[]` em:

* [`GET /v3/session/{sessionId}/decision/`](https://docs.didit.me/pt-br/sessions-api/retrieve-session), para sessões de Verificação de usuários (KYC) e Verificação de empresas (KYB).
* A `decision` dos [webhooks de sessão](https://docs.didit.me/pt-br/integration/webhooks.md) V3, enviada quando a sessão está `Approved`, `Declined`, `In Review` ou `Abandoned`.
* A aba **Assinatura** da sessão no console e a seção de assinatura do [relatório em PDF](https://docs.didit.me/pt-br/sessions-api/generate-pdf.md).

`signatures` só aparece na decisão quando o fluxo de verificação (workflow) tem uma etapa de Assinatura eletrônica. É um array vazio até que um signatário chegue à etapa. Uma etapa de KYC tem um item; uma etapa de KYB tem um item por signatário.

## Exemplo

```json theme={null}
{
  "signatures": [
    {
      "id": "0e6c2a8e-6c2f-4b8e-9a51-3f2f6a7d9b10",
      "node_id": "feature_signature",
      "status": "signed",
      "verdict": "Approved",
      "level": "aes",
      "format": "pades",
      "profile": "PAdES-B-LT",
      "signer": {
        "name": "Jane Doe",
        "capacity": "self",
        "company": null,
        "role": null,
        "roles": [],
        "identity_session_id": "11111111-2222-3333-4444-555555555555"
      },
      "identity_used": {
        "session_id": "11111111-2222-3333-4444-555555555555",
        "kyc_id": "6f1e8f6c-1d2b-4c3a-9e8f-7a6b5c4d3e2f",
        "verified": true,
        "expected_name": "Jane Doe"
      },
      "certificate": {
        "issuer": "<certificate issuer>",
        "issued_to": "<certificate subject>",
        "serial": "5A3F9C21",
        "valid_from": "2026-01-01T00:00:00+00:00",
        "valid_until": "2028-01-01T00:00:00+00:00"
      },
      "confirmation": {
        "channel": "email",
        "destination": "j***@example.com",
        "confirmed_at": "2026-11-03T10:42:18.512Z",
        "attempts": 1
      },
      "timestamp": {
        "time": "2026-11-03T10:42:21+00:00",
        "qualified": false,
        "valid": true
      },
      "documents": [
        {
          "id": "9b0a7f44-2c1d-4e5f-8a9b-0c1d2e3f4a5b",
          "uuid": "9b0a7f44-2c1d-4e5f-8a9b-0c1d2e3f4a5b",
          "title": "Account agreement",
          "file_name": "agreement.pdf",
          "pages": 4,
          "size_bytes": 182344,
          "sha256_original": "3b8e5f0c2a9d4e7f1b6c0a5d9e8f7a6b5c4d3e2f1a0b9c8d7e6f5a4b3c2d1e0f",
          "sha256_signed": "a1f2e3d4c5b6a7980f1e2d3c4b5a69788f7e6d5c4b3a29180f1e2d3c4b5a6978",
          "status": "signed",
          "opened_at": "2026-11-03T10:40:02.118Z",
          "read_at": "2026-11-03T10:41:10.044Z",
          "read_to_end": true,
          "consented_at": "2026-11-03T10:41:12.730Z",
          "consent": true,
          "signed_file": "/v3/session/11111111-2222-3333-4444-555555555555/signatures/feature_signature/documents/9b0a7f44-2c1d-4e5f-8a9b-0c1d2e3f4a5b/file/",
          "mode": "fields",
          "source_format": "pdf",
          "conversion": null,
          "fields": [
            {
              "key": "full_name",
              "type": "full_name",
              "role": "verified_person",
              "label": "Full name",
              "page": 1,
              "x": 0.34,
              "y": 0.2326,
              "width": 0.57,
              "height": 0.0325,
              "required": true,
              "value": "Jane Doe",
              "display_value": "Jane Doe",
              "value_source": "identity",
              "filled_at": "2026-11-03T10:40:02.118Z",
              "value_unavailable_reason": null
            },
            {
              "key": "occupation",
              "type": "text",
              "role": "verified_person",
              "label": "Occupation",
              "page": 1,
              "x": 0.34,
              "y": 0.4618,
              "width": 0.57,
              "height": 0.0325,
              "required": true,
              "value": "Architect",
              "display_value": "Architect",
              "value_source": "signer",
              "filled_at": "2026-11-03T10:40:41.502Z",
              "value_unavailable_reason": null
            },
            {
              "key": "signature",
              "type": "signature",
              "role": "verified_person",
              "label": "Signature",
              "page": 4,
              "x": 0.09,
              "y": 0.5303,
              "width": 0.36,
              "height": 0.0849,
              "required": true,
              "value": true,
              "display_value": "Signed",
              "value_source": "signer",
              "filled_at": "2026-11-03T10:41:05.200Z",
              "image_url": "/v3/session/11111111-2222-3333-4444-555555555555/signatures/feature_signature/fields/c4d5e6f7-0a1b-4c2d-8e3f-4a5b6c7d8e9f/image/",
              "value_unavailable_reason": null
            }
          ]
        }
      ],
      "adopted_signature": {
        "method": "drawn",
        "font": null,
        "adopted_at": "2026-11-03T10:41:02.871Z"
      },
      "electronic_signature_consent_at": "2026-11-03T10:41:40.016Z",
      "evidence_file": "/v3/session/11111111-2222-3333-4444-555555555555/signatures/feature_signature/evidence/?signature_id=0e6c2a8e-6c2f-4b8e-9a51-3f2f6a7d9b10",
      "warnings": [],
      "validation": {
        "valid": true,
        "checked_at": "2026-11-03T10:42:24.903Z",
        "documents": [
          {
            "id": "9b0a7f44-2c1d-4e5f-8a9b-0c1d2e3f4a5b",
            "checked_at": "2026-11-03T10:42:24.903Z",
            "valid": true,
            "integrity": true,
            "trusted": true,
            "revoked": false,
            "trusted_list": { "status": "not_applicable", "reason": "aes_not_qualified" },
            "certificate": {
              "issuer": "<certificate issuer>",
              "issued_to": "<certificate subject>",
              "serial": "5A3F9C21",
              "valid_from": "2026-01-01T00:00:00+00:00",
              "valid_until": "2028-01-01T00:00:00+00:00"
            },
            "timestamp": { "time": "2026-11-03T10:42:21+00:00", "qualified": false, "valid": true }
          }
        ]
      },
      "declined_at": null,
      "declined_action": "REVIEW",
      "signed_at": "2026-11-03T10:42:24.903Z",
      "expires_at": "2026-11-10T10:30:00.000Z",
      "email_sent_at": "2026-11-03T10:42:30.011Z",
      "email_unavailable_reason": null,
      "ip_address": "203.0.113.10",
      "place": null,
      "place_unavailable_reason": "not_collected"
    }
  ]
}
```

## O objeto de assinatura

| Campo | Tipo | Descrição |
| - | - | - |
| `id` | string (UUID) | A assinatura do signatário. Passe-o como `signature_id` para baixar as evidências dele ou validar a assinatura. |
| `node_id` | string | A etapa do fluxo de verificação (workflow) que a gerou. |
| `status` | string | Em que ponto da etapa o signatário está: `intro`, `review`, `code`, `signing`, `signed` ou `declined`. Somente `signed` significa que os documentos estão assinados. |
| `verdict` | string | O resultado da etapa: `Not Finished`, `Approved`, `In Review` ou `Declined`. Uma assinatura recusada ou com falha recebe o veredito da sua [regra](https://docs.didit.me/pt-br/core-technology/electronic-signature/warnings-electronic-signature.md), e regras de status personalizadas podem alterá-lo. |
| `level` | string | `simple` (padrão) ou `aes`. `qes` é um complemento que ainda não está disponível. |
| `format` | string | `pdf` para uma assinatura Simples, `pades` para uma Avançada (AES). |
| `profile` | string \| null | `PAdES-B-LT` depois que uma assinatura Avançada (AES) é assinada; caso contrário, `null`. |
| `signer` | object | Quem assinou. Consulte [Signatário](#signatário). |
| `identity_used` | object | A identidade verificada na qual a assinatura se baseia. Consulte [Signatário](#signatário). Vazio para uma assinatura Simples sem identidade verificada. |
| `certificate` | object \| null | O certificado com o qual os documentos foram assinados: `issuer`, `issued_to`, `serial`, `valid_from` e `valid_until`. `null` até a assinatura e sempre `null` para uma assinatura Simples. |
| `confirmation` | object | O código de uso único: `channel` (`email` ou `sms`), `destination` (o contato mascarado para o qual foi enviado), `confirmed_at` e `attempts` (códigos inseridos, incluindo o correto). Uma assinatura Simples não tem código, então `channel` e `destination` são `null`. |
| `timestamp` | object \| null | O carimbo de tempo RFC 3161 na assinatura, emitido pela Didit: `time`, `qualified` (sempre `false` para AES) e `valid`. `null` até a assinatura e sempre `null` para uma assinatura Simples. |
| `documents` | array | Um item por documento. Consulte [Documentos](#documentos). |
| `adopted_signature` | object \| null | A assinatura e as iniciais que o signatário adotou para os campos de assinatura e de iniciais: `method` (`typed` ou `drawn`), `font` (o estilo de caligrafia de uma assinatura digitada, ou `null` quando desenhada) e `adopted_at`. `null` até que o signatário adote uma. |
| `electronic_signature_consent_at` | string \| null | Quando o signatário concordou, na tela de revisão, em assinar os documentos eletronicamente. Preenchido quando algum documento tem campos. |
| `evidence_file` | string \| null | Caminho para o [PDF de evidências](#o-pdf-de-evidências) deste signatário, após a assinatura. |
| `warnings` | array | Itens `{ "code", "node_id" }` para cada [aviso](https://docs.didit.me/pt-br/core-technology/electronic-signature/warnings-electronic-signature.md) gerado. |
| `validation` | object \| null | A última verificação criptográfica dos documentos assinados. Consulte [Validar uma assinatura novamente](#validar-uma-assinatura-novamente). |
| `declined_at` | string \| null | Quando o signatário recusou. |
| `declined_action` | string | O `signature_declined_action` da etapa: o efeito de uma recusa sobre o veredito. |
| `signed_at` | string \| null | Quando os documentos foram assinados. |
| `expires_at` | string | Quando o link de assinatura deixa de funcionar. |
| `email_sent_at` | string \| null | Quando a Didit enviou ao signatário uma cópia assinada por e-mail. |
| `email_unavailable_reason` | string \| null | Por que nenhuma cópia foi enviada por e-mail, quando você solicitou uma. |
| `ip_address` | string \| null | O endereço IP do signatário quando ele solicitou o código. |
| `place` | string \| null | Não coletado. Sempre `null`, com `place_unavailable_reason: "not_collected"`. |

Nunca considere que um signatário assinou até que `status` seja `signed`. Em uma assinatura Avançada (AES), certificado, carimbo de tempo ou `signed_file` com valor `null` significa que ainda não há assinatura. Uma assinatura Simples assinada tem um `signed_file`, mas sempre tem certificado e carimbo de tempo `null`.

### Signatário

| Campo | Descrição |
| - | - |
| `signer.name` | O nome verificado do signatário, obtido da Verificação de identidade aprovada dele. No nível Simples, é o nome da sessão verificada quando houver uma; caso contrário, é o nome que o signatário digitou, que não é verificado. |
| `signer.capacity` | `self` quando uma pessoa assina por si mesma (KYC), `company` quando uma pessoa-chave assina por uma empresa (KYB). |
| `signer.company` | O nome da empresa, para KYB. |
| `signer.role` | O cargo da pessoa-chave, conforme declarada, para KYB. |
| `signer.roles` | As funções estruturadas da pessoa-chave, como `representative` ou `authorized_signatory`, que a tornaram signatária. São as funções declaradas para a empresa, não uma confirmação do registro de empresas. |
| `signer.identity_session_id` | A sessão de KYC que verificou o signatário. Para KYB, a própria sessão de KYC da pessoa-chave. Ausente para uma assinatura Simples sem identidade verificada. |
| `identity_used.session_id` | Igual a `signer.identity_session_id`. `identity_used` fica vazio para uma assinatura Simples sem identidade verificada, portanto nenhum de seus campos está presente. |
| `identity_used.kyc_id` | A Verificação de identidade da qual o nome veio. |
| `identity_used.verified` | `true` quando essa Verificação de identidade foi aprovada. |
| `identity_used.expected_name` | O nome com o qual o signatário precisava corresponder. Para KYB, o nome declarado para a pessoa-chave. |

### Documentos

| Campo | Descrição |
| - | - |
| `id`, `uuid` | O documento. Use-o para baixar o arquivo assinado. |
| `title`, `file_name` | Conforme carregado ou enviado. |
| `pages`, `size_bytes` | Do documento que o signatário assinou. Para Word, do PDF convertido. |
| `sha256_original` | SHA-256 do documento como foi exibido ao signatário. |
| `sha256_signed` | SHA-256 do PDF assinado, após a assinatura. |
| `status` | `signed`; `declined`; `not_signed` (aberto, não assinado); ou `not_reached` (nunca aberto). |
| `opened_at` | Quando o signatário o abriu pela primeira vez. |
| `read_at`, `read_to_end` | Quando o signatário chegou ao fim de um documento sem campos, quando você exige a leitura até o fim. Um documento com campos não precisa disso. |
| `consented_at`, `consent` | Quando o signatário concordou com um documento sem campos, quando você exige consentimento por documento, ou concluiu os campos de um documento com campos. |
| `signed_file` | Caminho para o PDF assinado, após a assinatura. |
| `mode` | `fields` para um documento com campos, `read_and_agree` para um documento sem campos. |
| `source_format` | `pdf`, ou `docx` para um documento Word que a Didit converteu. |
| `conversion` | `null` para um PDF. Para um documento Word, `{ "from": "docx", "file_name", "sha256", "size_bytes", "converter" }`: o seu arquivo original, o SHA-256 e o tamanho dele, e a versão do conversor. |
| `fields` | Os [campos](#campos) do documento, com os respectivos valores. Vazio para um documento sem campos. |

### Campos

Cada item de `documents[].fields[]` é um campo do documento, com o valor dele na cópia deste signatário:

| Campo | Descrição |
| - | - |
| `key` | A [chave](https://docs.didit.me/pt-br/core-technology/electronic-signature/overview.md#campos-no-documento) do campo, a mesma que você usa em `sign.field_values`. |
| `type`, `role`, `label`, `required` | Conforme posicionados no documento. |
| `page`, `x`, `y`, `width`, `height` | Onde o campo está, como frações da página tal como exibida. |
| `value` | Uma string para campos `text`, `email`, `full_name`, `date_signed` e `data`, um booleano para uma caixa de seleção e `true` para uma assinatura ou rubrica aplicada. `null` quando o campo está vazio. |
| `display_value` | O valor tal como é carimbado na página: datas no `date_format` do campo, `Yes` ou `No` para uma caixa de seleção e `Signed` para uma assinatura ou rubrica. |
| `value_source` | De onde veio o valor: `signer` (digitado, marcado ou aplicado pelo signatário), `identity` (a identidade verificada), `contact` (o e-mail ou telefone verificado), `company` (a empresa verificada), `session` (o `vendor_data` da sessão), `metadata` (o `metadata` da sessão), `api` (o seu `sign.field_values`) ou `signing_time` (a data da assinatura). |
| `filled_at` | Quando o valor foi definido. |
| `image_url` | Para uma assinatura ou rubrica, o caminho da imagem aplicada, um PNG. Consulte [Baixar uma imagem de assinatura](https://docs.didit.me/pt-br/sessions-api/electronic-signature/download-field-image.md). |
| `value_unavailable_reason` | Por que um campo preenchido pela Didit não tem valor: `not_verified` (a identidade ou o contato não foi verificado), `not_applicable` (um campo de empresa na assinatura de uma pessoa em nome próprio), `not_provided` (a origem não tem valor) ou `set_at_confirmation` (uma data de assinatura antes de o signatário confirmar). Caso contrário, `null`. |

## Baixar os documentos assinados

Use os caminhos em `signed_file` e `evidence_file` com a sua chave de API. Cada rota retorna o próprio PDF.

```bash theme={null}
# Signed PDF of one document
curl -L 'https://verification.didit.me/v3/session/{session_id}/signatures/{node_id}/documents/{document_id}/file/' \
  -H 'x-api-key: YOUR_API_KEY' \
  -o agreement-signed.pdf

# Evidence PDF of one signer
curl -L 'https://verification.didit.me/v3/session/{session_id}/signatures/{node_id}/evidence/?signature_id={signature_id}' \
  -H 'x-api-key: YOUR_API_KEY' \
  -o signature-evidence.pdf
```

| Rota | Referência |
| - | - |
| `GET .../documents/{document_id}/file/` | [Baixar um documento assinado](https://docs.didit.me/pt-br/sessions-api/electronic-signature/download-signed-document.md) |
| `GET .../evidence/` | [Baixar as evidências da assinatura](https://docs.didit.me/pt-br/sessions-api/electronic-signature/download-evidence.md) |
| `GET .../fields/{field_id}/image/` | [Baixar uma imagem de assinatura](https://docs.didit.me/pt-br/sessions-api/electronic-signature/download-field-image.md) |
| `POST .../validate/` | [Validar assinaturas](https://docs.didit.me/pt-br/sessions-api/electronic-signature/validate-signatures.md) |

Antes de responder, a Didit compara o arquivo armazenado com o SHA-256 registrado. Se forem diferentes, as rotas do PDF assinado e das evidências retornam `409` e a rota da imagem retorna `400`, cada uma com `signature_document_changed`. Sempre informe `signature_id` na rota de evidências quando uma etapa de KYB tiver vários signatários.

## O PDF assinado

O PDF assinado contém, nesta ordem:

1. As páginas do documento que foi mostrado ao signatário, com cada valor de campo carimbado onde você o posicionou.
2. A página de evidências, a menos que você tenha desativado `signature_evidence_page`.
3. Somente no PDF Avançado (AES), a assinatura PAdES, com o carimbo de tempo RFC 3161 emitido pela Didit e os dados de revogação necessários para validá-la no futuro. Um PDF Simples termina após a página de evidências e não tem assinatura digital, selo nem carimbo de tempo.

Em um PDF Avançado (AES), a assinatura cobre todos os bytes anteriores a ela, incluindo os valores dos campos e a página de evidências. Qualquer alteração no arquivo depois disso a invalida, e qualquer validador compatível com PAdES mostra isso. Os detalhes da assinatura identificam o signatário e fazem referência à sessão de identidade verificada e à confirmação por código dele.

Os valores dos campos passam a fazer parte do conteúdo da página, e não de campos de formulário, por isso não podem ser editados depois e todo visualizador de PDF os exibe. Uma caixa de seleção marcada mostra um sinal de visto, e uma desmarcada fica como o documento a desenhou. Uma caixa de assinatura com mais de 24 pontos de altura também recebe uma pequena legenda abaixo da assinatura: `Signed with Didit ·` seguido dos 8 primeiros caracteres do `id` da assinatura.

A Didit adiciona os valores dos campos, a página de evidências e a assinatura depois dos bytes do documento que foi mostrado ao signatário. Esse documento é um prefixo exato do arquivo assinado, por isso `sha256_original` ainda pode ser verificado em relação ao PDF assinado.

## O PDF de evidências

O PDF de evidências registra, para um signatário:

* O nível e o formato.
* O nome do signatário, a qualidade em que ele assina e, para KYB, a empresa.
* A sessão de identidade verificada (somente Avançada (AES)).
* A confirmação: canal, destino mascarado e horário (somente Avançada (AES)).
* O endereço IP do signatário.
* Cada documento: título, número de páginas e SHA-256 do original. Para um documento Word, o nome e o SHA-256 do arquivo Word, a versão do conversor e o SHA-256 do PDF.
* A assinatura adotada: digitada (com o estilo de caligrafia) ou desenhada, quando foi adotada, e as imagens da assinatura e da rubrica.
* Cada campo, por documento: o rótulo, a página e o tipo, o valor (a imagem, no caso de uma assinatura ou rubrica), de onde veio o valor (por exemplo, **Typed by the signer**, **Verified ID** ou **Your API**), quando foi preenchido (UTC) e, para um valor digitado pelo signatário, o endereço IP dele naquele momento.
* O consentimento final: o texto com o qual o signatário concordou na tela de revisão, e quando.
* O SHA-256 de cada arquivo assinado e, para Avançada (AES), o certificado (emitido para, emissor, número de série e validade) e o carimbo de tempo.

A página anexada a cada PDF assinado tem o mesmo conteúdo, sem a seção do certificado, porque é adicionada antes de a assinatura ser aplicada.

## Validar uma assinatura novamente

`POST /v3/session/{session_id}/signatures/{node_id}/validate/` relê cada PDF assinado da etapa e verifica o SHA-256 de cada um. Para uma assinatura avançada (AES), também valida a assinatura PAdES, o certificado, os dados de revogação e o carimbo de tempo. Uma assinatura simples não tem assinatura digital, então a verificação se limita à integridade do arquivo. O resultado é salvo em `validation` e a resposta traz o `signatures[]` atualizado. Envie `signature_id` para verificar um único signatário. É necessária a permissão `write:sessions` e, no console, a ação corresponde ao botão **Validar novamente**. Se um PDF assinado armazenado não corresponder mais ao seu `sha256_signed`, a resposta é `400` com `signature_document_changed`.

Enquanto os documentos não forem assinados, `validation` é `null`. Se a Didit não conseguir confirmar o resultado da assinatura, `validation` é `{ "valid": null, "reason": "signature_provider_outcome_unknown", "checked_at" }` e `status` permanece `signing` até que isso seja resolvido. Nesse caso, trate a assinatura como não assinada.

| Campo de `validation.documents[]` | Descrição |
| - | - |
| `valid` | `true` quando a assinatura e o carimbo de tempo são válidos e confiáveis. Para uma assinatura simples, `true` quando o arquivo não foi alterado. |
| `integrity` | `true` quando o documento não foi alterado desde a assinatura. |
| `trusted` | `true` quando a cadeia do certificado de assinatura chega a uma raiz confiável. `null` para uma assinatura simples. |
| `revoked` | `true` quando o certificado de assinatura foi revogado. `null` para uma assinatura simples. |
| `trusted_list` | `{ "status": "not_applicable", "reason": "aes_not_qualified" }` para AES. A verificação na EU Trusted List se aplica a assinaturas qualificadas. Uma assinatura simples retorna `{ "status": "not_applicable", "reason": "simple_not_sealed" }`. |
| `certificate`, `timestamp` | Conforme constam no arquivo. |

## No relatório em PDF

O [relatório em PDF](https://docs.didit.me/pt-br/sessions-api/generate-pdf.md) inclui uma seção de assinatura com o signatário, a confirmação, o certificado, o carimbo de tempo e os documentos com seus hashes. Quando os documentos têm campos, vem em seguida uma página **E-signature · fields**, com uma tabela por documento: o valor de cada campo, as imagens da assinatura e da rubrica, os horários e as origens. A seção de assinatura aparece depois de Verificação bancária em um relatório de KYC e depois de Documentos em um relatório de KYB. Passe `pages=signature` para imprimir apenas essa seção.

## Conteúdo relacionado

* [Visão geral da assinatura eletrônica](https://docs.didit.me/pt-br/core-technology/electronic-signature/overview.md)
* [Avisos da assinatura eletrônica](https://docs.didit.me/pt-br/core-technology/electronic-signature/warnings-electronic-signature.md)
* [Modelos de dados: assinatura eletrônica](https://docs.didit.me/pt-br/reference/data-models.md#assinatura-eletrônica)
* [Webhooks](https://docs.didit.me/pt-br/integration/webhooks.md)


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