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

# Ajouter des images à une session API

> Avec Didit, joignez une image ou un PDF au résultat de Vérification d'identité ou de Justificatif de domicile d'une session KYC terminée.

Instruction de l'API pour ajouter des images à une session
Copier le prompt dans le presse-papiers

<pre>
  \`Attach an extra image or PDF to a finished Didit User Verification (KYC) session through the API.

  Endpoint:
  PATCH [https://verification.didit.me/v3/session/\{session\_id}/add-images/](https://verification.didit.me/v3/session/\{session_id}/add-images/)

  Authentication:
  Send my Didit API key in the x-api-key header. A scoped key needs sessions: write.

  Goal:

  * Add evidence collected outside the verification flow (for example the back of an ID document, or a supporting letter) to the session's ID verification or Proof of Address result, so reviewers see it with the rest of the session.

  Request (multipart/form-data):

  * file (required): JPG, JPEG, PNG, WEBP, TIFF or PDF, at most 15 MB as uploaded. Didit compresses it and rejects it if it is still over 2 MB (2,097,152 bytes) after compression.
  * model\_type (required): "kyc" for the ID verification, "poa" for the Proof of Address.
  * file\_password (optional): the password of an encrypted PDF.

  Behavior:

  * The session must be Approved, Declined, In Review or Kyc Expired, and must have the result named by model\_type. Business (KYB) sessions are not supported.
  * When the step ran more than once, the file goes to the most recent result.
  * Each call adds one file and keeps the existing ones.
  * The file then appears in extra\_files of id\_verifications\[] or poa\_verifications\[] in GET /v3/session/{session_id}/decision/.
  * A FILE\_ADDED entry is added to the session's activity log. No webhook is sent and the session status does not change.
  * Rate limit: 10 requests per minute per API key.

  Example call:
  curl -X PATCH "[https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/add-images/](https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/add-images/)" \
  -H "x-api-key: YOUR\_API\_KEY" \
  -F "file=@back-of-id.jpg" \
  -F "model\_type=kyc"

  What to read from the response:

  * extra\_files: short-lived presigned links to every extra file of that result, including the new one. A scoped key without media: read receives them as null.

  Failure modes:

  * 400: file or model\_type missing, unsupported format, file too large before or after compression, encrypted PDF without the right file\_password.
  * 401: the API key has expired.
  * 403: missing key (a wrong, revoked or expired key gets 401), a key of another application, a scoped key without sessions: write, or a request from outside the key's IP allowlist.
  * 404: the session does not exist, was deleted, is outside a scoped key's limits, is not in a reviewable status, or has no result of that model\_type.
  * 429: more than 10 calls in a minute. Wait for Retry-After seconds.

  Side effects: stores the file with the session and adds an activity entry.

  For the full integration shape, see /integration/integration-prompt.\`
</pre>

Coller dans

Les liens présignés dans `extra_files` expirent. Récupérez de nouveaux liens depuis la [décision de session](https://docs.didit.me/fr/sessions-api/retrieve-session.md) lorsque vous en avez besoin pour accéder aux fichiers plus tard. Pour corriger les données extraites d'un document, utilisez plutôt [Mettre à jour les données de session](https://docs.didit.me/fr/sessions-api/update-data.md).


## OpenAPI

````yaml fr/openapi-25.json PATCH /v3/session/{sessionId}/add-images/
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}/add-images/:
    patch:
      tags:
        - Sessions
      summary: Ajouter une image à une session
      description: "Ajoutez une image ou un PDF supplémentaire au résultat de vérification d'identité (`model_type=kyc`) ou de justificatif de domicile (`model_type=poa`) d'une session de vérification des utilisateurs (KYC) terminée, par exemple des éléments probants collectés en dehors du workflow. La session doit être `Approved`, `Declined`, `In Review` ou `Kyc Expired` et comporter le résultat désigné par `model_type`\_; les sessions de vérification d'entreprise (KYB) ne sont pas prises en charge. Chaque appel ajoute un fichier (au résultat le plus récent lorsque l'étape a été exécutée plusieurs fois), conserve les fichiers existants et enregistre une entrée `FILE_ADDED` dans le journal d'activité de la session\_; le téléversement n'envoie aucun webhook et ne modifie pas le statut de la session. Le fichier est compressé lors du téléversement et est renvoyé dans `extra_files` de la décision de la session. Cet endpoint est limité à 10 requêtes par minute et par clé API. Une clé API avec restriction de portée nécessite `sessions: write`, et sans `media: read`, elle reçoit les liens `extra_files` sous forme de `null`."
      operationId: patch_v3_session_add_images
      parameters:
        - name: sessionId
          in: path
          required: true
          description: >-
            UUID de la session de Vérification des utilisateurs (KYC) à laquelle
            ajouter le fichier (le `session_id` renvoyé par `POST
            /v3/session/`). Un identifiant de session de Vérification
            d'entreprise (KYB) renvoie `404`.
          schema:
            type: string
            format: uuid
            example: 11111111-2222-3333-4444-555555555555
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
                - file
                - model_type
              properties:
                file:
                  type: string
                  format: binary
                  description: >-
                    L'image ou le PDF. Extensions autorisées : `jpg`, `jpeg`,
                    `png`, `webp`, `tiff`, `pdf`. Au maximum 15 Mo lors du
                    téléversement ; le fichier est ensuite compressé et rejeté
                    avec `400` s'il dépasse toujours 2 Mo (2 097 152 octets).
                    Les fichiers vides sont rejetés.
                model_type:
                  type: string
                  enum:
                    - kyc
                    - poa
                  description: >-
                    `kyc` ajoute le fichier au résultat de la vérification
                    d'identité, `poa` au résultat du justificatif de domicile.
                  example: kyc
                file_password:
                  type: string
                  description: >-
                    Mot de passe d'un PDF chiffré. Sans celui-ci, ou avec un mot
                    de passe incorrect, un PDF chiffré renvoie `400`.
            example:
              file: (binary)
              model_type: kyc
      responses:
        '200':
          description: >-
            Fichier ajouté. Renvoie tous les fichiers supplémentaires de ce
            résultat, y compris le nouveau.
          content:
            application/json:
              schema:
                type: object
                required:
                  - extra_files
                properties:
                  extra_files:
                    type: array
                    description: >-
                      Liens pré-signés de courte durée vers tous les fichiers
                      supplémentaires du résultat désigné par `model_type`, du
                      plus ancien au plus récent. Chaque lien est `null` pour
                      une clé API restreinte sans `media: read`. Lisez de
                      nouveaux liens à partir de la décision de session
                      ultérieurement.
                    items:
                      type: string
                      format: uri
                      nullable: true
              example:
                extra_files:
                  - >-
                    https://media.example.com/session/11111111-2222-3333-4444-555555555555/kyc-extra-files/66666666-7777-8888-9999-000000000000.jpg?expires=1789383731&signature=abc123
        '400':
          description: >-
            Erreur de validation. Les erreurs de champ sont renvoyées sous la
            forme `{"<field>": ["<message>"]}` ; les erreurs de PDF chiffré sous
            la forme `{"detail": "..."}`.
          content:
            application/json:
              examples:
                Missing file:
                  summary: Aucun champ de fichier dans le formulaire
                  value:
                    file:
                      - No file was submitted.
                Missing model_type:
                  summary: model_type omis
                  value:
                    model_type:
                      - This field is required.
                Invalid model_type:
                  summary: model_type n'est ni kyc ni poa
                  value:
                    model_type:
                      - '"passport" is not a valid choice.'
                File too large:
                  summary: Téléversement supérieur à 15 MB
                  value:
                    file:
                      - File size should not exceed 15 MB
                Too large after compression:
                  summary: Toujours supérieur à 2 MB après compression
                  value:
                    file:
                      - File size is too big. Max allowed size is 2097152 bytes.
                Encrypted PDF:
                  summary: PDF chiffré sans file_password
                  value:
                    detail: >-
                      The PDF is encrypted. Please upload a decrypted PDF or a
                      photo instead.
                Wrong PDF password:
                  summary: file_password n'ouvre pas le PDF
                  value:
                    detail: >-
                      The PDF password is incorrect. Please provide the correct
                      password.
        '401':
          description: >-
            La clé API restreinte a expiré. C'est le seul cas qui renvoie `401`
            : une clé manquante, invalide ou révoquée renvoie `403`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Message d'erreur lisible par l'humain.
              examples:
                Expired key:
                  summary: La date d'expiration de la clé est dépassée
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            Échec d'authentification ou d'autorisation. Une clé manquante
            renvoie `403`, tout comme la clé d'une autre application, une clé
            restreinte ne disposant pas de l'autorisation requise par cet
            endpoint, ou une requête provenant de l'extérieur de la liste
            d'adresses IP autorisées de la clé ; une clé incorrecte, révoquée ou
            expirée renvoie `401`. Distinguez-les grâce au champ `detail`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Message d'erreur lisible par l'humain.
              examples:
                Missing or invalid credentials:
                  summary: Aucun en-tête x-api-key, ou la validation de la clé a échoué
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Other application:
                  summary: >-
                    Une clé valide qui appartient à une application différente
                    de la session
                  value:
                    detail: You do not have permission to perform this action.
                Scoped key without sessions write:
                  summary: 'La clé restreinte ne dispose pas de sessions: write'
                  value:
                    detail: This API key has no write access to sessions.
                IP not allowed:
                  summary: >-
                    Requête provenant de l'extérieur de la liste d'adresses IP
                    autorisées de la clé
                  value:
                    detail: This API key can't be used from this IP address.
        '404':
          description: >-
            La session n'existe pas, a été supprimée ou se trouve en dehors des
            limites d'une clé restreinte ; il s'agit d'une session KYB ou elle
            n'est pas dans l'état `Approved`, `Declined`, `In Review` ou `Kyc
            Expired` ; ou elle n'a aucun résultat pour le `model_type` demandé
            (vérifié avant la validation du fichier). La recherche de session
            s'exécute avant la vérification des identifiants, donc un
            `sessionId` inconnu renvoie `404` même sans clé valide.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Message d'erreur lisible par l'humain.
              examples:
                Unknown session:
                  summary: Aucune session avec cet ID n'existe, ou elle a été supprimée
                  value:
                    detail: Not found.
                Outside key limits:
                  summary: >-
                    La session se trouve en dehors des limites de workflow ou
                    réservées aux sessions approuvées d'une clé restreinte
                  value:
                    detail: Session not found.
                Not eligible:
                  summary: Session pas encore terminée, ou ID de session KYB
                  value:
                    detail: No Session matches the given query.
                No ID verification:
                  summary: model_type=kyc sur une session sans Vérification d'identité
                  value:
                    detail: The session does not have KYC data.
                No Proof of Address:
                  summary: model_type=poa sur une session sans Justificatif de domicile
                  value:
                    detail: The session does not have POA data.
        '429':
          description: >-
            Limite de débit dépassée : 10 requêtes d'ajout d'images par minute
            par clé API (les requêtes rejetées comptent également). Le budget
            partagé de 300 requêtes d'écriture par minute s'applique aussi.
            Attendez `Retry-After` secondes avant de réessayer ; les en-têtes
            `X-RateLimit-*` indiquent le budget.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Message d'erreur lisible par l'humain.
              examples:
                Rate limited:
                  summary: Budget épuisé pour la minute en cours
                  value:
                    detail: >-
                      Session add-images rate limit exceeded. You can make up to
                      10 requests per minute.
          headers:
            Retry-After:
              description: Secondes à attendre avant de réessayer.
              schema:
                type: integer
                minimum: 1
                example: 30
        '503':
          $ref: '#/components/responses/DocumentProcessingBusy'
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X PATCH
            'https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/add-images/'
            \
              -H 'x-api-key: YOUR_API_KEY' \
              -F 'file=@./back-of-id.jpg' \
              -F 'model_type=kyc'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.sessions.add_images(
                "11111111-2222-3333-4444-555555555555",
                file=open("image.jpg", "rb"),
                model_type="kyc",
            )
            print(result)
        - lang: javascript
          label: Node.js
          source: >-
            import Didit, { fileFromPath } from "@didit-protocol/sdk-node";


            // Reads DIDIT_API_KEY.

            const didit = new Didit();


            const result = await
            didit.sessions.addImages("11111111-2222-3333-4444-555555555555", {
              file: await fileFromPath("image.jpg"),
              model_type: "kyc",
            });

            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.AddImages(ctx, \"11111111-2222-3333-4444-555555555555\", didit.SessionsAddImagesParams{\n\tFile:      didit.FileFromPath(\"image.jpg\"),\n\tModelType: \"kyc\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import java.nio.file.Path;

            import me.didit.Didit;

            import me.didit.types.SessionsAddImagesParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.sessions().addImages("11111111-2222-3333-4444-555555555555",
            SessionsAddImagesParams.builder()
                    .file(Path.of("image.jpg"))
                    .modelType(SessionsAddImagesParams.ModelType.of("kyc"))
                    .build());
            System.out.println(result);
        - lang: php
          label: PHP
          source: >-
            <?php


            require 'vendor/autoload.php';


            use Didit\DiditClient;

            use Didit\File;


            // Reads DIDIT_API_KEY.

            $didit = new DiditClient();


            $result =
            $didit->sessions->addImages('11111111-2222-3333-4444-555555555555',
            [
                'file' => File::fromPath('image.jpg'),
                'model_type' => 'kyc',
            ]);

            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            result = didit.sessions.add_images(
              "11111111-2222-3333-4444-555555555555",
              file: Pathname("image.jpg"),
              model_type: "kyc"
            )
            puts result.to_h
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using System.Text.Json;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            var result = await
            client.Sessions.AddImagesAsync("11111111-2222-3333-4444-555555555555",
            new SessionsAddImagesParams

            {
                File = FileUpload.FromPath("image.jpg"),
                ModelType = "kyc",
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  responses:
    DocumentProcessingBusy:
      description: >-
        Un nombre trop important de documents est actuellement en cours de
        traitement, cet envoi n'a donc pas été traité : rien n'a été stocké et
        aucune tentative n'a été utilisée. Renvoyez le même fichier après le
        nombre de secondes indiqué dans `Retry-After`. Effectuez le branchement
        en fonction de `code`, et non du texte du message.
      headers:
        Retry-After:
          description: >-
            Nombre de secondes à attendre avant d'envoyer à nouveau la même
            requête.
          schema:
            type: integer
            example: 10
      content:
        application/json:
          schema:
            type: object
            required:
              - detail
              - code
            properties:
              detail:
                type: string
              code:
                type: string
                enum:
                  - document_processing_busy
          example:
            detail: We are busy processing documents. Please try again in a moment.
            code: document_processing_busy
  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.