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

# Signature électronique : rapport, référence signatures[]

> Analysez signatures[] dans Didit, téléchargez les PDF signés et de preuve, et validez à nouveau chaque signature électronique.

Chaque étape de [Signature électronique](https://docs.didit.me/fr/core-technology/electronic-signature/overview.md) génère un résultat par signataire. Vous le trouverez sous la forme d'un élément de `signatures[]` dans :

* [`GET /v3/session/{sessionId}/decision/`](https://docs.didit.me/fr/sessions-api/retrieve-session), pour les sessions de Vérification des utilisateurs (KYC) et de Vérification d'entreprise (KYB).
* La `decision` des [webhooks de session](https://docs.didit.me/fr/integration/webhooks.md) V3, envoyés lorsque la session est `Approved`, `Declined`, `In Review` ou `Abandoned`.
* L'onglet **Signature** de la session dans la console, et la section dédiée à la signature du [rapport PDF](https://docs.didit.me/fr/sessions-api/generate-pdf.md).

`signatures` n'est présent dans la décision que lorsque le workflow comporte une étape de Signature électronique. Il s'agit d'un tableau vide jusqu'à ce qu'un signataire atteigne cette étape. Une étape KYC comprend un seul élément ; une étape KYB comprend un élément par signataire.

## 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'objet signature

| Champ | Type | Description |
| - | - | - |
| `id` | string (UUID) | La signature du signataire. Transmettez-la en tant que `signature_id` pour télécharger son PDF de preuves ou valider sa signature. |
| `node_id` | string | L'étape de workflow qui l'a produite. |
| `status` | string | Où en est le signataire dans l'étape : `intro`, `review`, `code`, `signing`, `signed` ou `declined`. Seul `signed` signifie que les documents sont signés. |
| `verdict` | string | Le résultat de l'étape : `Not Finished`, `Approved`, `In Review` ou `Declined`. Une signature refusée ou ayant échoué prend le verdict de sa [règle](https://docs.didit.me/fr/core-technology/electronic-signature/warnings-electronic-signature.md), et des règles de statut personnalisées peuvent le modifier. |
| `level` | string | `simple` (par défaut) ou `aes`. `qes` est un module complémentaire qui n'est pas encore disponible. |
| `format` | string | `pdf` pour une signature simple, `pades` pour une signature avancée (AES). |
| `profile` | string \| null | `PAdES-B-LT` une fois qu'une signature avancée (AES) est signée, sinon `null`. |
| `signer` | object | Qui a signé. Voir [Signataire](#signataire). |
| `identity_used` | object | L'identité vérifiée sur laquelle repose la signature. Voir [Signataire](#signataire). Vide pour une signature simple sans identité vérifiée. |
| `certificate` | object \| null | Le certificat avec lequel les documents ont été signés : `issuer`, `issued_to`, `serial`, `valid_from` et `valid_until`. `null` jusqu'à la signature, et toujours `null` pour une signature simple. |
| `confirmation` | object | Le code à usage unique : `channel` (`email` ou `sms`), `destination` (le contact masqué auquel il a été envoyé), `confirmed_at` et `attempts` (codes saisis, y compris le bon). Une signature simple n'a pas de code, donc `channel` et `destination` sont `null`. |
| `timestamp` | object \| null | L'horodatage RFC 3161 dans la signature, délivré par Didit : `time`, `qualified` (toujours `false` pour l'AES) et `valid`. `null` jusqu'à la signature, et toujours `null` pour une signature simple. |
| `documents` | array | Un élément par document. Voir [Documents](#documents). |
| `adopted_signature` | object \| null | La signature et les initiales adoptées par le signataire pour les champs de signature et d'initiales : `method` (`typed` ou `drawn`), `font` (le style d'écriture manuscrite d'une signature saisie au clavier, ou `null` si dessinée) et `adopted_at`. `null` jusqu'à ce que le signataire en adopte une. |
| `electronic_signature_consent_at` | string \| null | Moment où le signataire a consenti, sur l'écran d'examen, à signer les documents par voie électronique. Défini dès lors qu'un document comporte des champs. |
| `evidence_file` | string \| null | Chemin vers le [PDF de preuves](#le-pdf-de-preuves) de ce signataire, une fois signé. |
| `warnings` | array | Éléments `{ "code", "node_id" }` pour chaque [avertissement](https://docs.didit.me/fr/core-technology/electronic-signature/warnings-electronic-signature.md) émis. |
| `validation` | object \| null | La dernière vérification cryptographique des documents signés. Voir [Valider à nouveau une signature](#valider-à-nouveau-une-signature). |
| `declined_at` | string \| null | Moment où le signataire a refusé. |
| `declined_action` | string | Le paramètre `signature_declined_action` de l'étape : l'effet d'un refus sur le verdict. |
| `signed_at` | string \| null | Moment où les documents ont été signés. |
| `expires_at` | string | Moment où le lien de signature cesse de fonctionner. |
| `email_sent_at` | string \| null | Moment où Didit a envoyé une copie signée par e-mail au signataire. |
| `email_unavailable_reason` | string \| null | Raison pour laquelle aucune copie n'a été envoyée par e-mail, lorsque vous en aviez demandé une. |
| `ip_address` | string \| null | L'adresse IP du signataire lorsqu'il a demandé son code. |
| `place` | string \| null | Non recueillie. Toujours `null`, avec `place_unavailable_reason: "not_collected"`. |

Ne considérez jamais qu'un signataire a signé tant que `status` n'est pas `signed`. Sur une signature avancée (AES), un certificat, un horodatage ou un `signed_file` à `null` indique qu'il n'y a pas encore de signature. Une signature simple signée possède un `signed_file` mais a toujours un certificat et un horodatage à `null`.

### Signataire

| Champ | Description |
| - | - |
| `signer.name` | Le nom vérifié du signataire, issu de sa vérification d'identité approuvée. Au niveau Simple, il s'agit du nom de session vérifié s'il existe, sinon du nom saisi par le signataire, qui n'est pas vérifié. |
| `signer.capacity` | `self` lorsqu'une personne signe pour elle-même (KYC), `company` lorsqu'une personne clé signe pour une entreprise (KYB). |
| `signer.company` | Le nom de l'entreprise, pour le KYB. |
| `signer.role` | La fonction déclarée de la personne clé, pour le KYB. |
| `signer.roles` | Les rôles structurés de la personne clé, tels que `representative` ou `authorized_signatory`, qui en ont fait un signataire. Il s'agit des rôles déclarés pour l'entreprise, et non d'une confirmation issue d'un registre. |
| `signer.identity_session_id` | La session KYC qui a vérifié le signataire. Pour le KYB, la propre session KYC de la personne clé. Absent pour une signature simple sans identité vérifiée. |
| `identity_used.session_id` | Identique à `signer.identity_session_id`. `identity_used` est vide pour une signature simple sans identité vérifiée, donc aucun de ses champs n'est présent. |
| `identity_used.kyc_id` | La vérification d'identité dont provient le nom. |
| `identity_used.verified` | `true` lorsque cette vérification d'identité a été approuvée. |
| `identity_used.expected_name` | Le nom auquel le signataire devait correspondre. Pour le KYB, le nom déclaré pour la personne clé. |

### Documents

| Champ | Description |
| - | - |
| `id`, `uuid` | Le document. Utilisez-le pour télécharger le fichier signé. |
| `title`, `file_name` | Tel que téléversé ou envoyé. |
| `pages`, `size_bytes` | Du document signé par le signataire. Pour Word, du PDF converti. |
| `sha256_original` | SHA-256 du document tel qu'il a été présenté au signataire. |
| `sha256_signed` | SHA-256 du PDF signé, une fois signé. |
| `status` | `signed` ; `declined` ; `not_signed` (ouvert, non signé) ; ou `not_reached` (jamais ouvert). |
| `opened_at` | Moment où le signataire l'a ouvert pour la première fois. |
| `read_at`, `read_to_end` | Moment où le signataire a atteint la fin d'un document sans champs, lorsque vous exigez la lecture jusqu'au bout. Un document avec des champs n'en a pas besoin. |
| `consented_at`, `consent` | Moment où le signataire a accepté un document sans champs, lorsque vous exigez un consentement par document, ou a rempli les champs d'un document avec champs. |
| `signed_file` | Chemin vers le PDF signé, une fois signé. |
| `mode` | `fields` pour un document avec des champs, `read_and_agree` pour un document sans champs. |
| `source_format` | `pdf`, ou `docx` pour un document Word converti par Didit. |
| `conversion` | `null` pour un PDF. Pour un document Word, `{ "from": "docx", "file_name", "sha256", "size_bytes", "converter" }` : votre fichier d'origine, son SHA-256, sa taille et la version du convertisseur. |
| `fields` | Les [champs](#champs) présents sur le document, avec leurs valeurs. Vide pour un document sans champs. |

### Champs

Chaque élément de `documents[].fields[]` correspond à un champ du document, avec sa valeur sur la copie de ce signataire :

| Champ | Description |
| - | - |
| `key` | La [clé](https://docs.didit.me/fr/core-technology/electronic-signature/overview.md#champs-sur-le-document) du champ, identique à celle que vous utilisez dans `sign.field_values`. |
| `type`, `role`, `label`, `required` | Tels que positionnés sur le document. |
| `page`, `x`, `y`, `width`, `height` | Emplacement du champ, sous forme de fractions de la page affichée. |
| `value` | Une chaîne pour les champs `text`, `email`, `full_name`, `date_signed` et `data`, un booléen pour une case à cocher, et `true` pour une signature ou des initiales appliquées. `null` lorsque le champ est vide. |
| `display_value` | La valeur telle qu'elle est apposée sur la page : dates au format `date_format` du champ, `Yes` ou `No` pour une case à cocher, et `Signed` pour une signature ou des initiales. |
| `value_source` | Provenance de la valeur : `signer` (saisie, cochée ou appliquée par le signataire), `identity` (la pièce d'identité vérifiée), `contact` (l'e-mail ou le téléphone vérifié), `company` (l'entreprise vérifiée), `session` (le `vendor_data` de la session), `metadata` (les `metadata` de la session), `api` (vos `sign.field_values`) ou `signing_time` (la date de signature). |
| `filled_at` | Moment où la valeur a été renseignée. |
| `image_url` | Pour une signature ou des initiales, le chemin de l'image appliquée, au format PNG. Voir [Télécharger l'image d'une signature](https://docs.didit.me/fr/sessions-api/electronic-signature/download-field-image.md). |
| `value_unavailable_reason` | Raison pour laquelle un champ rempli par Didit n'a pas de valeur : `not_verified` (l'identité ou le contact n'a pas été vérifié), `not_applicable` (champ d'entreprise sur la signature personnelle d'un individu), `not_provided` (la source n'a pas de valeur) ou `set_at_confirmation` (date de signature avant confirmation par le signataire). Sinon, `null`. |

## Télécharger les documents signés

Utilisez les chemins fournis dans `signed_file` et `evidence_file` avec votre clé API. Chaque route renvoie le PDF lui-même.

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

| Route | Référence |
| - | - |
| `GET .../documents/{document_id}/file/` | [Télécharger un document signé](https://docs.didit.me/fr/sessions-api/electronic-signature/download-signed-document.md) |
| `GET .../evidence/` | [Télécharger les preuves de la signature](https://docs.didit.me/fr/sessions-api/electronic-signature/download-evidence.md) |
| `GET .../fields/{field_id}/image/` | [Télécharger l'image d'une signature](https://docs.didit.me/fr/sessions-api/electronic-signature/download-field-image.md) |
| `POST .../validate/` | [Valider des signatures](https://docs.didit.me/fr/sessions-api/electronic-signature/validate-signatures.md) |

Avant de répondre, Didit compare le fichier stocké à son empreinte SHA-256 enregistrée. En cas de différence, les routes du PDF signé et des preuves renvoient `409` et la route de l'image renvoie `400`, chacune avec `signature_document_changed`. Transmettez toujours `signature_id` à la route des preuves lorsqu'une étape KYB comporte plusieurs signataires.

## Le PDF signé

Le PDF signé contient, dans l'ordre :

1. Les pages du document telles qu'elles ont été présentées au signataire, avec la valeur de chaque champ apposée là où vous l'avez positionnée.
2. La page de preuves, sauf si vous avez désactivé `signature_evidence_page`.
3. Pour le niveau Avancé (AES) uniquement, la signature PAdES, avec l'horodatage RFC 3161 émis par Didit et les données de révocation nécessaires pour la valider ultérieurement. Un PDF Simple se termine après la page de preuves et ne comporte ni signature numérique, ni cachet, ni horodatage.

Sur un PDF Avancé (AES), la signature couvre chaque octet qui la précède, y compris les valeurs des champs et la page de preuves. Toute modification ultérieure apportée au fichier l'invalide, et tout validateur compatible PAdES le signale. Les détails de la signature nomment le signataire et font référence à sa session de vérification d'identité et à la confirmation par code.

Les valeurs des champs sont intégrées au contenu de la page, et non sous forme de champs de formulaire, ce qui empêche toute modification ultérieure et garantit que tous les lecteurs PDF les affichent. Une case cochée présente une coche, et une case non cochée reste telle qu'elle était dessinée dans le document. Un cadre de signature d'une hauteur supérieure à 24 points reçoit également une courte mention sous la signature : `Signed with Didit ·` suivi des 8 premiers caractères de l'`id` de la signature.

Didit ajoute les valeurs des champs, la page de preuves et la signature après les octets du document présenté au signataire. Ce document constitue un préfixe exact du fichier signé, ce qui permet de continuer à vérifier `sha256_original` par rapport au PDF signé.

## Le PDF de preuves

Le PDF de preuves consigne, pour un signataire donné :

* Le niveau et le format.
* Le nom du signataire, sa capacité de signature et, pour le KYB, l'entreprise.
* La session de vérification d'identité (Avancé (AES) uniquement).
* La confirmation : canal, destination masquée et date/heure (Avancé (AES) uniquement).
* L'adresse IP du signataire.
* Chaque document : titre, nombre de pages et SHA-256 de l'original. Pour un document Word, le nom du fichier Word et son SHA-256, la version du convertisseur et le SHA-256 du PDF.
* La signature adoptée : saisie au clavier (avec son style manuscrit) ou dessinée, le moment où elle a été adoptée, ainsi que les images de la signature et des initiales.
* Chaque champ, par document : son libellé, sa page et son type, sa valeur (l'image pour une signature ou des initiales), la provenance de la valeur (par exemple **Saisi par le signataire**, **Pièce d'identité vérifiée** ou **Votre API**), le moment où il a été renseigné (UTC) et, pour une valeur saisie par le signataire, son adresse IP à cet instant.
* Le consentement final : le texte accepté par le signataire sur l'écran d'examen, ainsi que la date et l'heure.
* Le SHA-256 de chaque fichier signé et, pour le niveau Avancé (AES), le certificat (délivré à, émetteur, numéro de série et validité) et l'horodatage.

La page ajoutée à chaque PDF signé reprend le même contenu sans la section relative au certificat, car elle est intégrée avant l'application de la signature.

## Valider à nouveau une signature

`POST /v3/session/{session_id}/signatures/{node_id}/validate/` relit chaque PDF signé de l'étape et vérifie son SHA-256. Pour une signature avancée (AES), il valide également la signature PAdES, son certificat, les données de révocation et l'horodatage. Une signature simple ne comporte pas de signature numérique, le contrôle porte donc uniquement sur l'intégrité du fichier. Il enregistre le résultat dans `validation` et renvoie le tableau `signatures[]` mis à jour. Envoyez `signature_id` pour vérifier un seul signataire. Il nécessite `write:sessions`, et dans la console, il s'agit du bouton **Valider à nouveau**. Un PDF signé stocké qui ne correspond plus à son `sha256_signed` renvoie `400` avec `signature_document_changed`.

Tant que les documents ne sont pas signés, `validation` est `null`. Si Didit ne peut pas confirmer l'issue de la signature, `validation` vaut `{ "valid": null, "reason": "signature_provider_outcome_unknown", "checked_at" }` et `status` reste à `signing` jusqu'à sa résolution : traitez-le comme non signé.

| Champ de `validation.documents[]` | Description |
| - | - |
| `valid` | `true` lorsque la signature et l'horodatage sont tous deux valides et de confiance. Pour une signature simple, `true` lorsque le fichier n'a pas été modifié. |
| `integrity` | `true` lorsque le document n'a pas été modifié depuis la signature. |
| `trusted` | `true` lorsque la chaîne du certificat de signature remonte à une racine de confiance. `null` pour une signature simple. |
| `revoked` | `true` lorsque le certificat de signature a été révoqué. `null` pour une signature simple. |
| `trusted_list` | `{ "status": "not_applicable", "reason": "aes_not_qualified" }` pour l'AES. La vérification de la liste de confiance de l'UE (EU Trusted List) s'applique aux signatures qualifiées. Une signature simple renvoie `{ "status": "not_applicable", "reason": "simple_not_sealed" }`. |
| `certificate`, `timestamp` | Tels que trouvés dans le fichier. |

## Dans le rapport PDF

Le [rapport PDF](https://docs.didit.me/fr/sessions-api/generate-pdf.md) imprime une section consacrée à la signature avec le signataire, la confirmation, le certificat, l'horodatage et les documents accompagnés de leurs hashs. Lorsque les documents contiennent des champs, une page **Signature électronique · champs** suit, avec un tableau par document : la valeur de chaque champ, les images de la signature et des paraphes, les horodatages et les sources. La section de signature apparaît après la vérification bancaire dans un rapport KYC et après Documents dans un rapport KYB. Transmettez `pages=signature` pour imprimer uniquement cette section.

## Voir aussi

* [Présentation de la Signature électronique](https://docs.didit.me/fr/core-technology/electronic-signature/overview.md)
* [Avertissements de la Signature électronique](https://docs.didit.me/fr/core-technology/electronic-signature/warnings-electronic-signature.md)
* [Modèles de données : signature électronique](https://docs.didit.me/fr/reference/data-models.md#signature-électronique)
* [Webhooks](https://docs.didit.me/fr/integration/webhooks.md)


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