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

# Informe de signatura electrònica: referència signatures[]

> Consulta signatures[] a les decisions i webhooks de Didit, descarrega els PDF signats i el d'evidències, i torna a validar signatures.

Cada pas de [Signatura electrònica](https://docs.didit.me/ca/core-technology/electronic-signature/overview.md) produeix un resultat per signant. El trobaràs com un element de `signatures[]` a:

* [`GET /v3/session/{sessionId}/decision/`](https://docs.didit.me/ca/sessions-api/retrieve-session), per a sessions de Verificació d'usuaris (KYC) i Verificació d'empreses (KYB).
* La `decision` dels [webhooks de sessió](https://docs.didit.me/ca/integration/webhooks.md) V3, enviats quan la sessió està `Approved`, `Declined`, `In Review` o `Abandoned`.
* La pestanya **Signatura** de la sessió a la consola, i la secció de signatura de l'[informe en PDF](https://docs.didit.me/ca/sessions-api/generate-pdf.md).

`signatures` només és a la decisió quan el flux de treball té un pas de Signatura electrònica. És un array buit fins que un signant arriba al pas. Un pas de KYC té un element; un pas de KYB té un element per signant.

## Exemple

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

## L'objecte de signatura

| Camp | Tipus | Descripció |
| - | - | - |
| `id` | string (UUID) | La signatura del signant. Passa-la com a `signature_id` per descarregar les seves proves o validar la seva signatura. |
| `node_id` | string | El pas del flux de treball que l'ha generat. |
| `status` | string | En quin punt del pas es troba el signant: `intro`, `review`, `code`, `signing`, `signed` o `declined`. Només `signed` significa que els documents estan signats. |
| `verdict` | string | El resultat del pas: `Not Finished`, `Approved`, `In Review` o `Declined`. Una signatura rebutjada o fallida pren el veredicte de la seva [regla](https://docs.didit.me/ca/core-technology/electronic-signature/warnings-electronic-signature.md), i les regles d'estat personalitzades el poden canviar. |
| `level` | string | `simple` (per defecte) o `aes`. `qes` és un complement que encara no està disponible. |
| `format` | string | `pdf` per a una signatura Simple, `pades` per a Avançada (AES). |
| `profile` | string \| null | `PAdES-B-LT` un cop s'ha signat una signatura Avançada (AES); en cas contrari, `null`. |
| `signer` | object | Qui ha signat. Consulta [Signant](#signant). |
| `identity_used` | object | La identitat verificada en què es basa la signatura. Consulta [Signant](#signant). Buit per a una signatura Simple sense identitat verificada. |
| `certificate` | object \| null | El certificat amb què s'han signat els documents: `issuer`, `issued_to`, `serial`, `valid_from` i `valid_until`. `null` fins que se signa, i sempre `null` per a una signatura Simple. |
| `confirmation` | object | El codi d'un sol ús: `channel` (`email` o `sms`), `destination` (el contacte emmascarat al qual s'ha enviat), `confirmed_at` i `attempts` (codis introduïts, inclòs el correcte). Una signatura Simple no té codi, de manera que `channel` i `destination` són `null`. |
| `timestamp` | object \| null | El segell de temps RFC 3161 a la signatura, emès per Didit: `time`, `qualified` (sempre `false` per a AES) i `valid`. `null` fins que se signa, i sempre `null` per a una signatura Simple. |
| `documents` | array | Un element per document. Consulta [Documents](#documents). |
| `adopted_signature` | object \| null | La signatura i les inicials que el signant ha adoptat per als camps de signatura i d'inicials: `method` (`typed` o `drawn`), `font` (l'estil manuscrit d'una signatura escrita o `null` si s'ha dibuixat) i `adopted_at`. `null` fins que el signant n'adopta una. |
| `electronic_signature_consent_at` | string \| null | Quan el signant ha acceptat, a la pantalla de revisió, signar els documents electrònicament. S'estableix quan algun document conté camps. |
| `evidence_file` | string \| null | Ruta al [PDF d'evidències](#el-pdf-d’evidència) d'aquest signant, un cop signat. |
| `warnings` | array | Elements `{ "code", "node_id" }` per a cada [advertència](https://docs.didit.me/ca/core-technology/electronic-signature/warnings-electronic-signature.md) generada. |
| `validation` | object \| null | La darrera comprovació criptogràfica dels documents signats. Consulta [Tornar a validar una signatura](#torna-a-validar-una-signatura). |
| `declined_at` | string \| null | Quan el signant ha rebutjat. |
| `declined_action` | string | El paràmetre `signature_declined_action` del pas: quin efecte té un rebuig en el veredicte. |
| `signed_at` | string \| null | Quan s'han signat els documents. |
| `expires_at` | string | Quan deixa de funcionar l'enllaç de signatura. |
| `email_sent_at` | string \| null | Quan Didit ha enviat una còpia signada per correu electrònic al signant. |
| `email_unavailable_reason` | string \| null | Per què no s'ha enviat cap còpia per correu electrònic, si n'havies sol·licitat una. |
| `ip_address` | string \| null | L'adreça IP del signant quan ha sol·licitat el codi. |
| `place` | string \| null | No es recopila. Sempre `null`, amb `place_unavailable_reason: "not_collected"`. |

No consideris mai que un signant ha signat fins que `status` sigui `signed`. En una signatura Avançada (AES), un certificat, un segell de temps o un `signed_file` amb valor `null` indiquen que encara no hi ha signatura. Una signatura Simple signada té un `signed_file`, però el certificat i el segell de temps sempre són `null`.

### Signant

| Camp | Descripció |
| - | - |
| `signer.name` | El nom verificat del signant, procedent de la seva verificació d'identitat aprovada. Al nivell Simple, és el nom de la sessió verificada si n'hi ha una; en cas contrari, el nom que ha escrit el signant, que no està verificat. |
| `signer.capacity` | `self` quan una persona signa per si mateixa (KYC), `company` quan una persona clau signa en nom d'una empresa (KYB). |
| `signer.company` | El nom de l'empresa, per a KYB. |
| `signer.role` | El càrrec de la persona clau, tal com s'ha declarat, per a KYB. |
| `signer.roles` | Els rols estructurats de la persona clau, com ara `representative` o `authorized_signatory`, que l'han habilitat com a signant. Aquests són els rols declarats per a l'empresa, no una confirmació del registre mercantil. |
| `signer.identity_session_id` | La sessió de KYC que ha verificat el signant. Per a KYB, la sessió de KYC pròpia de la persona clau. Absent per a una signatura Simple sense identitat verificada. |
| `identity_used.session_id` | El mateix que `signer.identity_session_id`. `identity_used` està buit per a una signatura Simple sense identitat verificada, de manera que cap dels seus camps està present. |
| `identity_used.kyc_id` | La verificació d'identitat d'on prové el nom. |
| `identity_used.verified` | `true` quan aquesta verificació d'identitat s'ha aprovat. |
| `identity_used.expected_name` | El nom amb el qual havia de coincidir el signant. Per a KYB, el nom declarat per a la persona clau. |

### Documents

| Camp | Descripció |
| - | - |
| `id`, `uuid` | El document. Fes-lo servir per descarregar el fitxer signat. |
| `title`, `file_name` | Tal com s'ha pujat o enviat. |
| `pages`, `size_bytes` | Del document que el signant ha signat. Per a Word, del PDF convertit. |
| `sha256_original` | SHA-256 del document tal com s'ha mostrat al signant. |
| `sha256_signed` | SHA-256 del PDF signat, un cop signat. |
| `status` | `signed`; `declined`; `not_signed` (obert, no signat); o `not_reached` (no s'ha obert mai). |
| `opened_at` | Quan el signant l'ha obert per primera vegada. |
| `read_at`, `read_to_end` | Quan el signant ha arribat al final d'un document sense camps, si exigeixes llegir fins al final. Un document amb camps no ho necessita. |
| `consented_at`, `consent` | Quan el signant ha acceptat un document sense camps, si exigeixes consentiment per document, o ha completat els camps d'un document amb camps. |
| `signed_file` | Ruta al PDF signat, un cop signat. |
| `mode` | `fields` per a un document amb camps, `read_and_agree` per a un document sense camps. |
| `source_format` | `pdf`, o `docx` per a un document de Word que Didit hagi convertit. |
| `conversion` | `null` per a un PDF. Per a un document de Word, `{ "from": "docx", "file_name", "sha256", "size_bytes", "converter" }`: el teu fitxer original, el seu SHA-256 i la seva mida, i la versió del convertidor. |
| `fields` | Els [camps](#camps) del document, amb els seus valors. Buit per a un document sense camps. |

### Camps

Cada element de `documents[].fields[]` és un camp del document, amb el seu valor a la còpia d'aquest signant:

| Camp | Descripció |
| - | - |
| `key` | La [clau](https://docs.didit.me/ca/core-technology/electronic-signature/overview.md#camps-al-document) del camp, la mateixa que utilitzes a `sign.field_values`. |
| `type`, `role`, `label`, `required` | Tal com s'ha col·locat al document. |
| `page`, `x`, `y`, `width`, `height` | On s'ubica el camp, com a fraccions de la pàgina tal com es mostra. |
| `value` | Una cadena per als camps `text`, `email`, `full_name`, `date_signed` i `data`, un booleà per a una casella de selecció i `true` per a una signatura o inicials aplicades. `null` quan el camp està buit. |
| `display_value` | El valor tal com s'estampa a la pàgina: dates en el `date_format` del camp, `Yes` o `No` per a una casella de selecció i `Signed` per a una signatura o inicials. |
| `value_source` | D'on prové el valor: `signer` (escrit, marcat o aplicat pel signant), `identity` (la identitat verificada), `contact` (el correu electrònic o telèfon verificat), `company` (l'empresa verificada), `session` (el `vendor_data` de la sessió), `metadata` (les `metadata` de la sessió), `api` (el teu `sign.field_values`) o `signing_time` (la data de signatura). |
| `filled_at` | Quan es va establir el valor. |
| `image_url` | Per a una signatura o inicials, la ruta de la imatge aplicada, un PNG. Consulta [Baixar una imatge de signatura](https://docs.didit.me/ca/sessions-api/electronic-signature/download-field-image.md). |
| `value_unavailable_reason` | Per què un camp emplenat per Didit no té valor: `not_verified` (la identitat o el contacte no s'han verificat), `not_applicable` (un camp d'empresa en la signatura d'una persona física), `not_provided` (la font no té cap valor) o `set_at_confirmation` (una data de signatura abans que el signant confirmi). En cas contrari, `null`. |

## Descarregar els documents signats

Utilitza les rutes de `signed_file` i `evidence_file` amb la teva clau d'API. Cada ruta respon amb el PDF mateix.

```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
```

| Ruta | Referència |
| - | - |
| `GET .../documents/{document_id}/file/` | [Baixar un document signat](https://docs.didit.me/ca/sessions-api/electronic-signature/download-signed-document.md) |
| `GET .../evidence/` | [Baixar l'evidència de la signatura](https://docs.didit.me/ca/sessions-api/electronic-signature/download-evidence.md) |
| `GET .../fields/{field_id}/image/` | [Baixar una imatge de signatura](https://docs.didit.me/ca/sessions-api/electronic-signature/download-field-image.md) |
| `POST .../validate/` | [Validar signatures](https://docs.didit.me/ca/sessions-api/electronic-signature/validate-signatures.md) |

Abans de respondre, Didit comprova que el fitxer emmagatzemat coincideix amb el seu SHA-256 registrat. Si difereixen, les rutes del PDF signat i de l'evidència retornen `409` i la ruta de la imatge retorna `400`, cadascuna amb `signature_document_changed`. Passa sempre `signature_id` a la ruta d'evidència quan un pas de KYB tingui diversos signants.

## El PDF signat

El PDF signat conté, per ordre:

1. Les pàgines del document que es van mostrar al signant, amb el valor de cada camp estampat al lloc on el vas col·locar.
2. La pàgina d'evidència, tret que hagis desactivat `signature_evidence_page`.
3. Només per a Avançat (AES), la signatura PAdES, amb la marca de temps RFC 3161 emesa per Didit i les dades de revocació necessàries per validar-la en el futur. Un PDF Simple s'acaba després de la pàgina d'evidència i no té cap signatura digital, ni segell ni marca de temps.

En un PDF Avançat (AES), la signatura cobreix cada byte anterior, inclosos els valors dels camps i la pàgina d'evidència. Modificar qualsevol element del fitxer posteriorment la invalida, i qualsevol validador compatible amb PAdES ho mostrarà. Els detalls de la signatura indiquen el nom del signant i fan referència a la seva sessió d'identitat verificada i a la confirmació per codi.

Els valors dels camps passen a formar part del contingut de la pàgina, no dels camps de formulari, de manera que no es poden editar posteriorment i qualsevol visor de PDF els mostra. Una casella marcada mostra una marca de verificació, i una de no marcada es deixa tal com la va dibuixar el document. Un quadre de signatura de més de 24 punts d'alçària també rep un peu de foto petit a sota de la signatura: `Signed with Didit ·` seguit dels primers 8 caràcters de l'`id` de la signatura.

Didit afegeix els valors dels camps, la pàgina d'evidència i la signatura després dels bytes del document mostrat al signant. Aquest document és un prefix exacte del fitxer signat, de manera que encara es pot comprovar `sha256_original` amb el PDF signat.

## El PDF d'evidència

El PDF d'evidència registra, per a un signant:

* El nivell i el format.
* El nom del signant, la seva capacitat de signatura i, per a KYB, l'empresa.
* La sessió d'identitat verificada (només Avançat (AES)).
* La confirmació: canal, destinació emmascarada i hora (només Avançat (AES)).
* L'adreça IP del signant.
* Cada document: títol, nombre de pàgines i SHA-256 de l'original. Per a un document de Word, el nom i el SHA-256 del fitxer de Word, la versió del convertidor i el SHA-256 del PDF.
* La signatura adoptada: teclejada (amb el seu estil manuscrit) o dibuixada, quan es va adoptar i les imatges de la signatura i de les inicials.
* Cada camp, per document: la seva etiqueta, pàgina i tipus, el seu valor (la imatge per a una signatura o inicials), d'on prové el valor (per exemple **Introduïda pel signant**, **Identitat verificada** o **La teva API**), quan es va emplenar (UTC) i, per a un valor que el signant hagi escrit, la seva adreça IP en aquell moment.
* El consentiment final: el text que el signant ha acceptat a la pantalla de revisió i quan.
* El SHA-256 de cada fitxer signat i, per a Avançat (AES), el certificat (emès a, emissor, número de sèrie i validesa) i la marca de temps.

La pàgina afegida a cada PDF signat té el mateix contingut sense la secció del certificat, ja que s'afegeix abans que s'apliqui la signatura.

## Torna a validar una signatura

`POST /v3/session/{session_id}/signatures/{node_id}/validate/` torna a llegir cada PDF signat del pas i en comprova el SHA-256. Per a una signatura avançada (AES), també valida la signatura PAdES, el seu certificat, les dades de revocació i la marca de temps. Una signatura simple no té signatura digital, de manera que la comprovació només avalua la integritat del fitxer. Desa el resultat a `validation` i retorna la matriu `signatures[]` actualitzada. Envia `signature_id` per comprovar un únic signant. Requereix `write:sessions`, i a la consola és el botó **Torna a validar**. Un PDF signat emmagatzemat que ja no coincideixi amb el seu `sha256_signed` retorna `400` amb `signature_document_changed`.

Fins que els documents no estiguin signats, `validation` és `null`. Si Didit no pot confirmar el resultat de la signatura, `validation` és `{ "valid": null, "reason": "signature_provider_outcome_unknown", "checked_at" }` i `status` es manté en `signing` fins que es resolgui: tracta-ho com a no signat.

| Camp de `validation.documents[]` | Descripció |
| - | - |
| `valid` | `true` quan tant la signatura com la marca de temps són vàlides i de confiança. Per a una signatura simple, `true` quan el fitxer no s'ha modificat. |
| `integrity` | `true` quan el document no s'ha modificat des de la signatura. |
| `trusted` | `true` quan el certificat de signatura s'encadena amb una arrel de confiança. `null` per a una signatura simple. |
| `revoked` | `true` quan el certificat de signatura ha estat revocat. `null` per a una signatura simple. |
| `trusted_list` | `{ "status": "not_applicable", "reason": "aes_not_qualified" }` per a AES. La comprovació de la llista de confiança de la UE s'aplica a signatures qualificades. Una signatura simple retorna `{ "status": "not_applicable", "reason": "simple_not_sealed" }`. |
| `certificate`, `timestamp` | Tal com es troben al fitxer. |

## A l'informe en PDF

L'[informe en PDF](https://docs.didit.me/ca/sessions-api/generate-pdf.md) imprimeix una secció de signatura amb el signant, la confirmació, el certificat, la marca de temps i els documents amb els seus resums criptogràfics. Quan els documents contenen camps, s'hi afegeix una pàgina de **Signatura electrònica · camps**, amb una taula per document: el valor de cada camp, les imatges de la signatura i de les inicials, les marques de temps i els orígens. La secció de signatura va després de la verificació bancària en un informe de KYC i després de Documents en un informe de KYB. Passa `pages=signature` per imprimir només aquesta secció.

## Relacionat

* [Visió general de la signatura electrònica](https://docs.didit.me/ca/core-technology/electronic-signature/overview.md)
* [Advertències de la signatura electrònica](https://docs.didit.me/ca/core-technology/electronic-signature/warnings-electronic-signature.md)
* [Models de dades: signatura electrònica](https://docs.didit.me/ca/reference/data-models.md#signatura-electrònica)
* [Webhooks](https://docs.didit.me/ca/integration/webhooks.md)


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