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

# KYB-Schlüsselperson-Entwurf bearbeiten – API

> Ändert die Felder eines Schlüsselperson-Entwurfs einer KYB-Sitzung in Didit. Der zusammengeführte Datensatz wird insgesamt validiert.



## OpenAPI

````yaml de/openapi-25.json PATCH /v3/session/{sessionId}/kyb/parties/drafts/{draftId}/
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}/kyb/parties/drafts/{draftId}/:
    patch:
      tags:
        - Sessions
      summary: Entwurf einer KYB-Partei bearbeiten
      description: >-
        Felder des Entwurfs einer Partei ändern. Die Bearbeitung wird mit dem
        gespeicherten Entwurf zusammengeführt und die zusammengeführte Partei
        als Ganzes validiert, sodass eine Bearbeitung, die die Partei
        unvollständig hinterlassen würde, abgelehnt wird. Das Ändern von
        `first_name` oder `last_name` ersetzt den gespeicherten vollständigen
        Namen. Erfordert `write:businesses`.
      operationId: patch_v3_session_kyb_party_draft
      parameters:
        - name: sessionId
          in: path
          required: true
          description: >-
            UUID der Sitzung zur Unternehmensverifizierung (KYB). Sie muss zu
            der Anwendung des API-Schlüssels gehören.
          schema:
            type: string
            format: uuid
            example: 33333333-4444-5555-6666-777777777777
        - name: draftId
          in: path
          required: true
          description: >-
            UUID des Entwurfs der Partei (`draft_id`, die bei der Erstellung
            zurückgegeben wurde).
          schema:
            type: string
            format: uuid
            example: 5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d
        - name: node_id
          in: query
          required: false
          description: >-
            Workflow-Knoten des KYB-Schritts. Nur erforderlich, wenn der
            Workflow mehr als einen KYB-Knoten enthält; standardmäßig verwendet
            Didit den sitzungseigenen Knoten.
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              description: >-
                Jede beliebige Teilmenge der Parteifelder. Die Bearbeitung wird
                mit dem gespeicherten Entwurf zusammengeführt und die
                zusammengeführte Partei als Ganzes validiert, sodass ein
                Entwurf, der vor einer Bearbeitung übermittelt werden konnte,
                auch danach noch übermittelt werden kann.
              properties:
                entity_type:
                  type: string
                  enum:
                    - person
                    - company
                  description: >-
                    Gibt an, ob die Partei eine Einzelperson oder ein
                    Unternehmen ist.
                full_name:
                  type: string
                  maxLength: 255
                  description: >-
                    Vollständiger Name einer Person. Übergeben Sie diesen oder
                    `first_name` und `last_name`.
                first_name:
                  type: string
                  maxLength: 128
                last_name:
                  type: string
                  maxLength: 128
                role:
                  type: string
                  enum:
                    - director
                    - non_executive_director
                    - secretary
                    - chairman
                    - ubo
                    - shareholder
                    - representative
                    - founder
                    - legal_advisor
                    - authorized_signatory
                    - trustee
                    - beneficiary
                    - settlor
                    - protector
                    - company_officer
                    - investor
                    - other
                  description: >-
                    Rolle, die die Partei innehat. Austauschbar mit `roles`;
                    wenn beide übermittelt werden, werden sie zusammengeführt.
                roles:
                  type: array
                  items:
                    type: string
                    enum:
                      - director
                      - non_executive_director
                      - secretary
                      - chairman
                      - ubo
                      - shareholder
                      - representative
                      - founder
                      - legal_advisor
                      - authorized_signatory
                      - trustee
                      - beneficiary
                      - settlor
                      - protector
                      - company_officer
                      - investor
                      - other
                  description: >-
                    Jede Rolle, die die Partei innehat. Eine Person benötigt
                    mindestens eine Rolle (hier oder in `role`).
                position:
                  type: string
                  maxLength: 128
                  description: Berufsbezeichnung einer Person.
                date_of_birth:
                  type: string
                  format: date
                  nullable: true
                company_name:
                  type: string
                  maxLength: 255
                  description: >-
                    Name einer Unternehmenspartei. Erforderlich, wenn
                    `entity_type` `company` ist.
                registration_number:
                  type: string
                  maxLength: 100
                  description: Registernummer einer Unternehmenspartei.
                email:
                  type: string
                  format: email
                  description: >-
                    Wohin der Verifizierungslink gesendet wird. Erforderlich,
                    wenn die Partei die Verifizierung abschließen muss, was von
                    den Rolleneinstellungen und
                    Eigentümerstruktur-Schwellenwerten des Workflows abhängt.
                ownership_percent:
                  type: number
                  nullable: true
                  description: Anteil am Unternehmen, den die Partei besitzt.
                nationality:
                  type: string
                  maxLength: 100
                  description: >-
                    Staatsangehörigkeit einer Person oder Gründungsland eines
                    Unternehmens. Erforderlich für jede Partei.
                phone_number:
                  type: string
                  maxLength: 32
                custom_fields:
                  type: object
                  additionalProperties: true
                  description: Vom Workflow definierte Zusatzfelder.
                skip_verification:
                  type: boolean
                  default: false
                  description: >-
                    Anfordern, die Verifizierung dieser Partei zu überspringen.
                    Wird nur berücksichtigt, wenn die Rolle der Partei das
                    Überspringen in den Einstellungen für Schlüsselpersonen des
                    Workflows zulässt.
            example:
              ownership_percent: 55
      responses:
        '200':
          description: Entwurf aktualisiert.
          content:
            application/json:
              schema:
                type: object
                required:
                  - draft_id
                  - created_at
                  - updated_at
                  - party
                properties:
                  draft_id:
                    type: string
                    format: uuid
                  created_at:
                    type: string
                    format: date-time
                  updated_at:
                    type: string
                    format: date-time
                  party:
                    type: object
                    required:
                      - entity_type
                      - nationality
                    properties:
                      entity_type:
                        type: string
                        enum:
                          - person
                          - company
                        description: >-
                          Gibt an, ob die Partei eine Einzelperson oder ein
                          Unternehmen ist.
                      full_name:
                        type: string
                        maxLength: 255
                        description: >-
                          Vollständiger Name einer Person. Übergeben Sie diesen
                          oder `first_name` und `last_name`.
                      first_name:
                        type: string
                        maxLength: 128
                      last_name:
                        type: string
                        maxLength: 128
                      role:
                        type: string
                        enum:
                          - director
                          - non_executive_director
                          - secretary
                          - chairman
                          - ubo
                          - shareholder
                          - representative
                          - founder
                          - legal_advisor
                          - authorized_signatory
                          - trustee
                          - beneficiary
                          - settlor
                          - protector
                          - company_officer
                          - investor
                          - other
                        description: >-
                          Rolle, die die Partei innehat. Austauschbar mit
                          `roles`; wenn beide übermittelt werden, werden sie
                          zusammengeführt.
                      roles:
                        type: array
                        items:
                          type: string
                          enum:
                            - director
                            - non_executive_director
                            - secretary
                            - chairman
                            - ubo
                            - shareholder
                            - representative
                            - founder
                            - legal_advisor
                            - authorized_signatory
                            - trustee
                            - beneficiary
                            - settlor
                            - protector
                            - company_officer
                            - investor
                            - other
                        description: >-
                          Jede Rolle, die die Partei innehat. Eine Person
                          benötigt mindestens eine Rolle (hier oder in `role`).
                      position:
                        type: string
                        maxLength: 128
                        description: Berufsbezeichnung einer Person.
                      date_of_birth:
                        type: string
                        format: date
                        nullable: true
                      company_name:
                        type: string
                        maxLength: 255
                        description: >-
                          Name einer Unternehmenspartei. Erforderlich, wenn
                          `entity_type` `company` ist.
                      registration_number:
                        type: string
                        maxLength: 100
                        description: Registernummer einer Unternehmenspartei.
                      email:
                        type: string
                        format: email
                        description: >-
                          Wohin der Verifizierungslink gesendet wird.
                          Erforderlich, wenn die Partei die Verifizierung
                          abschließen muss, was von den Rolleneinstellungen und
                          Eigentümerstruktur-Schwellenwerten des Workflows
                          abhängt.
                      ownership_percent:
                        type: number
                        nullable: true
                        description: Anteil am Unternehmen, den die Partei besitzt.
                      nationality:
                        type: string
                        maxLength: 100
                        description: >-
                          Staatsangehörigkeit einer Person oder Gründungsland
                          eines Unternehmens. Erforderlich für jede Partei.
                      phone_number:
                        type: string
                        maxLength: 32
                      custom_fields:
                        type: object
                        additionalProperties: true
                        description: Vom Workflow definierte Zusatzfelder.
                      skip_verification:
                        type: boolean
                        default: false
                        description: >-
                          Anfordern, die Verifizierung dieser Partei zu
                          überspringen. Wird nur berücksichtigt, wenn die Rolle
                          der Partei das Überspringen in den Einstellungen für
                          Schlüsselpersonen des Workflows zulässt.
              example:
                draft_id: 5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d
                created_at: '2026-10-31T10:00:00Z'
                updated_at: '2026-10-31T10:00:00Z'
                party:
                  entity_type: person
                  first_name: Ana
                  last_name: Lopez
                  roles:
                    - ubo
                    - director
                  ownership_percent: 55
                  nationality: MEX
                  email: ana.lopez@example.com
                  date_of_birth: '1984-06-12'
        '400':
          description: Die zusammengeführte Partei ist ungültig.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Lesbare Fehlermeldung.
              example:
                non_field_errors:
                  - Person parties require at least one role.
        '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 decisions write:
                  summary: >-
                    Dem Schlüssel mit eingeschränktem Berechtigungsumfang fehlt
                    decisions: write
                  value:
                    detail: This API key has no write access to decisions.
                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 oder der Entwurf existiert nicht, oder die Sitzung liegt
            außerhalb der Anwendung des Schlüssels bzw. der Beschränkungen eines
            Scoped Keys.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Lesbare Fehlermeldung.
              example:
                detail: Session not found.
        '409':
          description: Die Sitzung ist abgeschlossen (`kyb_session_not_writable`).
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Lesbare Fehlermeldung.
                  code:
                    type: string
              example:
                detail: This verification session is no longer accepting changes.
                code: kyb_session_not_writable
        '429':
          description: >-
            Rate-Limit überschritten: 300 Schreibanfragen (POST, PATCH, DELETE)
            pro Minute pro API-Schlüssel. 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: >-
                      Write request rate limit exceeded. You can make up to 300
                      requests per minute.
          headers:
            Retry-After:
              description: >-
                Sekunden, die vor einem Wiederholungsversuch gewartet werden
                müssen.
              schema:
                type: integer
                minimum: 1
                example: 30
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.sessions.update_kyb_party_draft(
                "33333333-4444-5555-6666-777777777777",
                "5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d",
                ownership_percent=55.0,
            )
            print(result)
        - lang: javascript
          label: Node.js
          source: |-
            import Didit from "@didit-protocol/sdk-node";

            // Reads DIDIT_API_KEY.
            const didit = new Didit();

            const result = await didit.sessions.updateKybPartyDraft(
              "33333333-4444-5555-6666-777777777777",
              "5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d",
              {
                ownership_percent: 55.0,
              },
            );
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.UpdateKYBPartyDraft(ctx, \"33333333-4444-5555-6666-777777777777\", \"5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d\", didit.SessionsUpdateKYBPartyDraftParams{\n\tOwnershipPercent: didit.Float(55.0),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import me.didit.Didit;

            import me.didit.types.SessionsUpdateKybPartyDraftParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.sessions().updateKybPartyDraft("33333333-4444-5555-6666-777777777777",
            "5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d",
            SessionsUpdateKybPartyDraftParams.builder()
                    .ownershipPercent(55.0)
                    .build());
            System.out.println(result);
        - lang: php
          label: PHP
          source: >-
            <?php


            require 'vendor/autoload.php';


            use Didit\DiditClient;


            // Reads DIDIT_API_KEY.

            $didit = new DiditClient();


            $result =
            $didit->sessions->updateKybPartyDraft('33333333-4444-5555-6666-777777777777',
            '5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d', [
                'ownership_percent' => 55.0,
            ]);

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

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

            result = didit.sessions.update_kyb_party_draft(
              "33333333-4444-5555-6666-777777777777",
              "5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d",
              ownership_percent: 55.0
            )
            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.UpdateKybPartyDraftAsync("33333333-4444-5555-6666-777777777777",
            "5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d", new
            SessionsUpdateKybPartyDraftParams

            {
                OwnershipPercent = 55.0,
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  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.