> ## 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: отправка ключевых лиц через API

> Укажите подготовленных ключевых лиц сессии KYB в Didit и запустите KYC-верификацию каждой стороны, которой она необходима.



## OpenAPI

````yaml ru/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 верификации личности. Аутентификация выполняется с помощью заголовка
    x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/session/{sessionId}/kyb/parties/submit/:
    post:
      tags:
        - Sessions
      summary: Отправить черновики сторон KYB
      description: >-
        Объявить сохранённые черновики ключевыми лицами компании. Это
        размещённый шаг «Ключевые лица» с использованием вашего API-ключа: Didit
        на основе настроек ролей и порогов владения в сценарии определяет, какие
        стороны должны пройти верификацию, создаёт одну индивидуальную
        KYC-сессию (или подсессию KYB для корпоративного владельца) для каждого
        из них, отправляет электронные письма согласно сценарию и переводит
        сессию на следующий этап. Каждая дочерняя сессия тарифицируется так же,
        как в размещённом сценарии. Черновики расходуются. Повторный вызов после
        успешной отправки ничего не меняет и возвращает ответ `200` с
        `already_submitted: true` и уже существующими сторонами. Сессия должна
        находиться на шаге «Ключевые лица». Отправьте каждому человеку его
        `kyc_session_url` или встройте его. Требуется разрешение
        `write:businesses`.
      operationId: post_v3_session_kyb_parties_submit
      parameters:
        - name: sessionId
          in: path
          required: true
          description: >-
            UUID сессии Верификации бизнеса (KYB). Он должен принадлежать
            приложению используемого API-ключа.
          schema:
            type: string
            format: uuid
            example: 33333333-4444-5555-6666-777777777777
        - name: node_id
          in: query
          required: false
          description: >-
            Узел сценария для шага KYB. Требуется, только если в сценарии
            несколько KYB-узлов; по умолчанию Didit использует собственный узел
            сессии.
          schema:
            type: string
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                locale:
                  type: string
                  maxLength: 10
                  description: >-
                    Локаль (locale), используемая для перевода ответа шага, к
                    которому переходит сессия.
            example:
              locale: es
      responses:
        '200':
          description: Стороны, заявленные (или уже заявленные).
          content:
            application/json:
              schema:
                type: object
                properties:
                  valid:
                    type: boolean
                  next_step:
                    type: string
                    nullable: true
                    description: Шаг, на котором находится сессия.
                  status:
                    type: string
                    description: Статус сессии компании.
                  advanced:
                    type: boolean
                    description: >-
                      `true`, если этот вызов объявил стороны и перевёл сессию
                      на следующий этап.
                  already_submitted:
                    type: boolean
                    description: >-
                      `true`, если стороны были объявлены ранее в рамках другого
                      вызова.
                  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: >-
            Срок действия API-ключа с ограниченной областью действия истёк. Это
            единственный случай, возвращающий `401`: отсутствующий,
            недействительный или отозванный ключ возвращает `403`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Понятное сообщение об ошибке.
              examples:
                Expired key:
                  summary: Срок действия ключа истёк
                  value:
                    detail: This API key has expired.
        '402':
          description: У организации не осталось кредитов для дочерних сессий верификации.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Понятное сообщение об ошибке.
              example:
                detail: Insufficient credits.
        '403':
          description: >-
            Ошибка аутентификации или авторизации. Отсутствующий ключ возвращает
            `403`, как и ключ другого приложения, ключ с ограниченной областью
            действия без необходимого для этого endpoint разрешения, а также
            запрос не из разрешённого списка IP-адресов ключа; неверный,
            отозванный или истекший ключ возвращает `401`. Различайте их по полю
            `detail`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Понятное сообщение об ошибке.
              examples:
                Missing or invalid credentials:
                  summary: >-
                    Заголовок x-api-key отсутствует, либо ключ не прошёл
                    валидацию
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Other application:
                  summary: >-
                    Действительный ключ, принадлежащий приложению, отличному от
                    приложения сессии
                  value:
                    detail: You do not have permission to perform this action.
                Scoped key without decisions write:
                  summary: >-
                    У ключа с ограниченной областью действия отсутствует
                    разрешение decisions: write
                  value:
                    detail: This API key has no write access to decisions.
                IP not allowed:
                  summary: Запрос с IP-адреса вне списка разрешённых IP ключа
                  value:
                    detail: This API key can't be used from this IP address.
        '404':
          description: >-
            Сессия не существует, была удалена, принадлежит другому приложению
            или находится за пределами ограничений ключа с ограниченным
            доступом; подробности не позволяют различить эти случаи.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Понятное сообщение об ошибке.
              example:
                detail: Session not found.
        '409':
          description: >-
            `kyb_no_party_drafts`: нечего отправлять.
            `kyb_parties_already_submitted`: черновики были добавлены после
            объявления сторон. `kyb_step_mismatch`: сессия находится не на шаге
            «Ключевые лица» (`next_step` указывает текущий шаг).
            `kyb_session_not_writable`: сессия завершена.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Понятное сообщение об ошибке.
                  code:
                    type: string
                  next_step:
                    type: string
              example:
                detail: There are no draft parties to submit.
                code: kyb_no_party_drafts
        '429':
          description: >-
            Превышен лимит запросов: 300 запросов на запись (POST, PATCH,
            DELETE) в минуту на один API-ключ. Подождите указанное в
            `Retry-After` количество секунд перед повторной попыткой; заголовки
            `X-RateLimit-*` показывают доступный лимит.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Понятное сообщение об ошибке.
              examples:
                Rate limited:
                  summary: Бюджет на текущую минуту исчерпан
                  value:
                    detail: >-
                      Write request rate limit exceeded. You can make up to 300
                      requests per minute.
          headers:
            Retry-After:
              description: Количество секунд ожидания перед повторной попыткой.
              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: >-
        Сторона из числа ключевых лиц сессии Верификации бизнеса (KYB) с её
        дочерней верификацией. Та же сторона отображается в
        `key_people_checks[].submitted.parties[]` решения по сессии компании.
      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: Идентификатор стороны.
        entity_type:
          type: string
          enum:
            - person
            - company
          description: Является ли сторона физическим лицом или компанией.
        source:
          type: string
          enum:
            - REGISTRY
            - USER
          description: >-
            `REGISTRY`: получено из реестра компаний. `USER`: введено на экране
            «Ключевые лица».
        name:
          type: string
          description: Отображаемое имя стороны.
        first_name:
          type: string
          nullable: true
          description: Имя (физические лица).
        last_name:
          type: string
          nullable: true
          description: Фамилия (физические лица).
        company_name:
          type: string
          nullable: true
          description: Название компании (стороны-компании).
        registration_number:
          type: string
          nullable: true
          description: Регистрационный номер компании (стороны-компании).
        email:
          type: string
          format: email
          nullable: true
          description: >-
            Адрес электронной почты, на который отправляется ссылка на
            верификацию.
        nationality:
          type: string
          nullable: true
          description: Гражданство для физических лиц, страна регистрации для компаний.
        phone_number:
          type: string
          nullable: true
          description: Номер телефона, полученный для стороны.
        date_of_birth:
          type: string
          format: date
          nullable: true
          description: Дата рождения (физические лица).
        position:
          type: string
          nullable: true
          description: Название должности в виде произвольного текста (физические лица).
        custom_fields:
          type: object
          additionalProperties: true
          description: >-
            Пользовательские поля, определённые сценарием и собранные для
            стороны, с ключами, соответствующими ключам полей.
        is_active:
          type: boolean
          description: Является ли сторона активной.
        is_skipped:
          type: boolean
          description: >-
            Освобождена ли сторона от верификации. Повторная генерация
            сбрасывает это значение.
        requires_verification:
          type: boolean
          description: >-
            Требуют ли правила, касающиеся роли и структуры владения, проведения
            верификации для этой стороны.
        roles:
          type: array
          description: Роли, которые сторона занимает в компании.
          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: Код роли.
              ownership_percent:
                type: number
                nullable: true
                description: Процент владения для этой роли, если известен.
              voting_percent:
                type: number
                nullable: true
                description: Доля прав голоса для этой роли в процентах, если известна.
        kyc_session_id:
          type: string
          format: uuid
          nullable: true
          description: Дочерняя индивидуальная сессия KYC (физические лица).
        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: >-
            Статус дочерней KYC-сессии. Удалённая сессия сохраняет статус,
            который у неё был на момент удаления.
        kyc_session_url:
          type: string
          format: uri
          nullable: true
          description: >-
            Размещённая ссылка дочерней сессии KYC. `null`, если ссылка
            отсутствует или была удалена, а также для ограниченного API-ключа
            без права `sessions: write`.
        kyc_session_deleted:
          type: boolean
          description: >-
            Дочерняя сессия KYC была удалена, поэтому она никогда не сможет
            завершиться.
        kyb_sub_session_id:
          type: string
          format: uuid
          nullable: true
          description: Дочерняя сессия KYB (стороны, являющиеся компаниями).
        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: Статус дочерней KYB-сессии.
        kyb_sub_session_url:
          type: string
          format: uri
          nullable: true
          description: >-
            Размещённая ссылка дочерней сессии KYB с теми же правилами для
            `null`, что и у `kyc_session_url`.
        kyb_sub_session_deleted:
          type: boolean
          description: Аналог `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: Тип сценария, который запускает дочерняя сессия.
        verification_workflow_id:
          type: string
          format: uuid
          nullable: true
          description: Сценарий, который выполняет дочерняя сессия.
        verification_workflow_label:
          type: string
          nullable: true
          description: Метка этого сценария.
        verification_workflow_features:
          type: array
          nullable: true
          description: Функции сценария дочерней сессии с их текущим статусом.
          items:
            type: object
            required:
              - feature
              - status
            properties:
              feature:
                type: string
                description: Код функции, например `ID_VERIFICATION` или `LIVENESS`.
              status:
                type: string
                description: Статус функции, `Not Finished` до ее выполнения.
        didit_internal_id:
          type: string
          format: uuid
          nullable: true
          description: Идентификатор верифицированного лица в Didit, когда он известен.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        API-ключ вашего приложения из раздела «Разработчикам» -> «API-ключи» в
        Business Console. Основной ключ имеет полный доступ. Именованный ключ
        может иметь ограниченную область действия: без доступа, чтение или
        запись для каждого ресурса, ограничение определенными сценариями или
        одобренными сессиями, списком IP-адресов и сроком действия. 401
        означает, что ключ неверен, отозван или его срок действия истек; 403
        означает, что ключ не был передан, у ключа нет доступа к этому ресурсу
        или действию, либо запрос поступил с адреса вне его списка IP-адресов;
        404 на маршруте сессии означает, что сессия не входит в сценарии или
        статусы ключа. Ключ без доступа к медиа получает URL изображений, видео
        и PDF как null, а ключ без прав на запись сессий получает ссылки на
        сессии и токены как null. См. https://docs.didit.me/console/api-keys.

````

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