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

# Bilder zu einer Sitzung per API hinzufügen

> Mit Didit eine zusätzliche Bild- oder PDF-Datei an eine abgeschlossene KYC-Sitzung anhängen, z. B. die Rückseite eines Dokuments.

Bilder zu einem Sitzungs-API-Prompt hinzufügen
Prompt in die Zwischenablage kopieren

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

Einfügen in

Die vorsignierten Links in `extra_files` laufen ab. Rufen Sie bei Bedarf später neue Links aus der [Sitzungsentscheidung](https://docs.didit.me/de/sessions-api/retrieve-session.md) ab, wenn Sie die Dateien benötigen. Um stattdessen die aus einem Dokument extrahierten Daten zu korrigieren, verwenden Sie [Sitzungsdaten aktualisieren](https://docs.didit.me/de/sessions-api/update-data.md).


## OpenAPI

````yaml de/openapi-25.json PATCH /v3/session/{sessionId}/add-images/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API für Ausweisverifizierung. Authentifizierung über den x-api-key-Header.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/session/{sessionId}/add-images/:
    patch:
      tags:
        - Sessions
      summary: Bild zu einer Sitzung hinzufügen
      description: >-
        Hängen Sie ein zusätzliches Bild oder eine PDF-Datei an das Ergebnis der
        Ausweisverifizierung (`model_type=kyc`) oder des Adressnachweises
        (`model_type=poa`) einer abgeschlossenen Benutzerverifizierungs-Sitzung
        (KYC) an, beispielsweise außerhalb des Ablaufs erfasste Nachweise. Die
        Sitzung muss den Status `Approved`, `Declined`, `In Review` oder `Kyc
        Expired` haben und das unter `model_type` benannte Ergebnis enthalten;
        Unternehmensverifizierungs-Sitzungen (KYB) werden nicht unterstützt.
        Jeder Aufruf hängt eine Datei an (an das neueste Ergebnis, wenn der
        Schritt mehr als einmal ausgeführt wurde), behält die vorhandenen
        Dateien bei und erfasst einen `FILE_ADDED`-Eintrag im
        Sitzungsaktivitätsprotokoll; der Upload sendet keinen Webhook und ändert
        den Sitzungsstatus nicht. Die Datei wird beim Upload komprimiert und in
        `extra_files` der Sitzungsentscheidung zurückgegeben. Dieser Endpoint
        ist auf 10 Anfragen pro Minute und API-Schlüssel begrenzt. Ein
        berechtigungsbeschränkter API-Schlüssel erfordert `sessions: write`, und
        ohne `media: read` erhält er die `extra_files`-Links als `null`.
      operationId: patch_v3_session_add_images
      parameters:
        - name: sessionId
          in: path
          required: true
          description: >-
            UUID der Sitzung zur Benutzerverifizierung (KYC), zu der die Datei
            hinzugefügt werden soll (die von `POST /v3/session/` zurückgegebene
            `session_id`). Eine Sitzungs-ID der Unternehmensverifizierung (KYB)
            gibt `404` zurück.
          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: >-
                    Das Bild oder PDF. Zulässige Dateiendungen: `jpg`, `jpeg`,
                    `png`, `webp`, `tiff`, `pdf`. Maximal 15 MB beim Hochladen;
                    die Datei wird anschließend komprimiert und mit `400`
                    abgelehnt, falls sie weiterhin größer als 2 MB (2.097.152
                    Bytes) ist. Leere Dateien werden abgelehnt.
                model_type:
                  type: string
                  enum:
                    - kyc
                    - poa
                  description: >-
                    `kyc` fügt die Datei dem Ergebnis der Ausweisverifizierung
                    hinzu, `poa` dem Ergebnis des Adressnachweises.
                  example: kyc
                file_password:
                  type: string
                  description: >-
                    Passwort einer verschlüsselten PDF-Datei. Ohne dieses oder
                    mit einem falschen Passwort gibt eine verschlüsselte
                    PDF-Datei `400` zurück.
            example:
              file: (binary)
              model_type: kyc
      responses:
        '200':
          description: >-
            Datei hinzugefügt. Gibt jede zusätzliche Datei dieses Ergebnisses
            zurück, einschließlich der neuen.
          content:
            application/json:
              schema:
                type: object
                required:
                  - extra_files
                properties:
                  extra_files:
                    type: array
                    description: >-
                      Kurzlebige vorsignierte Links zu allen zusätzlichen
                      Dateien des durch `model_type` benannten Ergebnisses,
                      älteste zuerst. Jeder Link ist `null` für einen
                      berechtigungseingeschränkten API-Schlüssel ohne `media:
                      read`. Rufen Sie frische Links später aus der
                      Sitzungsentscheidung ab.
                    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: >-
            Validierungsfehler. Feldfehler werden als `{"<field>":
            ["<message>"]}` zurückgegeben; Fehler bei verschlüsselten PDFs als
            `{"detail": "..."}`.
          content:
            application/json:
              examples:
                Missing file:
                  summary: Kein Dateiteil im Formular
                  value:
                    file:
                      - No file was submitted.
                Missing model_type:
                  summary: model_type weggelassen
                  value:
                    model_type:
                      - This field is required.
                Invalid model_type:
                  summary: model_type ist nicht kyc oder poa
                  value:
                    model_type:
                      - '"passport" is not a valid choice.'
                File too large:
                  summary: Upload mit mehr als 15 MB
                  value:
                    file:
                      - File size should not exceed 15 MB
                Too large after compression:
                  summary: Nach Komprimierung immer noch über 2 MB
                  value:
                    file:
                      - File size is too big. Max allowed size is 2097152 bytes.
                Encrypted PDF:
                  summary: Verschlüsseltes PDF ohne file_password
                  value:
                    detail: >-
                      The PDF is encrypted. Please upload a decrypted PDF or a
                      photo instead.
                Wrong PDF password:
                  summary: file_password öffnet das PDF nicht
                  value:
                    detail: >-
                      The PDF password is incorrect. Please provide the correct
                      password.
        '401':
          description: >-
            Der API-Schlüssel mit eingeschränktem Geltungsbereich ist
            abgelaufen. Dies ist der einzige Fall, der `401` zurückgibt: Ein
            fehlender, ungültiger oder widerrufener Schlüssel gibt `403` zurück.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Lesbare Fehlermeldung.
              examples:
                Expired key:
                  summary: Das Ablaufdatum des Schlüssels ist überschritten
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            Authentifizierungs- oder Autorisierungsfehler. Ein fehlender
            Schlüssel gibt `403` zurück, ebenso wie der Schlüssel einer anderen
            Anwendung, ein berechtigungsbeschränkter Schlüssel ohne die für
            diesen Endpoint erforderliche Berechtigung sowie eine Anfrage von
            außerhalb der IP-Allowlist des Schlüssels; ein falscher,
            widerrufener oder abgelaufener Schlüssel gibt `401` zurück.
            Unterscheiden Sie diese anhand von `detail`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Lesbare Fehlermeldung.
              examples:
                Missing or invalid credentials:
                  summary: >-
                    Kein x-api-key-Header vorhanden oder die Validierung des
                    Schlüssels ist fehlgeschlagen
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Other application:
                  summary: >-
                    Ein gültiger Schlüssel, der zu einer anderen Anwendung als
                    die Sitzung gehört
                  value:
                    detail: You do not have permission to perform this action.
                Scoped key without sessions write:
                  summary: >-
                    Dem Schlüssel mit eingeschränktem Berechtigungsumfang fehlt
                    sessions: write
                  value:
                    detail: This API key has no write access to sessions.
                IP not allowed:
                  summary: Anfrage von außerhalb der IP-Allowlist des Schlüssels
                  value:
                    detail: This API key can't be used from this IP address.
        '404':
          description: >-
            Die Sitzung existiert nicht, wurde gelöscht oder liegt außerhalb der
            Beschränkungen eines Scoped Keys; sie ist eine KYB-Sitzung oder
            nicht im Status `Approved`, `Declined`, `In Review` oder `Kyc
            Expired`; oder sie enthält kein Ergebnis für den angeforderten
            `model_type` (wird vor der Validierung der Datei geprüft). Die
            Sitzungssuche erfolgt vor der Prüfung der Anmeldedaten, sodass eine
            unbekannte `sessionId` auch ohne gültigen Schlüssel `404`
            zurückgibt.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Lesbare Fehlermeldung.
              examples:
                Unknown session:
                  summary: >-
                    Es existiert keine Sitzung mit dieser ID oder sie wurde
                    gelöscht
                  value:
                    detail: Not found.
                Outside key limits:
                  summary: >-
                    Die Sitzung liegt außerhalb der Beschränkungen eines Scoped
                    Keys hinsichtlich des Workflows oder der Beschränkung auf
                    genehmigte Sitzungen
                  value:
                    detail: Session not found.
                Not eligible:
                  summary: Sitzung noch nicht abgeschlossen oder eine KYB-Sitzungs-ID
                  value:
                    detail: No Session matches the given query.
                No ID verification:
                  summary: model_type=kyc bei einer Sitzung ohne Ausweisverifizierung
                  value:
                    detail: The session does not have KYC data.
                No Proof of Address:
                  summary: model_type=poa bei einer Sitzung ohne Adressnachweis
                  value:
                    detail: The session does not have POA data.
        '429':
          description: >-
            Rate-Limit überschritten: 10 Anfragen zum Hinzufügen von Bildern pro
            Minute pro API-Schlüssel (abgelehnte Anfragen zählen ebenfalls). Das
            gemeinsame Budget von 300 Schreibanfragen pro Minute gilt ebenfalls.
            Warten Sie `Retry-After` Sekunden vor einem Wiederholungsversuch;
            die `X-RateLimit-*`-Header zeigen das Budget an.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Lesbare Fehlermeldung.
              examples:
                Rate limited:
                  summary: Budget für die aktuelle Minute erschöpft
                  value:
                    detail: >-
                      Session add-images rate limit exceeded. You can make up to
                      10 requests per minute.
          headers:
            Retry-After:
              description: >-
                Sekunden, die vor einem Wiederholungsversuch gewartet werden
                müssen.
              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: >-
        Zurzeit werden zu viele Dokumente verarbeitet, daher wurde dieser Upload
        nicht verarbeitet: Es wurde nichts gespeichert und kein Versuch
        verbraucht. Senden Sie dieselbe Datei nach der in `Retry-After`
        angegebenen Anzahl an Sekunden erneut. Verzweigen Sie anhand von `code`,
        nicht anhand des Nachrichtentexts.
      headers:
        Retry-After:
          description: >-
            Sekunden, die gewartet werden müssen, bevor dieselbe Anfrage erneut
            gesendet wird.
          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: >-
        Der API-Schlüssel Ihrer Anwendung, aus Entwickler -> API-Schlüssel in
        der Business Console. Der Primärschlüssel hat Vollzugriff. Ein benannter
        Schlüssel kann im Geltungsbereich eingeschränkt werden: keine, Lese-
        oder Schreibberechtigung pro Ressource, beschränkt auf bestimmte
        Workflows oder genehmigte Sitzungen, auf eine Liste von IP-Adressen und
        auf ein Ablaufdatum. 401 bedeutet, dass der Schlüssel falsch, widerrufen
        oder abgelaufen ist; 403 bedeutet, dass kein Schlüssel gesendet wurde,
        der Schlüssel keinen Zugriff auf diese Ressource oder Aktion hat oder
        die Anfrage von einer Adresse außerhalb seiner IP-Liste stammte; 404 bei
        einer Sitzungsroute bedeutet, dass die Sitzung außerhalb der Workflows
        oder Status des Schlüssels liegt. Ein Schlüssel ohne Medienzugriff
        erhält Bild-, Video- und PDF-URLs als null, und ein Schlüssel ohne
        Schreibberechtigung für Sitzungen erhält Sitzungslinks und Token als
        null. Siehe https://docs.didit.me/console/api-keys.

````

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