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

# Preuve de signature électronique : API et PDF d'audit

> Téléchargez avec Didit la preuve PDF d'un signataire : hachages, valeurs des champs, identité, code, certificat et horodatage de la signature AES.

Renvoie le PDF de preuves d'un signataire, une fois qu'il a signé. Le chemin figure dans `signatures[].evidence_file` du signataire, avec `signature_id` déjà renseigné.

```bash theme={null}
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
```

> [!WARNING]
>
> Transmettez toujours `signature_id`. Une étape de Vérification d'entreprise (KYB) peut comporter plusieurs signataires ; sans ce paramètre, la route en sélectionne un parmi eux.

Le PDF de preuves indique le niveau et le format, le signataire, l'adresse IP, chaque document avec son empreinte SHA-256 d'origine, la signature adoptée, la valeur de chaque champ avec sa source et son horodatage, le consentement final et l'empreinte SHA-256 de chaque fichier signé. Pour une signature avancée (AES), il mentionne aussi la session d'identité vérifiée, la confirmation par code, le certificat et l'horodatage ; une signature simple n'en comporte aucun. Voir [Le PDF de preuves](https://docs.didit.me/fr/core-technology/electronic-signature/report-electronic-signature.md#le-pdf-de-preuves).

Un signataire qui n'a pas signé reçoit une réponse `404` avec `signature_not_signed`. Après avoir [supprimé la session](https://docs.didit.me/fr/sessions-api/delete-session.md), la route renvoie `404`.

## Ressources associées

* [Télécharger un document signé](https://docs.didit.me/fr/sessions-api/electronic-signature/download-signed-document.md)
* [Rapport sur la signature électronique](https://docs.didit.me/fr/core-technology/electronic-signature/report-electronic-signature.md)


## OpenAPI

````yaml fr/openapi-25.json GET /v3/session/{sessionId}/signatures/{nodeId}/evidence/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API de vérification d'identité. Authentifiez-vous avec l'en-tête x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/session/{sessionId}/signatures/{nodeId}/evidence/:
    get:
      tags:
        - Sessions
      summary: Télécharger les preuves de signature
      description: "Télécharger le PDF de preuves d'un signataire\_: le niveau et le format, le signataire, l'adresse IP, chaque document avec son SHA-256 d'origine et les valeurs des champs, ainsi que le SHA-256 de chaque fichier signé, plus, pour une signature avancée (AES), la session d'identité vérifiée, la confirmation par code, le certificat et l'horodatage. Utilisez le chemin `evidence_file` de l'élément du signataire dans `signatures[]`.\n\nTransmettez toujours `signature_id` lorsqu'une étape de Vérification d'entreprise (KYB) comporte plusieurs signataires\_: sans cela, la route choisit l'un des signataires de l'étape. Nécessite `read:sessions`\_; votre clé API fonctionne."
      operationId: get_v3_session_signature_evidence
      parameters:
        - name: sessionId
          in: path
          required: true
          description: >-
            La session de vérification des utilisateurs (KYC) ou de vérification
            d'entreprise (KYB).
          schema:
            type: string
            format: uuid
            example: 11111111-2222-3333-4444-555555555555
        - name: nodeId
          in: path
          required: true
          description: >-
            L'étape de signature électronique : `node_id` de l'élément dans
            `signatures[]`.
          schema:
            type: string
            example: feature_signature
        - name: signature_id
          in: query
          required: false
          description: '`id` de l''élément du signataire dans `signatures[]`.'
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Le PDF des éléments de preuve.
          headers:
            Content-Disposition:
              description: Pièce jointe avec le nom de fichier.
              schema:
                type: string
                example: attachment; filename="signature-evidence.pdf"
          content:
            application/pdf:
              schema:
                type: string
                format: binary
        '403':
          description: >-
            Identifiants manquants, ou identifiant ne pouvant pas lire cette
            session. Une clé manquante renvoie `403` ; une clé erronée, révoquée
            ou expirée renvoie `401`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              example:
                detail: You do not have permission to perform this action.
        '404':
          description: >-
            Aucun élément de preuve ne correspond : la session, l'étape ou le
            signataire n'existe pas, a été supprimé(e) ou n'a pas signé.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                  code:
                    type: string
              examples:
                Not signed yet:
                  summary: Le signataire n'a pas signé
                  value:
                    code: signature_not_signed
                    detail: signature_not_signed
                Unknown signer:
                  summary: Aucune signature de ce type dans cette étape
                  value:
                    code: signature_not_found
                    detail: signature_not_found
        '409':
          description: >-
            Le fichier enregistré ne correspond plus à son empreinte SHA-256
            enregistrée. Rien n'est renvoyé.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                  code:
                    type: string
              examples:
                Changed file:
                  summary: Le fichier stocké ne correspond pas à son hachage
                  value:
                    code: signature_document_changed
                    detail: signature_document_changed
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            content = client.sessions.signatures.download_evidence(
                "11111111-2222-3333-4444-555555555555",
                "feature_signature",
            )
            with open("download.pdf", "wb") as file:
                file.write(content)
        - lang: javascript
          label: Node.js
          source: >-
            import { writeFile } from "node:fs/promises";

            import Didit from "@didit-protocol/sdk-node";


            // Reads DIDIT_API_KEY.

            const didit = new Didit();


            const content = await didit.sessions.signatures.downloadEvidence(
              "11111111-2222-3333-4444-555555555555",
              "feature_signature",
            );

            await writeFile("download.pdf", Buffer.from(await
            content.arrayBuffer()));
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresp, err := client.Sessions.Signatures.DownloadEvidence(ctx, \"11111111-2222-3333-4444-555555555555\", \"feature_signature\", didit.SessionsSignaturesDownloadEvidenceParams{})\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer resp.Body.Close()\nfile, err := os.Create(\"download.pdf\")\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer file.Close()\nif _, err := io.Copy(file, resp.Body); err != nil {\n\tlog.Fatal(err)\n}"
        - lang: java
          label: Java
          source: >-
            import java.nio.file.Path;

            import me.didit.Didit;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            client.sessions().signatures().downloadEvidence("11111111-2222-3333-4444-555555555555",
            "feature_signature")
                    .writeTo(Path.of("download.pdf"));
        - lang: php
          label: PHP
          source: >-
            <?php


            require 'vendor/autoload.php';


            use Didit\DiditClient;


            // Reads DIDIT_API_KEY.

            $didit = new DiditClient();


            $content =
            $didit->sessions->signatures->downloadEvidence('11111111-2222-3333-4444-555555555555',
            'feature_signature');

            $content->saveTo('download.pdf');
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

            # Reads DIDIT_API_KEY.
            didit = Didit::Client.new

            content = didit.sessions.signatures.download_evidence(
              "11111111-2222-3333-4444-555555555555",
              "feature_signature"
            )
            File.binwrite("download.pdf", content)
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            var content = await
            client.Sessions.Signatures.DownloadEvidenceAsync("11111111-2222-3333-4444-555555555555",
            "feature_signature");

            await content.SaveToAsync("download.pdf");
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        La clé API de votre application, issue de Développeurs -> Clés API dans
        la Business Console. La clé principale dispose d'un accès complet. Une
        clé nommée peut être restreinte : aucun, lecture ou écriture par
        ressource, limitée à certains workflows ou aux sessions approuvées, à
        une liste d'adresses IP et à une date d'expiration. 401 signifie que la
        clé est incorrecte, révoquée ou expirée ; 403 signifie qu'aucune clé n'a
        été envoyée, que la clé n'a pas accès à cette ressource ou action, ou
        que la requête provient d'une adresse hors de sa liste d'IP ; 404 sur
        une route de session signifie que la session est hors des workflows ou
        des statuts de la clé. Une clé sans accès aux médias reçoit les URL
        d'images, de vidéos et de PDF à null, et une clé sans accès en écriture
        aux sessions reçoit les liens et tokens de session à null. Voir
        https://docs.didit.me/console/api-keys.

````

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