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

# API de téléchargement de document signé : PDF signé

> Téléchargez le PDF signé d'un document d'une étape de signature électronique, pour une session KYC ou KYB, avec votre clé API. Didit.

Renvoie le PDF signé d'un document, une fois que son signataire l'a signé. Vous n'avez pas besoin de construire l'URL : chaque document signé de la décision porte son chemin dans `signatures[].documents[].signed_file`.

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

Le PDF contient le document présenté au signataire, avec ses valeurs de champs apposées, ainsi que la page de preuve (sauf si `signature_evidence_page` est désactivé pour l'étape). Un PDF Advanced (AES) comporte également la signature PAdES avec son horodatage ; un PDF Simple ne contient ni signature numérique, ni cachet, ni horodatage. Avant de le renvoyer, Didit vérifie le fichier stocké par rapport à `sha256_signed` et répond `409` avec `signature_document_changed` si les deux ne correspondent pas.

Un document qui n'est pas encore signé renvoie `404` avec `signature_not_signed`. Une fois que vous avez [supprimé la session](https://docs.didit.me/fr/sessions-api/delete-session.md), la route renvoie `404`.

## Liens connexes

* [Rapport de signature électronique](https://docs.didit.me/fr/core-technology/electronic-signature/report-electronic-signature.md#le-pdf-signé) : ce que contient le PDF signé.
* [Télécharger la preuve de signature](https://docs.didit.me/fr/sessions-api/electronic-signature/download-evidence.md)
* [Valider les signatures](https://docs.didit.me/fr/sessions-api/electronic-signature/validate-signatures.md)


## OpenAPI

````yaml fr/openapi-25.json GET /v3/session/{sessionId}/signatures/{nodeId}/documents/{documentId}/file/
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}/documents/{documentId}/file/:
    get:
      tags:
        - Sessions
      summary: Télécharger un document signé
      description: "Télécharger le PDF signé d'un document d'une étape de signature électronique. Utilisez le chemin `signed_file` de `signatures[].documents[]` dans la décision. Le PDF contient le document présenté au signataire avec les valeurs de ses champs apposées ainsi que la page de preuves (sauf si `signature_evidence_page` est désactivé). Un PDF avancé (AES) comporte également la signature PAdES avec son horodatage\_; un PDF simple ne comporte aucune signature numérique, aucun cachet ni horodatage. Didit vérifie le fichier par rapport à `sha256_signed` avant de le renvoyer.\n\nFonctionne pour les sessions de vérification des utilisateurs (KYC) et de vérification d'entreprise (KYB). Nécessite `read:sessions`\_; votre clé API fonctionne. Consultez le [rapport de signature électronique](/fr/core-technology/electronic-signature/report-electronic-signature#télécharger-les-documents-signés)."
      operationId: get_v3_session_signature_document_file
      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: documentId
          in: path
          required: true
          description: '`id` du document dans `signatures[].documents[]`.'
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Le PDF signé.
          headers:
            Content-Disposition:
              description: Pièce jointe avec le nom de fichier.
              schema:
                type: string
                example: attachment; filename="agreement-signed.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 document signé ne correspond : la session, l'étape ou le
            document n'existe pas, a été supprimé ou n'est pas encore 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 document:
                  summary: Aucun document 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_document(
                "11111111-2222-3333-4444-555555555555",
                "feature_signature",
                "11111111-2222-3333-4444-555555555555",
            )
            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.downloadDocument(
              "11111111-2222-3333-4444-555555555555",
              "feature_signature",
              "11111111-2222-3333-4444-555555555555",
            );

            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.DownloadDocument(ctx, \"11111111-2222-3333-4444-555555555555\", \"feature_signature\", \"11111111-2222-3333-4444-555555555555\")\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().downloadDocument("11111111-2222-3333-4444-555555555555",
            "feature_signature", "11111111-2222-3333-4444-555555555555")
                    .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->downloadDocument('11111111-2222-3333-4444-555555555555',
            'feature_signature', '11111111-2222-3333-4444-555555555555');

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

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

            content = didit.sessions.signatures.download_document(
              "11111111-2222-3333-4444-555555555555",
              "feature_signature",
              "11111111-2222-3333-4444-555555555555"
            )
            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.DownloadDocumentAsync("11111111-2222-3333-4444-555555555555",
            "feature_signature", "11111111-2222-3333-4444-555555555555");

            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.