> ## 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-данных

> Удаляйте компании Didit Business (KYB) пакетно по vendor_data или didit_internal_id. Соответствует требованиям GDPR и CCPA.



Промпт пакетного удаления компаний
        Скопировать промпт в буфер обмена



      
      

\<pre>

\`Goal: Permanently delete one or many Didit Business (KYB) entities. The matching business records, their tag links, and their comment history are removed permanently. Verification sessions and their records (KYB session data, document submissions, AML hits, beneficial-owner verifications) are NOT removed by this endpoint; delete those separately with DELETE /v3/session/{sessionId}/delete/.

Endpoint: POST https://verification.didit.me/v3/businesses/delete/
Auth header: x-api-key: <DIDIT_API_KEY>
Content-Type: application/json

Request body — provide EXACTLY ONE selector (mutually exclusive):
\- vendor_data_list: string[] — your own identifiers (case-insensitive after normalisation).
\- didit_internal_id_list: string[] (UUIDs) — Didit's internal IDs.
\- delete_all: true — wipe every business in this application. No confirmation, no undo.

curl:
curl -X POST 'https://verification.didit.me/v3/businesses/delete/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"vendor_data_list": ["company-123", "company-456"]}'

Response 200:
\{
"deleted": <int — number of businesses actually deleted; excludes vendor_data values that didn't match>
}

Idempotency: re-sending the same list returns deleted: 0 after the first run (unmatched IDs are silently skipped). There is no undo.

Failure modes:
\- 400 — no selector supplied. { "detail": "Provide vendor_data_list, didit_internal_id_list, or set delete_all=true." }
\- 401 — missing/invalid x-api-key.
\- 403 — lacks delete:businesses. { "detail": "You do not have permission to perform this action." }
\- 409 — the selection includes a company in a finalized regulatory report. Nothing is deleted. The body has code: in_filed_report and reports[] with uuid, report_number, report_type and case_uuid. Delete the reports, then repeat the request.
\- 409 — code: subject_deletion_in_progress: another request is still deleting one of the selected companies. This request deleted nothing; repeat it once that deletion has finished.
\- 429 — rate-limited.

WARNING — delete_all: true: there is no confirmation step and no undo. Restrict to API keys you intentionally provision for batch maintenance.

When to prefer status change instead:
\- For day-to-day blocking, use PATCH /v3/businesses/{vendor_data}/update-status/ with {"status": "BLOCKED"} — it keeps the audit trail intact while rejecting future sessions for the same identifier.

For end-to-end Didit integration, paste in the full prompt at /integration/integration-prompt.`

\</pre>



      
      

Вставьте в

## ОбзорУдаляет одну или несколько [сущностей компаний](https://docs.didit.me/ru/entities/businesses/overview.md). Записи компаний удаляются безвозвратно. Сессии верификации бизнеса (KYB) этот endpoint не затрагивает: они сохраняются, а их связь с компанией очищается. Удалите их с помощью [Удаление сессии](https://docs.didit.me/ru/sessions-api/delete-session.md). Транзакции тоже не затрагиваются; удалите их с помощью [Пакетное удаление транзакций](https://docs.didit.me/ru/management-api/transactions/delete.md).## Когда использовать- Запросы на **право на забвение**.
- **Очистка** тестовых компаний во время QA.
- **Деактивация** компаний, удалённых с вашей платформы.## Примечания- Принимает список значений `vendor_data` или `didit_internal_id`.
- Идемпотентно: удаление уже удалённой компании ничего не меняет.
- Возвращает только количество удалённых записей, а не отчёт по каждому элементу. Значения, которым ничего не соответствует, пропускаются без уведомления.
- Отправляет событие `business.data.updated` с заполненным `deleted_at`.
- Записи, принадлежащие самой компании, удаляются вместе с ней: её связи с тегами, история комментариев и её собственные записи об устройствах и сети.
- Записи, созданные сессией KYB, НЕ удаляются: данные реестра компаний, загруженные документы, срабатывания AML-проверки, бенефициарные владельцы и проверки ключевых лиц принадлежат сессии и сохраняются, пока вы не удалите саму сессию.## Данные в завершённом регуляторном отчётеЕсли какая-либо из выбранных компаний входит в кейс с завершённым регуляторным отчётом, весь запрос возвращает `409`, и ничего не удаляется. В ответе используется `code: in_filed_report`, и перечислен каждый отчёт:```json theme={null}
{
  "detail": "A case about this person or company has a filed regulatory report, so it cannot be deleted.",
  "code": "in_filed_report",
  "reports": [
    {
      "uuid": "5ec00000-0000-4000-8000-000000000007",
      "report_number": "SAR-0001",
      "report_type": "SAR",
      "case_uuid": "c1a5e000-0000-4000-8000-000000000001"
    }
  ]
}
```Удалите каждый отчёт с помощью [Удаление отчёта](https://docs.didit.me/ru/management-api/regulatory-reports/delete.md), затем повторите тот же запрос.## Удаление, которое уже выполняетсяКомпания удаляется одним запросом за раз. Если другой запрос ещё удаляет одну из выбранных компаний, этот запрос ждёт не более нескольких секунд, затем возвращает `409` с `code: subject_deletion_in_progress` и ничего не удаляет:```json theme={null}
{
  "detail": "This person or company is being deleted. Retry after deletion completes.",
  "code": "subject_deletion_in_progress"
}
```Повторите тот же запрос после завершения другого удаления. Компания, которую первый запрос уже удалил, больше не соответствует условиям, поэтому повтор удалит только оставшиеся компании.## РазрешенияРоль должна предоставлять `delete:businesses`. Как правило, это право предоставляется ролям `OWNER` и `ADMIN`.## Связанные материалы- [Хранение данных](https://docs.didit.me/ru/console/data-retention.md)
- [Журналы аудита](https://docs.didit.me/ru/console/audit-logs.md)
- [Операции с компаниями](https://docs.didit.me/ru/entities/businesses/operations.md)


## OpenAPI

````yaml ru/openapi-25.json POST /v3/businesses/delete/
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/businesses/delete/:
    post:
      tags:
        - Businesses
      summary: Пакетное удаление компаний
      description: >-
        **Удалить компании навсегда** — это действие необратимо. Для блокировки
        используйте [Update Business
        Status](#patch-/v3/businesses/-vendor_data-/update-status/) со статусом
        `BLOCKED`.


        **Поданные регуляторные отчёты:** если выбранные данные входят в
        финализированный регуляторный отчёт, весь запрос отклоняется с ошибкой
        `409`, и ничего не удаляется. Тело ответа содержит `code:
        in_filed_report` и указывает каждый отчёт с полями `uuid`,
        `report_number`, `report_type` и `case_uuid`. Удалите отчёты, затем
        повторите запрос.
      operationId: batch_delete_businesses
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              description: >-
                Укажите `vendor_data_list`, `didit_internal_id_list` или
                `delete_all: true`. Приоритет при отправке нескольких
                параметров: `delete_all` > `vendor_data_list` >
                `didit_internal_id_list` (используется только селектор с
                наивысшим приоритетом).
              properties:
                vendor_data_list:
                  type: array
                  items:
                    type: string
                  description: >-
                    Ваши собственные идентификаторы для удаления, сопоставляемые
                    в точности с переданными.
                didit_internal_id_list:
                  type: array
                  items:
                    type: string
                    format: uuid
                  description: Внутренние UUID Didit (`didit_internal_id`) для удаления.
                delete_all:
                  type: boolean
                  default: false
                  description: >-
                    Если `true`, удаляет все компании в приложении. Не может
                    сочетаться с селекторами списка.
            examples:
              Specific businesses:
                summary: Удалить по vendor_data
                value:
                  vendor_data_list:
                    - company-123
                    - company-456
              Specific internal IDs:
                summary: Удалить по didit_internal_id
                value:
                  didit_internal_id_list:
                    - a1b2c3d4-e5f6-7890-abcd-ef1234567890
                    - b2c3d4e5-f6a7-8901-bcde-f12345678901
              All businesses:
                summary: Удалить все компании в этом приложении
                value:
                  delete_all: true
      responses:
        '200':
          description: Компании удалены. Возвращает количество фактически удалённых строк.
          content:
            application/json:
              schema:
                type: object
                properties:
                  deleted:
                    type: integer
                    description: >-
                      Количество удалённых компаний (исключает значения
                      vendor_data, для которых ничего не найдено).
              examples:
                Deleted some:
                  value:
                    deleted: 2
                Nothing matched:
                  value:
                    deleted: 0
        '400':
          description: >-
            Селектор не указан (все поля `vendor_data_list`,
            `didit_internal_id_list` и `delete_all` отсутствуют или пусты). Тело
            ошибки представляет собой JSON-массив.
          content:
            application/json:
              examples:
                Missing selector:
                  value:
                    - >-
                      Provide vendor_data_list, didit_internal_id_list, or set
                      delete_all=true.
        '403':
          description: >-
            Отсутствующий, недействительный или отозванный API-ключ, либо у
            ключа нет прав на удаление компаний для этого приложения. При
            отсутствии ключа возвращается `403`; при неверном, отозванном или
            истекшем ключе возвращается `401`.
          content:
            application/json:
              examples:
                Forbidden:
                  value:
                    detail: You do not have permission to perform this action.
        '409':
          description: >-
            Ничего не удалено. `code` указывает причину: `in_filed_report`, если
            в выборку входит компания из окончательного регуляторного отчёта,
            `subject_deletion_in_progress`, если другой запрос всё ещё удаляет
            одну из выбранных компаний. Повторите запрос после завершения этого
            удаления.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/InFiledReportError'
                  - $ref: '#/components/schemas/SubjectDeletionInProgressError'
        '429':
          description: >-
            Лимит запросов превышен; снизьте частоту запросов и повторите
            попытку через интервал, указанный в `Retry-After`.
          content:
            application/json:
              examples:
                Rate limited:
                  value:
                    detail: Request was throttled. Expected available in 30 seconds.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: |-
            curl -X POST 'https://verification.didit.me/v3/businesses/delete/' \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{"vendor_data_list": ["company-123", "company-456"]}'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.businesses.batch_delete(
                vendor_data_list=["company-123", "company-456"],
            )
            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.businesses.batchDelete({
              vendor_data_list: ["company-123", "company-456"],
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Businesses.BatchDelete(ctx, didit.BusinessesBatchDeleteParams{\n\tVendorDataList: didit.Some([]string{\"company-123\", \"company-456\"}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import java.util.List;

            import me.didit.Didit;

            import me.didit.types.BusinessesBatchDeleteParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.businesses().batchDelete(BusinessesBatchDeleteParams.builder()
                    .vendorDataList(List.of("company-123", "company-456"))
                    .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->businesses->batchDelete([
                'vendor_data_list' => ['company-123', 'company-456'],
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: >-
            require "didit"


            # Reads DIDIT_API_KEY.

            didit = Didit::Client.new


            result = didit.businesses.batch_delete(vendor_data_list:
            ["company-123", "company-456"])

            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.Businesses.BatchDeleteAsync(new
            BusinessesBatchDeleteParams

            {
                VendorDataList = new string[] { "company-123", "company-456" },
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    InFiledReportError:
      type: object
      description: >-
        В удалении отказано, поскольку выбранные данные включены в
        сформированный регуляторный отчёт. Ничего не удалено. Удалите отчёт,
        затем повторите запрос.
      required:
        - detail
        - code
      properties:
        detail:
          type: string
        code:
          type: string
          enum:
            - in_filed_report
          description: >-
            Постоянный код ошибки для удаления, заблокированного завершённым
            регуляторным отчётом.
        reports:
          type: array
          items:
            $ref: '#/components/schemas/FiledRegulatoryReport'
          description: Отчёты, блокирующие удаление лица, компании, кейса или сессии.
        transactions:
          type: array
          items:
            $ref: '#/components/schemas/FiledReportTransaction'
          description: >-
            Транзакции, блокирующие удаление транзакции, каждая со списком
            отчётов, в которых она фигурирует.
    SubjectDeletionInProgressError:
      type: object
      description: >-
        Другой запрос всё ещё удаляет это физическое лицо или компанию. Этот
        запрос ничего не удалил и может быть повторён после завершения того
        удаления; при повторе будет удалено всё, что осталось выбранным.
      required:
        - detail
        - code
      properties:
        detail:
          type: string
        code:
          type: string
          enum:
            - subject_deletion_in_progress
          description: >-
            Постоянный код ошибки для физического лица или компании, которых
            другой запрос всё ещё удаляет.
    FiledRegulatoryReport:
      type: object
      description: Завершённый регуляторный отчёт, препятствующий запрошенному удалению.
      required:
        - uuid
        - report_number
        - report_type
        - case_uuid
      properties:
        uuid:
          type: string
          format: uuid
          description: UUID отчёта.
        report_number:
          type: string
          description: Номер отчёта, отображаемый в Console (например, SAR-0001).
        report_type:
          type: string
          enum:
            - SAR
            - STR
            - CTR
            - TTR
            - UTR
            - IFT
            - CBR
            - TFR
          description: Тип регуляторного отчёта.
        case_uuid:
          type: string
          format: uuid
          description: Кейс, к которому относится отчёт.
    FiledReportTransaction:
      type: object
      description: >-
        Транзакция не может быть удалена, так как она включена в завершённый
        регуляторный отчёт.
      required:
        - uuid
        - transaction_id
        - reports
      properties:
        uuid:
          type: string
          format: uuid
          description: UUID транзакции Didit.
        transaction_id:
          type: string
          description: Идентификатор транзакции, переданный при ее создании.
        reports:
          type: array
          items:
            $ref: '#/components/schemas/FiledRegulatoryReport'
          description: Финализированные отчёты, содержащие эту транзакцию.
  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.