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

# API реестра акционеров KYB: проверка структуры владения

> POST /v3/kyb/shareholders/ с kyb_response_id из поиска по реестру возвращает профиль компании, её руководителей и прямых акционеров в Didit.

Используйте этот endpoint после того, как `POST /v3/kyb/search/` вернёт список компаний-кандидатов, если вам нужны **прямые акционеры** в дополнение к профилю Lite.

Оплата взимается по цене Shareholders для страны ([цены по странам](https://docs.didit.me/ru/getting-started/kyb-registry-pricing.md)). Если реестр не содержит записи об акционерах компании или страна вообще не предоставляет данные о владении, вместо этого доставляется и оплачивается профиль Lite: `registry_tier_delivered` имеет значение `basic`, а `registry_ownership_status` имеет значение `unavailable`, либо `not_held`, если источник данных о владении сообщил, что вообще не располагает данными об этой компании ([статус владения](https://docs.didit.me/ru/standalone-apis/kyb-registry.md#статус-владения)).

Когда отчёт ещё готовится или раздел о владении ещё не получен из реестра, endpoint возвращает `202 Accepted`, `kyb_registry.fetch_status: "pending"`, `kyb_registry.registry_ownership_status: "pending"` и `registry_tier_delivered: null`.
Сохраните возвращённый `request_id` и опрашивайте `GET /v3/session/{request_id}/decision/`, пока `registry_checks[0].company.fetch_status` не станет `resolved`.
Didit автоматически завершает отчёт, находящийся в обработке, и взимает оплату за предоставленный уровень, когда отчёт готов.
Не повторяйте запрос на покупку, пока он находится в ожидании: каждый новый POST создаёт отдельный запрос.

Доступно только в v3. `POST /v2/kyb/select/` и `POST /v3/kyb/select/` сохраняют свой контракт и цену.


## OpenAPI

````yaml ru/openapi-25.json POST /v3/kyb/shareholders/
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/kyb/shareholders/:
    post:
      tags:
        - Standalone APIs
      summary: Компания в реестре KYB с акционерами (отдельная)
      description: >-
        Получить профиль Lite **плюс прямых акционеров** (физических и
        юридических лиц с их диапазонами владения) для одного кандидата,
        возвращённого `POST /v3/kyb/search/`.


        **Связка с поиском.** Передайте `kyb_response_id` кандидата в точности
        так, как он был возвращён поиском того же приложения. Выполняйте поиск
        на том уровне, который планируете приобрести (`tier` в `POST
        /v3/kyb/search/`), поскольку поиск выполняется по цепочке реестров,
        обслуживающей этот уровень, а пустой поиск Lite не является
        доказательством того, что компании нет в реестре. Если данные о
        структуре владения в этой стране находятся в другом реестре, Didit
        находит компанию там заново по регистрационному номеру без
        дополнительной платы.


        **Биллинг.** Оплата списывается по цене Shareholders для соответствующей
        страны: см. [Цены на реестры
        KYB](/ru/getting-started/kyb-registry-pricing). Если в реестре
        отсутствует запись об акционерах компании (или в стране вообще не
        предоставляются данные о структуре владения), вместо этого доставляется
        и тарифицируется профиль Lite: считывайте `registry_tier_delivered` и
        `registry_ownership_status`. Баланс проверяется на соответствие цене
        Shareholders перед любым вызовом к реестру (`403` при нехватке средств).


        **Доступность.** Только v3. Каждый вызов создаёт сессию компании (её
        идентификатором является `request_id`).


        **Отчёты в обработке.** Если отчёт всё ещё формируется или раздел со
        структурой владения ещё не получен из реестра, endpoint возвращает 202
        Accepted, kyb_registry.fetch_status=pending,
        kyb_registry.registry_ownership_status=pending и
        registry_tier_delivered=null. Сохраните request_id и вызывайте GET
        /v3/session/{request_id}/decision/, пока значение
        registry_checks[0].company.fetch_status не будет определено. Didit
        формирует отчёт автоматически и списывает оплату за доставленный
        уровень, как только он будет готов. Не повторяйте покупку, пока она
        находится в ожидании; каждый новый POST создаёт отдельный запрос.
      operationId: post_v3_kyb_shareholders
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/KYBRegistryCandidateRequest'
            example:
              kyb_response_id: 69aeeb95febb0f1704042259
              vendor_data: company-1234
      responses:
        '200':
          description: >-
            Отчёт о компании возвращён и тарифицирован по предоставленному
            уровню. Отчёты о структуре владения, которые всё ещё
            подготавливаются, могут возвращать 202; сохраняйте request_id для
            получения сохранённого решения.
          content:
            application/json:
              schema:
                type: object
                properties:
                  request_id:
                    type: string
                    format: uuid
                    description: >-
                      Идентификатор бизнес-сессии, созданной для этого запроса
                      данных. Сохранённая запись (видимая в консоли) продолжает
                      обновляться, если реестр завершит обработку после отправки
                      ответа.
                  registry_tier_requested:
                    type: string
                    enum:
                      - basic
                      - shareholders
                      - ubo
                    description: >-
                      Уровень, который продает этот endpoint: `basic` (Lite) для
                      select, `shareholders`, `ubo`.
                  registry_tier_delivered:
                    type: string
                    enum:
                      - basic
                      - shareholders
                      - ubo
                      - null
                    description: >-
                      Уровень, фактически предоставленный и включенный в счёт.
                      Ниже запрошенного, если реестры страны не содержат данных
                      о структуре владения или в реестре нет записей о структуре
                      владения для этой компании.
                    nullable: true
                  kyb_registry:
                    type: object
                    description: Полный профиль компании из реестра.
                    properties:
                      uuid:
                        type: string
                        format: uuid
                        description: Идентификатор Didit для этой записи компании.
                      node_id:
                        type: string
                        example: feature_kyb_registry
                      status:
                        type: string
                        enum:
                          - Not Finished
                          - Approved
                          - Declined
                          - In Review
                        description: >-
                          Оценка Didit по проверке в реестре (например, `In
                          Review`, если компания не активна в реестре или данные
                          о структуре владения не удалось определить).
                      registry_status:
                        type: string
                        nullable: true
                        enum:
                          - active
                          - dissolved
                          - deregistered
                          - see full details
                          - authorised
                          - appointed representative
                          - unauthorised
                          - inactive
                          - no longer authorised
                          - closed
                          - struck off
                          - null
                        description: >-
                          Нормализованный статус компании согласно данным
                          реестра.
                      data_resolved:
                        type: boolean
                        description: >-
                          `true`, когда реестр вернул полный профиль. `false`,
                          если реестр всё ещё обрабатывал запрос после опроса —
                          сохранённая запись будет автоматически дополнена, как
                          только реестр завершит обработку.
                      company_name:
                        type: string
                        example: Tesco PLC
                      registration_number:
                        type: string
                        nullable: true
                        example: '00445790'
                      country_code:
                        type: string
                        description: ISO 3166-1 alpha-2.
                        example: GB
                      region:
                        type: string
                        nullable: true
                        description: >-
                          Код подразделения, если реестр региональный (например,
                          `CA` для `US-CA`); в противном случае пусто.
                      company_type:
                        type: string
                        nullable: true
                        example: Public Limited Company
                      incorporation_date:
                        type: string
                        format: date
                        nullable: true
                        example: '1947-11-27'
                      registered_address:
                        type: string
                        nullable: true
                        example: >-
                          Tesco House, Shire Park, Kestrel Way, Welwyn Garden
                          City, United Kingdom, AL7 1GA
                      tax_number:
                        type: string
                        nullable: true
                        example: GB412 8925 93
                      risk_level:
                        type: string
                        nullable: true
                        description: Уровень риска по данным реестра, если доступен.
                      verification_status:
                        type: string
                        enum:
                          - verified
                          - failed
                          - unknown
                        nullable: true
                        description: >-
                          Статус верификации между юрисдикциями: `verified`,
                          когда статус в реестре подтверждает правовой статус
                          (`active`), `failed`, когда реестр указывает, что
                          компания ликвидирована или не действует (например,
                          `dissolved`), в противном случае `unknown`. `null` для
                          компании, полученной не из реестра, а также пока выбор
                          остаётся в статусе `pending`.
                      is_from_registry:
                        type: boolean
                        description: >-
                          Всегда `true` для этого endpoint — профиль был получен
                          из официального реестра.
                      fetch_status:
                        type: string
                        enum:
                          - pending
                          - resolved
                        description: >-
                          Жизненный цикл получения данных из реестра.
                          Дублируется полем `data_resolved`.
                      alternative_names:
                        type: string
                        nullable: true
                        description: >-
                          Альтернативные, торговые, прежние или наименования
                          компании на языке оригинала в виде текста, если они
                          указаны.
                      nature_of_business:
                        type: string
                        nullable: true
                        description: >-
                          Описание деятельности или код классификации, если они
                          указаны.
                      registered_capital:
                        type: string
                        nullable: true
                      registered_capital_amount:
                        type: string
                        nullable: true
                        description: Десятичная сумма в виде строки, если передана.
                      registered_capital_currency:
                        type: string
                        nullable: true
                        description: Код ISO 4217, если указан.
                      website:
                        type: string
                        nullable: true
                        example: https://www.tesco.com/
                      email:
                        type: string
                        nullable: true
                        example: customer.service@tesco.co.uk
                      phone:
                        type: string
                        nullable: true
                        example: '03301231688'
                      legal_entity_identifier:
                        type: string
                        nullable: true
                        description: LEI, если указан.
                      location_of_registration:
                        type: string
                        nullable: true
                        description: >-
                          Реестр или юрисдикция регистрации компании, если
                          указаны.
                      vat_number:
                        type: string
                        nullable: true
                        description: >-
                          Номер плательщика НДС в ЕС, если он был собран на
                          размещённом шаге реестра или изменён впоследствии. При
                          выборе он обычно ещё не задан — проверка НДС и
                          налогового номера выполняется, когда конечный
                          пользователь отправляет шаг реестра в размещённом
                          процессе.
                      vat_validation_status:
                        type: string
                        enum:
                          - valid
                          - invalid
                          - format_valid
                          - invalid_format
                          - could_not_validate
                          - not_applicable
                        description: >-
                          Результат валидации номера плательщика НДС (VAT) или,
                          при его отсутствии, `tax_number` при отправке в
                          реестр. `valid` / `invalid`: определяется официальным
                          реестром страны (EU VIES, Норвегия, Швейцария,
                          Бразилия, Колумбия, Коста-Рика, Эквадор, Парагвай;
                          Польша также по внутреннему реестру НДС).
                          `format_valid` / `invalid_format`: определяется
                          правилами формата и контрольных цифр страны, если
                          реестр недоступен для запроса. `could_not_validate`:
                          реестр был недоступен. `not_applicable`: номер
                          отсутствует, в стране нет реестра или правил либо это
                          сессия в песочнице.
                      vat_validated_number:
                        type: string
                        nullable: true
                        description: >-
                          Номер, который был проверен, в том виде, в каком он
                          известен источнику (например, номер VAT, полученный из
                          французского SIREN или нидерландского RSIN). `null`,
                          если проверка не выполнялась.
                      vat_validation_source:
                        type: string
                        nullable: true
                        enum:
                          - eu_vies
                          - pl_vat_white_list
                          - no_brreg
                          - ch_uid_register
                          - br_receita_federal
                          - co_rues
                          - cr_hacienda
                          - ec_sri
                          - py_dnit
                          - format_rules
                          - null
                        description: >-
                          Источник, определивший `vat_validation_status`:
                          официальный реестр или `format_rules`. `null`, если
                          проверка не проводилась.
                      vat_validated_name:
                        type: string
                        nullable: true
                        description: >-
                          Имя, зарегистрированное в источнике, подтвердившем
                          номер, если источник его раскрывает. Указывается
                          только со статусом `valid`.
                      vat_validated_address:
                        type: string
                        nullable: true
                        description: >-
                          Адрес, зарегистрированный в источнике, выполнившем
                          проверку номера, если он раскрывает его. Заполняется,
                          только когда статус равен `valid`.
                      vat_checked_at:
                        type: string
                        format: date-time
                        nullable: true
                        description: >-
                          Временная метка проверки. `null`, если проверка не
                          запускалась.
                      financial_summary:
                        type: object
                        nullable: true
                        description: >-
                          Сведения об акциях и капитале по данным реестра
                          (валюта, общее количество акций, классы акций), если
                          доступны.
                      officers:
                        type: array
                        items:
                          type: object
                          properties:
                            uuid:
                              type: string
                              format: uuid
                            name:
                              type: string
                              example: MELISSA BETHELL
                            designation:
                              type: string
                              nullable: true
                              description: >-
                                Необработанное наименование должности из реестра
                                (например, `Director`, `Secretary`).
                            role:
                              type: string
                              description: >-
                                Нормализованная роль, полученная из должности.
                                Полный набор модели из 17 значений; парсинг
                                реестра на этом endpoint обычно возвращает
                                director, non_executive_director, secretary,
                                chairman или company_officer.
                              enum:
                                - director
                                - non_executive_director
                                - secretary
                                - chairman
                                - ubo
                                - shareholder
                                - representative
                                - founder
                                - legal_advisor
                                - authorized_signatory
                                - trustee
                                - beneficiary
                                - company_officer
                                - settlor
                                - protector
                                - investor
                                - other
                            nationality:
                              type: string
                              nullable: true
                            is_active:
                              type: boolean
                              description: >-
                                `false`, когда реестр отмечает назначение как
                                завершённое из-за отставки.
                            kyc_status:
                              type: string
                              nullable: true
                              enum:
                                - Approved
                                - Declined
                                - Pending
                                - null
                              description: >-
                                Статус связанной KYC-сессии, если она была
                                запущена для этого должностного лица. В
                                противном случае `null`.
                            kyc_session_url:
                              type: string
                              nullable: true
                              description: >-
                                URL верификации связанной сессии KYC, если
                                таковая существует.
                            first_name:
                              type: string
                              nullable: true
                              description: >-
                                Имя, если оно явно указано в реестре; не
                                выводится из полного имени.
                            last_name:
                              type: string
                              nullable: true
                              description: Фамилия, если она явно указана в реестре.
                            address:
                              type: string
                              nullable: true
                              description: Адрес должностного лица, указанный в реестре.
                            appointment_date:
                              type: string
                              nullable: true
                              description: Дата назначения должностного лица.
                              format: date
                            termination_date:
                              type: string
                              nullable: true
                              description: Дата окончания полномочий, если указана.
                              format: date
                            date_of_birth:
                              type: string
                              nullable: true
                              description: >-
                                Полная дата рождения по данным реестра. Null,
                                если известны только год или месяц рождения.
                              format: date
                            date_of_birth_year:
                              type: integer
                              nullable: true
                              minimum: 1
                              maximum: 9999
                              description: >-
                                Год рождения по данным реестра, в том числе
                                когда полная дата недоступна.
                            date_of_birth_month:
                              type: integer
                              nullable: true
                              minimum: 1
                              maximum: 12
                              description: >-
                                Месяц рождения по данным реестра. Null, если
                                известен только год.
                        description: >-
                          Директора, секретари и другие должностные лица,
                          извлечённые из реестра.
                      beneficial_owners:
                        type: array
                        items:
                          type: object
                          properties:
                            uuid:
                              type: string
                              format: uuid
                            name:
                              type: string
                            first_name:
                              type: string
                              nullable: true
                            last_name:
                              type: string
                              nullable: true
                            entity_type:
                              type: string
                              enum:
                                - person
                                - company
                              description: >-
                                Является ли владелец физическим или юридическим
                                лицом.
                            roles:
                              type: array
                              items:
                                type: string
                              description: >-
                                Нормализованные роли (например, `ubo`,
                                `shareholder`).
                            ownership_min_shares:
                              type: string
                              nullable: true
                              description: >-
                                Нижняя граница диапазона владения, указанная в
                                реестре (например, `25%`).
                            ownership_max_shares:
                              type: string
                              nullable: true
                              description: >-
                                Верхняя граница диапазона доли владения согласно
                                реестру.
                            is_active:
                              type: boolean
                            kyc_status:
                              type: string
                              nullable: true
                              enum:
                                - Approved
                                - Declined
                                - Pending
                                - null
                            kyc_session_url:
                              type: string
                              nullable: true
                            effective_ownership_percent:
                              type: number
                              nullable: true
                              description: >-
                                Распознанный процент владения (верхняя граница,
                                с переходом на нижнюю границу при отсутствии).
                            company_name:
                              type: string
                              nullable: true
                            registration_number:
                              type: string
                              nullable: true
                            country_of_birth:
                              type: string
                              nullable: true
                            email:
                              type: string
                              nullable: true
                            nationality:
                              type: string
                              nullable: true
                            designation:
                              type: string
                              nullable: true
                            voting_min_shares:
                              type: string
                              nullable: true
                            voting_max_shares:
                              type: string
                              nullable: true
                            date_of_birth:
                              type: string
                              nullable: true
                              description: Полная дата рождения, если указана.
                              format: date
                            appointment_date:
                              type: string
                              nullable: true
                              description: Дата назначения, если указана.
                              format: date
                            shareholding:
                              $ref: '#/components/schemas/KYBRegistryShareholding'
                        description: >-
                          Бенефициарные владельцы / лица, осуществляющие
                          значительный контроль, извлечённые из реестра. Может
                          быть пустым, если реестр не раскрывает структуру
                          владения.
                      addresses:
                        type: array
                        nullable: true
                        description: >-
                          Каждый адрес, указанный в реестре, в едином
                          каноническом формате. Null, если реестр не указывает
                          ни одного.
                        items:
                          $ref: '#/components/schemas/KYBRegistryAddress'
                      industries:
                        type: array
                        nullable: true
                        description: >-
                          Виды деятельности, к которым реестр относит компанию,
                          в единой канонической форме. Null, если ни один вид не
                          указан.
                        items:
                          $ref: '#/components/schemas/KYBRegistryIndustry'
                      accounts:
                        type: object
                        nullable: true
                        additionalProperties: true
                        description: >-
                          Даты подачи документов в реестр, если доступны. Для
                          годовой отчётности и общих собраний используются
                          last_annual_return_date и last_agm_date; они
                          отличаются от финансовой отчётности.
                      registry_data:
                        $ref: '#/components/schemas/KYBRegistryData'
                      user_provided_data:
                        type: object
                        nullable: true
                        description: >-
                          Всегда `null` на этом endpoint (используется в
                          размещённом сценарии KYB, когда конечные пользователи
                          редактируют данные из реестра).
                      confirmed_by_user_at:
                        type: string
                        format: date-time
                        nullable: true
                        description: Всегда `null` на этом endpoint.
                      last_console_edit_at:
                        type: string
                        format: date-time
                        nullable: true
                        description: >-
                          Задаётся, когда проверяющий из консоли позже
                          редактирует запись.
                      is_editable:
                        type: boolean
                        description: >-
                          Можно ли по-прежнему редактировать данные из реестра
                          компаний в размещённом сценарии или консоли.
                      registry_tier_delivered:
                        type: string
                        enum:
                          - basic
                          - shareholders
                          - ubo
                          - null
                        description: >-
                          То же, что и `registry_tier_delivered` верхнего
                          уровня.
                        nullable: true
                      registry_ownership_status:
                        type: string
                        nullable: true
                        enum:
                          - not_requested
                          - delivered
                          - not_held
                          - unavailable
                          - pending
                          - null
                        description: >-
                          `delivered`, когда данные о структуре владения
                          получены; `not_held`, когда реестр структуры владения
                          ответил и в нём нет этой компании (см.
                          `registry_data.ownership_error`); `unavailable`, когда
                          был запрошен уровень со структурой владения, но в
                          реестре не было данных по этой компании или к нему не
                          удалось обратиться (см.
                          `registry_data.ownership_error`); `pending`, когда
                          раздел структуры владения ещё не получен из реестра и
                          Didit всё ещё формирует его; `not_requested` для
                          уровня Lite.
                      ownership:
                        $ref: '#/components/schemas/KYBRegistryOwnership'
                      registry_tier:
                        type: string
                        nullable: true
                        description: >-
                          Уровень реестра, запрошенный сценарием: `basic`,
                          `shareholders` или `ubo`. Также указан в
                          `ownership.tier_requested`.
                      registry_monitoring:
                        type: object
                        nullable: true
                        description: >-
                          Последний мониторинг реестра для компании или `null`,
                          если он отсутствует.
                        properties:
                          uuid:
                            type: string
                            format: uuid
                          status:
                            type: string
                          unavailable_reason:
                            type: string
                            nullable: true
                          enrolled_at:
                            type: string
                            format: date-time
                            nullable: true
                          cancelled_at:
                            type: string
                            format: date-time
                            nullable: true
                          last_bill_date:
                            type: string
                            format: date
                            nullable: true
                          next_bill_date:
                            type: string
                            format: date
                            nullable: true
                          last_event_at:
                            type: string
                            format: date-time
                            nullable: true
                          events_count:
                            type: integer
                          watched_fields:
                            description: Поля компании, отслеживаемые мониторингом.
                  vendor_data:
                    type: string
                    nullable: true
                    description: Эхо отправленных вами `vendor_data`.
                  metadata:
                    type: object
                    nullable: true
                    description: Эхо-значение переданного вами `metadata`.
                  created_at:
                    type: string
                    format: date-time
              examples:
                Resolved company:
                  summary: >-
                    Полный профиль из реестра (список должностных лиц сокращён
                    для краткости)
                  value:
                    request_id: 9d4f2c7a-1b3e-4a5c-8d6f-0e9a8b7c6d5e
                    kyb_registry:
                      uuid: f1e2d3c4-b5a6-4789-9c0d-1e2f3a4b5c6d
                      node_id: feature_kyb_registry
                      status: In Review
                      registry_status: active
                      data_resolved: true
                      company_name: Tesco PLC
                      registration_number: '00445790'
                      country_code: GB
                      region: ''
                      company_type: Public Limited Company
                      incorporation_date: '1947-11-27'
                      registered_address: >-
                        Tesco House, Shire Park, Kestrel Way, Welwyn Garden
                        City, United Kingdom, AL7 1GA
                      tax_number: GB412 8925 93
                      risk_level: low risk
                      verification_status: verified
                      is_from_registry: true
                      fetch_status: resolved
                      alternative_names: TESCO STORES (HOLDINGS) PUBLIC LIMITED COMPANY
                      nature_of_business: null
                      registered_capital: null
                      registered_capital_amount: null
                      registered_capital_currency: null
                      website: https://www.tesco.com/
                      email: customer.service@tesco.co.uk
                      phone: '03301231688'
                      legal_entity_identifier: null
                      location_of_registration: null
                      financial_summary:
                        currency: Pound (£)
                        total_number_of_shares: '8174378721'
                        meta_detail:
                          Class_Of_Share: Ordinary
                      officers:
                        - uuid: a1b2c3d4-e5f6-4789-9a0b-1c2d3e4f5a6b
                          name: CHRISTOPHER JON TAYLOR
                          designation: Secretary
                          role: secretary
                          nationality: null
                          is_active: true
                          kyc_status: null
                          kyc_session_url: null
                        - uuid: b2c3d4e5-f6a7-4890-8b1c-2d3e4f5a6b7c
                          name: MELISSA BETHELL
                          designation: Director
                          role: director
                          nationality: British
                          is_active: true
                          kyc_status: null
                          kyc_session_url: null
                      beneficial_owners: []
                      addresses:
                        - address: >-
                            Tesco House, Shire Park, Kestrel Way, Welwyn Garden
                            City, United Kingdom, AL7 1GA
                          type: legal_entity_registry_address
                          description: registered office address
                      industries: null
                      accounts:
                        last_account: 26 February 2025
                        next_account: 26 February 2026
                        due_by_date: 26 August 2026
                      registry_data: {}
                      user_provided_data: null
                      confirmed_by_user_at: null
                      last_console_edit_at: null
                      is_editable: true
                    vendor_data: company-1234
                    metadata: null
                    created_at: '2026-06-11T10:45:00.000000+00:00'
        '202':
          description: >-
            Отчёт принят и всё ещё обрабатывается. Когда отчёт всё ещё
            подготавливается, endpoint возвращает 202 Accepted,
            kyb_registry.fetch_status=pending и registry_tier_delivered=null.
            Сохраните request_id и опрашивайте GET
            /v3/session/{request_id}/decision/ до тех пор, пока
            registry_checks[0].company.fetch_status не перейдёт в финальный
            статус. Didit автоматически завершает подготовку отчёта и списывает
            плату за предоставленный уровень, как только он готов. Не повторяйте
            покупку, пока запрос находится в обработке; каждый новый POST
            создаёт отдельный запрос.
          content:
            application/json:
              schema:
                $ref: a04fb86e-56ff-49ac-a632-7a50394ba8e3
              examples:
                Pending (registry still resolving):
                  summary: >-
                    Отчёт о структуре владения всё ещё формируется; получить
                    сохранённое решение
                  value:
                    request_id: 9d4f2c7a-1b3e-4a5c-8d6f-0e9a8b7c6d5e
                    kyb_registry:
                      uuid: 7c0a4f7e-2b1d-4f6a-9c3e-8d5b2a1f0e9d
                      node_id: feature_kyb_registry
                      status: Not Finished
                      registry_status: null
                      data_resolved: false
                      company_name: Example Holdings Limited
                      registration_number: '12345678'
                      country_code: HK
                      region: null
                      company_type: null
                      incorporation_date: null
                      registered_address: null
                      tax_number: null
                      risk_level: null
                      verification_status: null
                      is_from_registry: true
                      fetch_status: pending
                      alternative_names: null
                      nature_of_business: null
                      registered_capital: null
                      registered_capital_amount: null
                      registered_capital_currency: null
                      website: null
                      email: null
                      phone: null
                      legal_entity_identifier: null
                      location_of_registration: null
                      financial_summary: {}
                      officers: []
                      beneficial_owners: []
                      addresses: null
                      industries: null
                      accounts: null
                      registry_data: {}
                      user_provided_data: null
                      confirmed_by_user_at: null
                      last_console_edit_at: null
                      is_editable: true
                      registry_tier_delivered: null
                      registry_ownership_status: pending
                    vendor_data: company-1234
                    metadata: null
                    created_at: '2026-06-11T10:45:00.000000+00:00'
                    registry_tier_delivered: null
                    registry_tier_requested: shareholders
        '400':
          description: >-
            Ошибка валидации. Проблемы на уровне полей используют стандартную
            структуру DRF.
          content:
            application/json:
              examples:
                Missing kyb_response_id:
                  summary: Поле `kyb_response_id` обязательно
                  value:
                    kyb_response_id:
                      - This field is required.
                save_api_request=false rejected:
                  summary: Выбранные значения всегда сохраняются
                  value:
                    save_api_request:
                      - >-
                        KYB registry select must be saved so billing and
                        retrieval can be tracked.
        '403':
          description: >-
            В доступе отказано. Возвращается, если заголовок `x-api-key`
            отсутствует, а также если баланс вызывающей организации не покрывает
            вызов; неверный, отозванный или истекший ключ возвращает `401`.
            Отсутствующий ключ возвращает `403` с `{"detail": ...}`; неверный,
            отозванный или истекший ключ возвращает `401`. При нехватке кредитов
            возвращается `403` с `{"error": ...}` до начала любого скрининга или
            вызова провайдера.
          content:
            application/json:
              examples:
                Missing or invalid API key:
                  summary: >-
                    Отсутствует заголовок `x-api-key`, либо ключ
                    недействителен/отозван
                  value:
                    detail: You do not have permission to perform this action.
                Not enough credits:
                  summary: Баланс организации недостаточен для совершения вызова
                  value:
                    error: >-
                      You don't have enough credits to perform this request.
                      Please top up at https://business.didit.me
        '429':
          description: >-
            Превышен лимит запросов. Endpoint'ы POST/PATCH/DELETE делят общий
            лимит в 300 запросов на запись в минуту на один API-ключ (для
            создания транзакций и отправки событий действует отдельный лимит в
            600). Ответ содержит заголовки `X-RateLimit-Limit`,
            `X-RateLimit-Remaining`, `X-RateLimit-Reset` и `Retry-After`.
          content:
            application/json:
              examples:
                Write rate limit exceeded:
                  summary: Более 300 запросов на запись в текущую минуту
                  value:
                    detail: >-
                      Write request rate limit exceeded. You can make up to 300
                      requests per minute.
              schema:
                type: object
                properties:
                  detail:
                    type: string
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: |-
            curl -X POST https://verification.didit.me/v3/kyb/shareholders/ \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{
                "kyb_response_id": "69aeeb95febb0f1704042259",
                "vendor_data": "company-1234"
              }'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.kyb.list_shareholders(
                kyb_response_id="69aeeb95febb0f1704042259",
                vendor_data="company-1234",
            )
            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.kyb.listShareholders({
              kyb_response_id: "69aeeb95febb0f1704042259",
              vendor_data: "company-1234",
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.KYB.ListShareholders(ctx, didit.KYBRegistryCandidateRequest{\n\tKYBResponseID: \"69aeeb95febb0f1704042259\",\n\tVendorData:    didit.String(\"company-1234\"),\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.KYBRegistryCandidateRequest;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.kyb().listShareholders(KYBRegistryCandidateRequest.builder()
                    .kybResponseId("69aeeb95febb0f1704042259")
                    .vendorData("company-1234")
                    .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->kyb->listShareholders([
                'kyb_response_id' => '69aeeb95febb0f1704042259',
                'vendor_data' => 'company-1234',
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            result = didit.kyb.list_shareholders(
              kyb_response_id: "69aeeb95febb0f1704042259",
              vendor_data: "company-1234"
            )
            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.Kyb.ListShareholdersAsync(new
            KYBRegistryCandidateRequest

            {
                KybResponseId = "69aeeb95febb0f1704042259",
                VendorData = "company-1234",
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    KYBRegistryCandidateRequest:
      type: object
      required:
        - kyb_response_id
      properties:
        kyb_response_id:
          type: string
          maxLength: 1024
          description: >-
            Идентификатор кандидата (handle) из `POST /v3/kyb/search/`
            (`kyb_registry.companies[].kyb_response_id`). Является временным:
            используйте его вскоре после запроса, который его вернул.
            Идентификаторы могут быть длинными, поэтому сохраняйте и отправляйте
            значение в точности так, как оно возвращено, не обрезая его и не
            делая предположений о длине.
          example: 69aeeb95febb0f1704042259
        vendor_data:
          type: string
          description: >-
            Ваш идентификатор этой компании; возвращается в ответе и сохраняется
            вместе с сессией компании.
        metadata:
          type: object
          nullable: true
          description: >-
            JSON в свободной форме, сохраняемый с бизнес-сессией и возвращаемый
            в ответе.
        save_api_request:
          type: boolean
          default: true
          description: >-
            Должно быть `true` (по умолчанию). Выборки из реестра KYB всегда
            сохраняются для отслеживания биллинга и получения данных; `false`
            возвращает `400`.
    KYBRegistryShareholding:
      type: object
      nullable: true
      description: >-
        Информация о владении владельца в едином формате для любой страны и
        источника реестра. Null, если в реестре нет сведений о владении.
        Диапазон (например, 25-50% для британского PSC) не считается долей:
        `percentage` равен null, а диапазон сохраняется в `ownership_min_shares`
        / `ownership_max_shares`.
      properties:
        share_class:
          type: string
          nullable: true
          description: Класс или тип акций в том виде, как он указан в реестре.
        number_of_shares:
          type: number
          nullable: true
          description: Количество акций во владении.
        currency:
          type: string
          nullable: true
          description: Валюта по стандарту ISO 4217 для приведённых ниже значений.
        nominal_value:
          type: number
          nullable: true
          description: Номинальная стоимость одной акции.
        total_value:
          type: number
          nullable: true
          description: Общая стоимость актива.
        percentage:
          type: number
          nullable: true
          description: Точная доля в процентах с точностью до четырёх знаков после запятой.
      required:
        - share_class
        - number_of_shares
        - currency
        - nominal_value
        - total_value
        - percentage
    KYBRegistryAddress:
      type: object
      description: >-
        Адрес, указанный реестром, в едином формате для всех стран и источников
        реестров. Каждый ключ присутствует всегда; часть, которую реестр не
        публикует, имеет значение null.
      properties:
        type:
          type: string
          nullable: true
          description: >-
            Тип адреса в нижнем регистре: `registered` для юридического адреса;
            другие типы указываются так, как их называет реестр (например,
            `postal`, `office`). `null`, когда реестр не указывает назначение
            адреса.
        address:
          type: string
          description: Полный адрес одной строкой. Всегда присутствует в каждом адресе.
        street:
          type: string
          nullable: true
          description: Улица и номер дома.
        city:
          type: string
          nullable: true
          description: Город или населённый пункт.
        postal_code:
          type: string
          nullable: true
          description: Почтовый индекс.
        region:
          type: string
          nullable: true
          description: Регион, штат или провинция.
        country_code:
          type: string
          nullable: true
          description: Двухбуквенный код страны ISO 3166-1 alpha-2.
        description:
          type: string
          nullable: true
          description: Собственное обозначение адреса в реестре, если оно предоставлено.
      required:
        - type
        - address
        - street
        - city
        - postal_code
        - region
        - country_code
        - description
    KYBRegistryIndustry:
      type: object
      description: >-
        Вид деятельности, к которому реестр относит компанию, в едином формате
        для всех стран и источников реестров.
      properties:
        code:
          type: string
          nullable: true
          description: >-
            Код деятельности в том виде, в каком он указан в реестре (например,
            `73110`).
        description:
          type: string
          nullable: true
          description: Название вида деятельности, если оно публикуется реестром.
        scheme:
          type: string
          nullable: true
          description: >-
            Система классификации, одно название на систему независимо от
            сообщившего её источника: `UK SIC 2007`, `US SIC`, `NACE Rev. 2`,
            `NACE Rev. 2.1`, `NAF Rev. 2`, `CNAE`, `SBI`, `NOGA 2008`, `CAE Rev.
            4`, `Canada SIC 1977`; другие национальные системы сохраняют
            собственное название реестра. Null, если реестр не указывает
            систему.
        is_primary:
          type: boolean
          description: >-
            True для основного вида деятельности компании. Ровно одна запись
            является основной, если список не пуст.
      required:
        - code
        - description
        - scheme
        - is_primary
    KYBRegistryData:
      type: object
      nullable: true
      description: >-
        Нормализованные данные реестра Didit по компании: результат проверки
        структуры владения (`ownership_error`, `section_errors`,
        `ubo_resolution`, `lite_enrichment`), исправления, внесённые с помощью
        update-data, и факты реестра, для которых нет отдельного поля. Никогда
        не содержит исходную запись источника реестра. Каждый ключ опционален и
        присутствует только тогда, когда у компании есть для него значение;
        могут добавляться новые ключи. Используйте канонические поля
        (`addresses`, `industries`, `ownership`,
        `beneficial_owners[].shareholding`) для всего, что они охватывают.
      properties:
        company_name:
          type: string
          description: Название компании, исправленное в панели управления.
        registration_number:
          type: string
          description: >-
            Регистрационный номер, указанный в реестре или в исправлении через
            консоль.
        country_code:
          type: string
          description: >-
            Страна регистрации, указанная в реестре или при корректировке в
            консоли.
        region:
          type: string
          description: Регион или штат регистрации.
        incorporation_date:
          type: string
          description: Дата регистрации (ISO 8601).
        registration_date:
          type: string
          description: >-
            Дата регистрации (ISO 8601), если реестр указывает её отдельно от
            даты инкорпорации.
        dissolution_date:
          type: string
          description: Дата ликвидации (ISO 8601), если она указана в реестре.
        tax_number:
          type: string
          description: Налоговый номер.
        vat_number:
          type: string
          description: Номер плательщика НДС.
        legal_address:
          type: string
          description: Юридический адрес с исправлениями из консоли.
        registered_address:
          type: string
          description: Зарегистрированный адрес согласно данным реестра.
        company_type:
          type: string
          description: Организационно-правовая форма.
        registry_status:
          type: string
          description: Статус компании в реестре.
        verification_status:
          type: string
          description: Статус верификации.
        alternative_names:
          type: string
          description: >-
            Другие наименования, под которыми компания ведет или вела
            коммерческую деятельность.
        nature_of_business:
          type: string
          description: Описание деятельности.
        registered_capital:
          type: string
          description: Зарегистрированный капитал в том виде, как он напечатан.
        registered_capital_amount:
          type: string
          description: Размер зарегистрированного капитала в виде десятичной строки.
        registered_capital_currency:
          type: string
          description: Валюта зарегистрированного капитала (ISO 4217).
        website:
          type: string
          description: Веб-сайт.
        email:
          type: string
          description: Контактный email.
        phone:
          type: string
          description: Контактный телефон.
        legal_entity_identifier:
          type: string
          description: Идентификатор юридического лица (LEI).
        location_of_registration:
          type: string
          description: Место регистрации.
        control_scheme:
          type: string
          description: Схема корпоративного управления, если она раскрывается реестром.
        ownership_error:
          type: string
          enum:
            - no_owners_on_record
            - no_natural_person_owner
            - ownership_section_unavailable
            - company_not_found
            - ambiguous_company_match
            - missing_registration_number
            - entity_type_not_covered
            - provider_unavailable
            - other
          description: >-
            Причина, по которой запрошенный уровень структуры владения не был
            предоставлен, в тех же кодах, что и `ownership.unavailable_reason`.
            `no_owners_on_record` (реестр ответил и не указал ни одного
            владельца) и `ownership_section_unavailable` (реестр не вернул
            раздел структуры владения) представляют собой разные результаты
            проверки.
        section_errors:
          type: object
          description: >-
            Разделы, которые реестр не вернул, с ключами, соответствующими
            разделам (`officers`, `shareholders`, `group_structure`). Указанный
            здесь раздел не был возвращён: пустой список рядом с ним ничего не
            сообщает о компании.
          additionalProperties:
            $ref: '#/components/schemas/KYBRegistrySectionError'
        ubo_resolution:
          $ref: '#/components/schemas/KYBRegistryUboResolution'
        lite_enrichment:
          $ref: '#/components/schemas/KYBRegistryLiteEnrichment'
        registry_metadata:
          type: object
          additionalProperties:
            oneOf:
              - type: string
              - type: number
              - type: boolean
          description: >-
            Собственные поля реестра для компании с ключами, как они названы в
            реестре, в виде простых значений (устаревшие записи). Включены
            только поля, проверенные как факты из реестра.
        registry_sources:
          type: array
          description: >-
            Официальные реестры, из которых была получена запись (устаревшие
            записи). Другие источники не указываются.
          items:
            $ref: '#/components/schemas/KYBRegistrySource'
        previous_names:
          type: array
          items:
            type: string
          description: >-
            Названия, под которыми компания была зарегистрирована ранее
            (исторические записи).
        parent_companies:
          type: array
          items:
            type: string
          description: Материнские компании, указанные в реестре (устаревшие записи).
        documents_available:
          type: integer
          description: >-
            Количество документов компании, доступных в реестре (устаревшие
            записи).
    KYBRegistryOwnership:
      type: object
      description: >-
        Результат уровня структуры владения (акционеры / UBO) в едином формате
        для любой страны и любого реестра.
      properties:
        status:
          type: string
          nullable: true
          enum:
            - not_requested
            - pending
            - delivered
            - not_held
            - unavailable
            - null
          description: >-
            `delivered`, когда реестр опубликовал структуру владения;
            `not_held`, когда реестр структуры владения ответил и в нём вовсе
            нет этой компании (см. `unavailable_reason`); `unavailable`, когда
            он не предоставил данные о структуре владения по любой другой
            причине (см. `unavailable_reason`); `pending`, пока реестр всё ещё
            запрашивает их; `not_requested` для уровня Basic.
        tier_requested:
          type: string
          nullable: true
          enum:
            - basic
            - shareholders
            - ubo
            - null
          description: Уровень, заказанный сценарием.
        tier_delivered:
          type: string
          nullable: true
          enum:
            - basic
            - shareholders
            - ubo
            - null
          description: >-
            Уровень, предоставленный реестром (и включенный в счёт). Запрос UBO,
            на который получены данные только о прямых акционерах, имеет
            значение `shareholders`.
        unavailable_reason:
          type: string
          nullable: true
          enum:
            - no_owners_on_record
            - no_natural_person_owner
            - ownership_section_unavailable
            - company_not_found
            - ambiguous_company_match
            - missing_registration_number
            - entity_type_not_covered
            - provider_unavailable
            - other
            - null
          description: >-
            Причина, по которой запрошенный уровень структуры владения не был
            предоставлен. Имеет значение null, если `status` не равен
            `unavailable` или `pending`.
        direct_ownership_complete:
          type: boolean
          nullable: true
          description: >-
            True, когда заявленные доли прямых акционеров в сумме составляют
            100% (с точностью до одного процентного пункта из-за округления);
            false, если нет; null, если структура владения не была передана или
            доля не указана.
        unresolved:
          type: array
          description: >-
            Части структуры владения, которые реестр не смог определить,
            например отсутствие сведений о структуре группы выше прямых
            владельцев.
          items:
            type: object
            properties:
              reason:
                type: string
              section:
                type: string
                nullable: true
      required:
        - status
        - tier_requested
        - tier_delivered
        - unavailable_reason
        - direct_ownership_complete
        - unresolved
    KYBRegistrySectionError:
      type: object
      description: Раздел, который реестр не вернул.
      properties:
        status_code:
          type: integer
          nullable: true
          description: Статус, возвращённый реестром для данного раздела.
      required:
        - status_code
    KYBRegistryUboResolution:
      type: object
      description: Как уровень UBO обходил цепочку владения выше компании.
      properties:
        parent_chain:
          type: array
          description: >-
            Корпоративные материнские структуры от конечной материнской компании
            до самой компании.
          items:
            $ref: '#/components/schemas/KYBRegistryGroupCompany'
        subsidiaries:
          type: array
          description: >-
            Компании, находящиеся непосредственно под компанией в её
            корпоративной группе.
          items:
            $ref: '#/components/schemas/KYBRegistryGroupCompany'
        unresolved:
          type: array
          description: >-
            Части цепочки, которые реестр не смог определить (те же записи, что
            и в `ownership.unresolved`).
          items:
            type: object
            properties:
              reason:
                type: string
                description: >-
                  Причина, например `no_group_structure_on_record`,
                  `selected_company_not_in_group_structure` или `section_error`.
              section:
                type: string
                nullable: true
                description: Соответствующий раздел, например `group_structure`.
            required:
              - reason
              - section
      required:
        - parent_chain
        - subsidiaries
        - unresolved
    KYBRegistryLiteEnrichment:
      type: object
      description: >-
        Пустые поля профиля Lite, заполненные другим источником реестра страны.
        Источник не указан.
      properties:
        fields:
          type: array
          items:
            type: string
          description: Поля компании, которые были заполнены.
        people_added:
          type: integer
          description: Количество добавленных должностных лиц или владельцев.
      required:
        - fields
        - people_added
    KYBRegistrySource:
      type: object
      description: >-
        Официальный реестр, из которого была прочитана запись. Указываются
        только официальные государственные реестры, регуляторы и официальная
        система идентификаторов; любые другие источники опускаются.
      properties:
        name:
          type: string
          description: Название реестра, например `UK Companies House`.
        source_type:
          type: string
          enum:
            - official
          description: Всегда `official`.
      required:
        - name
        - source_type
    KYBRegistryGroupCompany:
      type: object
      description: Компания корпоративной группы по её идентификатору в реестре.
      properties:
        name:
          type: string
          nullable: true
          description: Название компании.
        country_code:
          type: string
          nullable: true
          description: Страна регистрации.
        registration_number:
          type: string
          nullable: true
          description: Регистрационный номер.
      required:
        - name
        - country_code
        - registration_number
  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.