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

# Schlüsselpersonen für KYB einreichen (API)

> Didit: Vorbereitete Schlüsselpersonen einer KYB-Sitzung melden und für jede Partei, die es benötigt, die KYC-Verifizierung starten.



## OpenAPI

````yaml de/openapi-25.json POST /v3/session/{sessionId}/kyb/parties/submit/
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/submit/:
    post:
      tags:
        - Sessions
      summary: Entwürfe der KYB-Beteiligten übermitteln
      description: >-
        Deklarieren Sie die gespeicherten Entwürfe als Schlüsselpersonen des
        Unternehmens. Dies ist der gehostete Schritt „Schlüsselpersonen“ unter
        Ihrem API-Schlüssel: Didit entscheidet anhand der Rolleneinstellungen
        und Schwellenwerte für die Eigentümerstruktur des Workflows, welche
        Parteien verifiziert werden müssen, erstellt für jede von ihnen eine
        individuelle KYC-Sitzung (oder eine KYB-Subsitzung für einen
        juristischen Eigentümer), versendet die vom Workflow geforderten E-Mails
        und bringt die Sitzung voran. Jede untergeordnete Sitzung wird wie im
        gehosteten Ablauf abgerechnet. Die Entwürfe werden verbraucht. Ein
        erneuter Aufruf nach erfolgreicher Übermittlung ändert nichts und
        antwortet mit `200` mit `already_submitted: true` sowie den bereits
        vorhandenen Parteien. Die Sitzung muss sich im Schritt
        „Schlüsselpersonen“ befinden. Senden Sie die `kyc_session_url` jeder
        Person an diese oder binden Sie sie ein. Erfordert `write:businesses`.
      operationId: post_v3_session_kyb_parties_submit
      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: 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: false
        content:
          application/json:
            schema:
              type: object
              properties:
                locale:
                  type: string
                  maxLength: 10
                  description: >-
                    Gebietsschema zur Übersetzung der Antwort des Schritts, zu
                    dem die Sitzung übergeht.
            example:
              locale: es
      responses:
        '200':
          description: Deklarierte (oder bereits deklarierte) Parteien.
          content:
            application/json:
              schema:
                type: object
                properties:
                  valid:
                    type: boolean
                  next_step:
                    type: string
                    nullable: true
                    description: Schritt, in dem sich die Sitzung befindet.
                  status:
                    type: string
                    description: Status der Unternehmenssitzung.
                  advanced:
                    type: boolean
                    description: >-
                      `true`, wenn dieser Aufruf die Parteien deklariert und die
                      Sitzung weitergeführt hat.
                  already_submitted:
                    type: boolean
                    description: >-
                      `true`, wenn die Parteien durch einen früheren Aufruf
                      deklariert worden waren.
                  kyb_key_people_status:
                    type: string
                  parties:
                    type: array
                    items:
                      $ref: '#/components/schemas/KYBKeyPeopleParty'
              example:
                valid: true
                next_step: FINISHED
                status: In Progress
                advanced: true
                already_submitted: false
                kyb_key_people_status: In Progress
                parties: []
        '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.
        '402':
          description: >-
            Die Organisation hat keinen Credit mehr für die untergeordneten
            Verifizierungssitzungen übrig.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Lesbare Fehlermeldung.
              example:
                detail: Insufficient credits.
        '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 existiert nicht, wurde gelöscht, gehört zu einer anderen
            Anwendung oder liegt außerhalb der Beschränkungen eines Scoped Keys;
            kein Detail unterscheidet diese Fälle.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Lesbare Fehlermeldung.
              example:
                detail: Session not found.
        '409':
          description: >-
            `kyb_no_party_drafts`: Es gibt nichts zu übermitteln.
            `kyb_parties_already_submitted`: Entwürfe wurden hinzugefügt,
            nachdem die Parteien deklariert wurden. `kyb_step_mismatch`: Die
            Sitzung befindet sich nicht im Schritt für Schlüsselpersonen
            (`next_step` benennt den aktuellen Schritt).
            `kyb_session_not_writable`: Die Sitzung ist abgeschlossen.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Lesbare Fehlermeldung.
                  code:
                    type: string
                  next_step:
                    type: string
              example:
                detail: There are no draft parties to submit.
                code: kyb_no_party_drafts
        '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.submit_kyb_parties(
                "33333333-4444-5555-6666-777777777777",
                locale="es",
            )
            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.submitKybParties("33333333-4444-5555-6666-777777777777",
            {
              locale: "es",
            });

            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.SubmitKYBParties(ctx, \"33333333-4444-5555-6666-777777777777\", didit.SessionsSubmitKYBPartiesParams{\n\tLocale: didit.String(\"es\"),\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.SessionsSubmitKybPartiesParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.sessions().submitKybParties("33333333-4444-5555-6666-777777777777",
            SessionsSubmitKybPartiesParams.builder()
                    .locale("es")
                    .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->submitKybParties('33333333-4444-5555-6666-777777777777',
            [
                'locale' => 'es',
            ]);

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

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

            result = didit.sessions.submit_kyb_parties(
              "33333333-4444-5555-6666-777777777777",
              locale: "es"
            )
            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.SubmitKybPartiesAsync("33333333-4444-5555-6666-777777777777",
            new SessionsSubmitKybPartiesParams

            {
                Locale = "es",
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    KYBKeyPeopleParty:
      type: object
      description: >-
        Eine Partei aus den Schlüsselpersonen einer Sitzung zur
        Unternehmensverifizierung (KYB) mit ihrer untergeordneten Verifizierung.
        Dieselbe Partei erscheint in `key_people_checks[].submitted.parties[]`
        der Entscheidung zur Unternehmenssitzung.
      required:
        - uuid
        - entity_type
        - source
        - name
        - is_active
        - is_skipped
        - requires_verification
        - roles
        - kyc_session_deleted
        - kyb_sub_session_deleted
      properties:
        uuid:
          type: string
          format: uuid
          description: Parteien-ID.
        entity_type:
          type: string
          enum:
            - person
            - company
          description: Gibt an, ob die Partei eine Einzelperson oder ein Unternehmen ist.
        source:
          type: string
          enum:
            - REGISTRY
            - USER
          description: >-
            `REGISTRY`: Aus dem Unternehmensregister übernommen. `USER`: Im
            Bildschirm „Schlüsselpersonen“ eingegeben.
        name:
          type: string
          description: Anzeigename der Partei.
        first_name:
          type: string
          nullable: true
          description: Vorname (Personen).
        last_name:
          type: string
          nullable: true
          description: Nachname (Personen).
        company_name:
          type: string
          nullable: true
          description: Unternehmensname (Unternehmensparteien).
        registration_number:
          type: string
          nullable: true
          description: Unternehmensregisternummer (Unternehmensparteien).
        email:
          type: string
          format: email
          nullable: true
          description: E-Mail-Adresse, an die der Verifizierungslink gesendet wird.
        nationality:
          type: string
          nullable: true
          description: Staatsangehörigkeit für Personen, Gründungsland für Unternehmen.
        phone_number:
          type: string
          nullable: true
          description: Für die Partei erfasste Telefonnummer.
        date_of_birth:
          type: string
          format: date
          nullable: true
          description: Geburtsdatum (Personen).
        position:
          type: string
          nullable: true
          description: Freitext-Berufsbezeichnung (Personen).
        custom_fields:
          type: object
          additionalProperties: true
          description: >-
            Vom Workflow definierte benutzerdefinierte Felder, die für die
            Partei erfasst wurden, indiziert nach Feldschlüssel.
        is_active:
          type: boolean
          description: Gibt an, ob die Partei aktiv ist.
        is_skipped:
          type: boolean
          description: >-
            Gibt an, ob die Partei von der Verifizierung ausgenommen ist. Ein
            erneutes Generieren hebt dies auf.
        requires_verification:
          type: boolean
          description: >-
            Gibt an, ob die Rollen- und Eigentümerstruktur-Regeln eine
            Verifizierung für diese Partei vorschreiben.
        roles:
          type: array
          description: Rollen, die die Partei im Unternehmen innehat.
          items:
            type: object
            required:
              - role
              - ownership_percent
              - voting_percent
            properties:
              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: Rollencode.
              ownership_percent:
                type: number
                nullable: true
                description: Eigentumsanteil in Prozent für diese Rolle, sofern bekannt.
              voting_percent:
                type: number
                nullable: true
                description: Stimmrechtsanteil für diese Rolle, sofern bekannt.
        kyc_session_id:
          type: string
          format: uuid
          nullable: true
          description: Untergeordnete individuelle KYC-Sitzung (Personen).
        kyc_session_status:
          type: string
          nullable: true
          enum:
            - Not Started
            - In Progress
            - Approved
            - Declined
            - In Review
            - Expired
            - Abandoned
            - Kyc Expired
            - Resubmitted
            - Awaiting User
            - null
          description: >-
            Status der untergeordneten KYC-Sitzung. Eine gelöschte Sitzung
            behält den Status, den sie zum Zeitpunkt der Löschung hatte.
        kyc_session_url:
          type: string
          format: uri
          nullable: true
          description: >-
            Gehosteter Link der untergeordneten KYC-Sitzung. `null`, wenn keine
            vorhanden ist oder sie gelöscht wurde, sowie bei einem
            berechtigungseingeschränkten API-Schlüssel ohne `sessions: write`.
        kyc_session_deleted:
          type: boolean
          description: >-
            Die untergeordnete KYC-Sitzung wurde gelöscht, sodass sie niemals
            abgeschlossen werden kann.
        kyb_sub_session_id:
          type: string
          format: uuid
          nullable: true
          description: Untergeordnete KYB-Sitzung (Unternehmensparteien).
        kyb_sub_session_status:
          type: string
          nullable: true
          enum:
            - Not Started
            - In Progress
            - Approved
            - Declined
            - In Review
            - Expired
            - Abandoned
            - Kyc Expired
            - Resubmitted
            - Awaiting User
            - null
          description: Status der untergeordneten KYB-Sitzung.
        kyb_sub_session_url:
          type: string
          format: uri
          nullable: true
          description: >-
            Gehosteter Link der untergeordneten KYB-Sitzung, mit denselben
            `null`-Regeln wie bei `kyc_session_url`.
        kyb_sub_session_deleted:
          type: boolean
          description: Unternehmensbezogenes Gegenstück zu `kyc_session_deleted`.
        verification_workflow_type:
          type: string
          nullable: true
          enum:
            - kyc
            - kyb
            - adaptive_age_verification
            - biometric_authentication
            - address_verification
            - questionnaire_verification
            - email_verification
            - phone_verification
            - null
          description: Typ des Workflows, den die untergeordnete Sitzung ausführt.
        verification_workflow_id:
          type: string
          format: uuid
          nullable: true
          description: Workflow, den die untergeordnete Sitzung ausführt.
        verification_workflow_label:
          type: string
          nullable: true
          description: Bezeichnung dieses Workflows.
        verification_workflow_features:
          type: array
          nullable: true
          description: >-
            Funktionen des Workflows der untergeordneten Sitzung mit ihrem
            aktuellen Status.
          items:
            type: object
            required:
              - feature
              - status
            properties:
              feature:
                type: string
                description: Funktionscode, zum Beispiel `ID_VERIFICATION` oder `LIVENESS`.
              status:
                type: string
                description: Funktionsstatus, `Not Finished`, bis sie ausgeführt wird.
        didit_internal_id:
          type: string
          format: uuid
          nullable: true
          description: Didits Kennung der verifizierten Person, sobald bekannt.
  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.