> ## 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: очистка KYC

> Удаляйте много KYC-сессий по номерам или все сразу. До 20 — результат по каждой сессии; больше — задача удаления, статус которой вы опрашиваете.



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



      
      

\<pre>

\`Goal: Delete a list of User Verification (KYC) sessions, or every session, for the calling application, and control what happens to each session's face biometric data. KYC only — KYB sessions are not covered here; use DELETE /v3/session/{sessionId}/delete/ for a single KYB or KYC session.

Endpoint: POST https://verification.didit.me/v3/sessions/delete/
Auth header: x-api-key: YOUR_API_KEY
Content-Type: application/json

Request body — provide EXACTLY ONE selector:
\- session_numbers: string[] — UI-visible decimal session numbers ("#1234" style), NOT UUIDs. Each entry must be digits only (regex ^[0-9]+$). minItems: 1.
\- delete_all: true — delete every remaining KYC session for the application. When delete_all is true, session_numbers is ignored.

Narrowing delete_all (optional, only together with delete_all: true):
\- filter_<name> - any filter of GET /v3/sessions/ (see /sessions-api/list-sessions) prefixed with filter_, with the same values: filter_status, filter_workflow_id, filter_date_from, filter_date_to, filter_vendor_data, filter_country, filter_document_type, filter_warning, filter_search and the others. Filters that take several values in GET /v3/sessions/ (status, workflow_id, country, region, document_type, document_name, session_type, warning, organization_name) accept a comma-separated string or an array. The others take one value: an array is joined into one comma-separated value, so several dates, UUIDs or api_service values are refused with 400, and several texts are not matched as alternatives. An empty value is ignored and does not narrow the selection.
\- An unknown filter_* key returns 400 { "filter_<name>": "Unknown filter." } and a value that cannot be read returns 400 keyed by that filter_* key (for example { "filter_date_from": ["Enter a valid date."] }). Nothing is deleted in either case.
\- A deletion job applies the same filters.

Optional retention and instruction fields (same semantics as the single-session endpoint, applied to every matched session):
\- retain_face_embeddings (boolean | null) — true keeps an image-free biometric template anchored to each session's User; false deletes the embedding with the session; omit/null follows the application's face_retention_policy.
\- face_retention_days (integer 1-3650) — required when retaining unless the application sets face_retention_days.
\- face_retention_deadline (ISO 8601 datetime, future) — optional hard expiry.
\- deletion_instruction ("operational_session_delete" default | "privacy_erasure") — privacy_erasure purges every retained template for each session's User and never retains a new one. Cannot be combined with retain_face_embeddings: true (400).
\- instruction_id (string, max 255) — your durable reference for this instruction; recorded on the audit trail and on every retained template.

curl:
curl -X POST 'https://verification.didit.me/v3/sessions/delete/' \
-H "x-api-key: YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"session_numbers": ["1001", "1002", "1003"]}'

Response: the number of matching sessions decides, whether they are selected by session_numbers or with delete_all.

Up to 20 matching sessions: they are deleted in the request. Response 200 (this endpoint no longer returns 204):
\{
"results": [
\{"session_id": "<uuid>", "session_number": 1001, "face_retention_outcome": "deleted", "biometric_template_uuid": null, "biometric_template_expires_at": null, "deleted_child_verifications": 0},
\{"session_id": "<uuid>", "session_number": 1002, "face_retention_outcome": "retained_with_user", "biometric_template_uuid": "<uuid>", "biometric_template_expires_at": "<ISO 8601 datetime>", "deleted_child_verifications": 0},
\{"session_id": "<uuid>", "session_number": 1003, "face_retention_outcome": "failed_retryable", "biometric_template_uuid": null, "biometric_template_expires_at": null, "deleted_child_verifications": 0}
]
}
face_retention_outcome per session:
\- deleted: session and face embedding deleted (default).
\- retained_with_user: session deleted; an image-free biometric template stays anchored to the User until biometric_template_expires_at (manage it via /v3/biometric-templates/).
\- none: the session had no face embedding.
\- ineligible_no_vendor_user: retention requested but the session has no linked User; session and embedding deleted.
\- failed_retryable: the group this session was deleted with could not be deleted (a storage service, a biometric store or a monitoring provider was unavailable). That session is NOT deleted and is still in place; re-run the request for it. Other groups in the same request are unaffected.
deleted_child_verifications is always 0 here: this endpoint deletes KYC sessions only.

More than 20 matching sessions: they are deleted in the background. Response 202 with a deletion job:
\{"job_id": "<uuid>", "status": "PENDING", "total": 250, "processed": 0, "outcomes": {"deleted": 0, "none": 0, "retained_with_user": 0, "ineligible_no_vendor_user": 0, "failed_retryable": 0, "already_deleted": 0}, "deleted_child_verifications": 0, "error": null, "created_at": "<datetime>", "completed_at": null}
Poll GET /v3/sessions/delete/{job_id}/ every few seconds until status is COMPLETED or FAILED. The job reports counts per outcome, never which sessions it deleted. A delete_all job deletes only the sessions created before the request. A FAILED job explains why in error; the sessions it had not reached are still in place, so repeat the request to delete them.

Side effects:
\- Each matched session is deleted along with everything it produced, including every verification attempt: its decision, its extracted data, its KYC / Face / AML / Location / POA / Phone / Email records, its reviews and activity log, and all of its stored files.
\- The sessions stop appearing in GET /v3/sessions/ and GET /v3/session/{sessionId}/decision/, and media URLs issued before the call stop resolving.
\- Webhook deliveries still queued for the deleted sessions, and their retries, are dropped. Webhooks already delivered are not affected.
\- Share tokens issued for the sessions are NOT revoked, but there is nothing left for them to import: an import with one returns 400 {"share_token": ["Original session does not exist."]}.
\- Blocklist entries created from the sessions are NOT removed.
\- Credits already consumed by the verifications are NOT refunded.
\- The parent User entities are NOT deleted; use POST /v3/users/delete/ for those (that also purges their retained templates).
\- NO deletion webhook is emitted.
\- Sessions are deleted in groups; a failure in one group does not roll back the others. Numbers that no longer match a live session are skipped and do not appear in results.

Idempotency: re-running with the same session_numbers deletes nothing more (numbers that no longer match a session are skipped). Deletion is permanent and cannot be undone.

Failure modes:
\- 400: validation, nothing deleted:
\{ "session_numbers": ["This field is required unless delete_all is true."] }
\{ "session_numbers": ["All session_numbers must be numeric."] }
\{ "retain_face_embeddings": ["Privacy erasure cannot retain biometric templates."] }
\{ "detail": "A finite biometric-template retention duration is required." }
\{ "filter_reviewer": "Unknown filter." }
\{ "filter_date_from": ["Enter a valid date."] }
\- 409: at least one selected session is part of 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.
\- 403: API key invalid or application not allowed. { "detail": "You do not have permission to perform this action." }

Migration note: until this release the endpoint returned 204 with an empty body; it now returns 200 with results[], or 202 with a deletion job when more than 20 sessions match. Existing applications stay on delete_with_session until you explicitly change the policy.

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

\</pre>



      
      

Вставьте в

## ПоведениеКаждая подходящая сессия удаляется точно так же, как при [Удалении сессии](https://docs.didit.me/ru/sessions-api/delete-session.md): удаляются сама сессия, каждая попытка верификации, которая к ней относится, её решение и извлечённые данные, её записи о функциях и все её сохранённые файлы. Сессия исчезает из каждого endpoint чтения, а ранее выданные URL медиафайлов перестают открываться. Webhook-доставки, которые ещё стоят в очереди для удалённой сессии, и их повторные попытки отменяются. Webhook, которые уже доставлены, не затрагиваются. Удаление необратимо и окончательно.Если какая-либо выбранная сессия включена в завершённый регуляторный отчёт, весь запрос возвращает `409`, и ничего не удаляется. В ответе указаны `code: in_filed_report` и название каждого отчёта. Удалите каждый отчёт с помощью [Удаления отчёта](https://docs.didit.me/ru/management-api/regulatory-reports/delete.md), затем повторите запрос. Удаление отчёта не удаляет сессию: сессия остаётся на месте, пока вы не повторите этот запрос.От количества подходящих сессий зависит ответ на запрос, независимо от того, выбираете ли вы их через `session_numbers` или через `delete_all`:| Подходящие сессии | Ответ |
| - | - |
| До 20 | `200 OK` после их удаления, с одним результатом на каждую подходящую сессию в `results`. |
| Более 20 | `202 Accepted` с заданием на удаление. Сессии удаляются в фоновом режиме. Опрашивайте [Получение задания на удаление сессий](https://docs.didit.me/ru/management-api/sessions/get-deletion-job.md), пока оно не завершится. |Результат подтверждает удаление сессии, за исключением случая, когда её `face_retention_outcome` равен `failed_retryable`: такая сессия **не** удалена и остаётся на месте. Поэтому такой результат нужно считать ошибкой, требующей повторной попытки, а не подтверждением удаления.
Номера, которые не соответствуют действующей KYC-сессии в вашем приложении, пропускаются и не появляются в `results`.## Сужение `delete_all` с помощью фильтровС `delete_all: true` можно сузить выборку с помощью фильтров [Списка сессий](https://docs.didit.me/ru/sessions-api/list-sessions.md), каждый с префиксом `filter_`.
Они принимают те же значения, что и параметры запроса.
Фильтр, который принимает несколько значений (`status`, `workflow_id`, `country`, `region`, `document_type`, `document_name`, `session_type`, `warning`, `organization_name`), принимает строку, разделённую запятыми, или массив:```json theme={null}
{
  "delete_all": true,
  "filter_status": ["Declined"],
  "filter_workflow_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "filter_date_from": "2026-09-01",
  "filter_date_to": "2026-09-30"
}
```- Фильтры применяются только вместе с `delete_all`. С `session_numbers` они проверяются, но не меняют выборку.
- Каждый другой фильтр принимает одно значение.
  Массив объединяется в одно значение через запятую, поэтому несколько дат, UUID или значений `api_service` возвращают `400`, а несколько текстов `vendor_data`, `search` или `screened_full_name` не сопоставляются как альтернативы.
- Фильтр с пустым значением игнорируется и не сужает выборку.
- Неизвестный ключ `filter_*` возвращает `400` `{"filter_reviewer": "Unknown filter."}`, а значение, которое невозможно прочитать, возвращает `400` с ключом этого `filter_*`, например `{"filter_date_from": ["Enter a valid date."]}`.
  В обоих случаях ничего не удаляется, поэтому ошибка в фильтре никогда не расширит удаление на все сессии.
- Задание на удаление применяет те же фильтры и, как и любой `delete_all`, охватывает только сессии, созданные до запроса.## Поля хранения и инструкцийEndpoint принимает те же необязательные поля, что и endpoint удаления одной сессии, и применяет их к каждой подходящей сессии:| Поле | Тип | Описание |
| - | - | - |
| `retain_face_embeddings` | boolean или null | Переопределяет `face_retention_policy` приложения для этого запроса. |
| `face_retention_days` | integer (1-3650) | Конечный срок хранения для сохраняемых шаблонов. Обязателен при сохранении, если приложение не задаёт `face_retention_days`. |
| `face_retention_deadline` | datetime (ISO 8601) | Необязательный жёсткий срок окончания; должен быть в будущем. |
| `deletion_instruction` | `operational_session_delete` (по умолчанию) или `privacy_erasure` | `privacy_erasure` удаляет все сохранённые шаблоны каждого пользователя перед удалением сессии и не может использоваться вместе с `retain_face_embeddings: true`. |
| `instruction_id` | string (максимум 255) | Ваш постоянный идентификатор этой инструкции. Записывается в журнал аудита и в каждый сохранённый шаблон. |Подробнее о том, что сохранённый шаблон содержит и чего не содержит, как вычисляется `expires_at` и что делает инструкция на стирание персональных данных, см. в [Удалении сессии](https://docs.didit.me/ru/sessions-api/delete-session.md#биометрические-данные-лица-удалить-или-сохранить).## Результаты по сессиямДля не более 20 подходящих сессий `200 OK` возвращает один результат на каждую сессию:```json theme={null}
{
  "results": [
    { "session_id": "4c5c7f3a-3b1d-4b7e-9c39-2b4f7e6a1d02", "session_number": 1001, "face_retention_outcome": "deleted", "biometric_template_uuid": null, "biometric_template_expires_at": null, "deleted_child_verifications": 0 },
    { "session_id": "b8e1d2c3-4f5a-4b6c-8d7e-9f0a1b2c3d4e", "session_number": 1002, "face_retention_outcome": "retained_with_user", "biometric_template_uuid": "9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b", "biometric_template_expires_at": "2027-10-09T10:15:00Z", "deleted_child_verifications": 0 },
    { "session_id": "7a1e9c2d-5f4b-4c3a-8e2d-1b0a9f8e7d6c", "session_number": 1003, "face_retention_outcome": "ineligible_no_vendor_user", "biometric_template_uuid": null, "biometric_template_expires_at": null, "deleted_child_verifications": 0 },
    { "session_id": "c1d2e3f4-a5b6-4c7d-8e9f-0a1b2c3d4e5f", "session_number": 1004, "face_retention_outcome": "failed_retryable", "biometric_template_uuid": null, "biometric_template_expires_at": null, "deleted_child_verifications": 0 }
  ]
}
```Каждый результат содержит те же поля, что и ответ [Удаления сессии](https://docs.didit.me/ru/sessions-api/delete-session.md#ответ). Поле `biometric_template_expires_at` задаёт момент удаления сохранённого шаблона, а `deleted_child_verifications` здесь всегда равен `0`, поскольку этот endpoint удаляет только KYC-сессии.| `face_retention_outcome` | Значение |
| - | - |
| `deleted` | Сессия и её эмбеддинг лица удалены. Поведение по умолчанию. |
| `retained_with_user` | Сессия удалена. Один биометрический шаблон без изображения остаётся привязанным к пользователю. Его идентификатор: `biometric_template_uuid`. |
| `none` | У сессии не было эмбеддинга лица, который нужно было бы удалить или сохранить. |
| `ineligible_no_vendor_user` | Сохранение было запрошено, но сессия не связана с пользователем (User), поэтому привязать шаблон не к чему. Сессия и её эмбеддинг удаляются. |
| `failed_retryable` | Группа, с которой удалялась эта сессия, не была удалена, поскольку недоступна служба хранения, хранилище биометрических данных или провайдер мониторинга. Эта сессия **не** удалена и остаётся на месте. Повторите запрос для неё: повторные попытки сходятся к одному биометрическому шаблону. |Сессии удаляются группами. Если группу не удалось удалить, каждая сессия в ней помечается как `failed_retryable`. Остальные группы не затрагиваются и остаются удалёнными.## Крупные выборки обрабатываются как задачаЕсли условиям соответствуют более 20 сессий, ответ имеет статус `202 Accepted` и содержит задачу удаления вместо `results`:```json theme={null}
{
  "job_id": "5b8f2c1e-7d3a-4f6b-9e2c-1a0d8f7e6c5b",
  "status": "PENDING",
  "total": 250,
  "processed": 0,
  "outcomes": { "deleted": 0, "none": 0, "retained_with_user": 0, "ineligible_no_vendor_user": 0, "failed_retryable": 0, "already_deleted": 0 },
  "deleted_child_verifications": 0,
  "error": null,
  "created_at": "2026-10-09T10:15:00Z",
  "completed_at": null
}
```Опрашивайте [Получить задачу удаления сессий](https://docs.didit.me/ru/management-api/sessions/get-deletion-job.md) каждые несколько секунд, пока `status` не примет значение `COMPLETED` или `FAILED`.- Задача сообщает, сколько сессий пришлось на каждый исход, но никогда не сообщает, какие именно сессии она удалила.
- Задача с `delete_all` удаляет только сессии, созданные до вашего запроса. Сессии, начатые во время её выполнения, не удаляются.
- Поля хранения данных и инструкций из вашего запроса применяются к каждой сессии, которую удаляет задача.
- Если группу пока нельзя удалить, задача повторяет попытку самостоятельно.
- Задача со статусом `FAILED` объясняет причину в `error`. Сессии, до которых она не дошла, остаются на месте: повторите запрос, чтобы удалить их.## Примеры> [tab] Удаление по номеру
>
> ```bash theme={null}
> curl -X POST https://verification.didit.me/v3/sessions/delete/ \
>   -H "x-api-key: YOUR_API_KEY" \
>   -H "Content-Type: application/json" \
>   -d '{"session_numbers": ["1001", "1002", "1003"]}'
> ```> [tab] Удаление с сохранением шаблонов
>
> ```bash theme={null}
> curl -X POST https://verification.didit.me/v3/sessions/delete/ \
>   -H "x-api-key: YOUR_API_KEY" \
>   -H "Content-Type: application/json" \
>   -d '{
>     "session_numbers": ["1001", "1002"],
>     "retain_face_embeddings": true,
>     "face_retention_days": 365,
>     "instruction_id": "post-approval-cleanup-2026-08"
>   }'
> ```> [tab] Удаление данных в целях конфиденциальности
>
> ```bash theme={null}
> curl -X POST https://verification.didit.me/v3/sessions/delete/ \
>   -H "x-api-key: YOUR_API_KEY" \
>   -H "Content-Type: application/json" \
>   -d '{
>     "session_numbers": ["1001"],
>     "deletion_instruction": "privacy_erasure",
>     "instruction_id": "dsar-2026-0142"
>   }'
> ```> [tab] Удаление всех сессий и проверка статуса задачи
>
> ```bash theme={null}
> curl -X POST https://verification.didit.me/v3/sessions/delete/ \
>   -H "x-api-key: YOUR_API_KEY" \
>   -H "Content-Type: application/json" \
>   -d '{"delete_all": true}'
>
> # More than 20 sessions matched: the response is 202 with a job_id.
> curl https://verification.didit.me/v3/sessions/delete/JOB_ID/ \
>   -H "x-api-key: YOUR_API_KEY"
> ```## Миграция с ответов со статусом 204До этого релиза endpoint возвращал `204 No Content`. Теперь он возвращает `200 OK` с `results[]` или `202 Accepted` с задачей удаления, если условиям соответствуют более 20 сессий. Обновите клиенты, которые проверяют статус `204`. Поведение удаления по умолчанию не изменилось: существующие приложения остаются на `delete_with_session`, пока вы явно не измените политику.## Связанные материалы- [Удалить сессию](https://docs.didit.me/ru/sessions-api/delete-session.md)
- [Получить задачу удаления сессий](https://docs.didit.me/ru/management-api/sessions/get-deletion-job.md)
- [Биометрические шаблоны](https://docs.didit.me/ru/management-api/biometric-templates/overview.md)
- [Хранение данных](https://docs.didit.me/ru/console/data-retention.md)


## OpenAPI

````yaml ru/openapi-25.json POST /v3/sessions/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/sessions/delete/:
    post:
      tags:
        - Sessions
      summary: Массовое удаление KYC-сессий по session_number
      description: >-
        Массовое удаление сессий Проверки пользователей (KYC) по их числовому
        `session_number` или всех KYC-сессий в вашем приложении с помощью
        `delete_all: true`.


        `session_number` представляет собой понятный человеку инкрементный
        счетчик, отображаемый в списке сессий в консоли и возвращаемый как
        `session_number` endpoints создания сессии и принятия решения; это
        **не** UUID `session_id`. Чтобы удалить сессию по UUID или удалить
        сессию Верификации бизнеса (KYB), которую этот endpoint никогда не
        затрагивает, используйте `DELETE /v3/session/{sessionId}/delete/`.


        **В рамках одного запроса удаляется до 20 сессий, большее количество
        выполняется как фоновая задача.** Количество подходящих сессий
        определяет поведение независимо от того, выбраны ли они через
        `session_numbers` или с помощью `delete_all`:

        - До 20 подходящих сессий: они удаляются до отправки ответа, который
        возвращается со статусом `200` и одной записью на сессию в `results[]`.

        - Более 20: возвращается ответ `202` с задачей на удаление, и сессии
        удаляются в фоновом режиме. Опрашивайте `GET
        /v3/sessions/delete/{job_id}/`, пока `status` не примет значение
        `COMPLETED` или `FAILED`. Задача сообщает количество по каждому
        результату, но не список удаленных сессий. Задача с `delete_all` удаляет
        только сессии, созданные до отправки запроса; сессии, запущенные во
        время ее выполнения, не удаляются.


        Каждая удаленная сессия обрабатывается точно так же, как и в endpoint
        удаления отдельной сессии: сессия, каждая содержащаяся в ней попытка
        верификации, ее решение и извлеченные данные, связанные записи функций
        (Верификация личности, лицо, Проверка живости, Сравнение лиц и т. д.) и
        все ее сохраненные файлы удаляются, она исчезает из всех endpoints
        чтения, а ранее выданные URL медиафайлов перестают работать. Доставки
        webhook, все еще находящиеся в очереди для удаленной сессии, и их
        повторные попытки отменяются; уже доставленные webhook не затрагиваются.
        Записи в списке блокировки **не** удаляются, уже израсходованные кредиты
        **не** возвращаются, а родительские сущности User **не** удаляются (для
        них используйте `POST /v3/users/delete/`); webhook на удаление не
        отправляется. Удаление является окончательным и необратимым.


        **Семантика выборки:**

        - С `delete_all: true` вы можете сузить выборку с помощью фильтров `GET
        /v3/sessions/`, каждый из которых имеет префикс `filter_` (например,
        `filter_status`, `filter_workflow_id`, `filter_date_from`). Фильтры,
        принимающие несколько значений в списке сессий (`status`, `workflow_id`,
        `country`, `region`, `document_type`, `document_name`, `session_type`,
        `warning`, `organization_name`), принимают строку с
        разделителями-запятыми или массив; остальные принимают одно значение.
        Пустое значение игнорируется. Фильтры применяются только вместе с
        `delete_all`, и задача на удаление применяет те же фильтры.

        - Неизвестный ключ `filter_*` или значение фильтра, которое невозможно
        прочитать, отклоняет весь запрос со статусом `400` до того, как что-либо
        будет удалено, поэтому опечатка в фильтре никогда не расширит удаление
        на все сессии.

        - Записи в `session_numbers`, которые не соответствуют активной
        KYC-сессии в вашем приложении (неизвестные номера, уже удаленные сессии
        или сессии, принадлежащие другому приложению), **автоматически
        пропускаются**: они не отображаются в `results` и не учитываются в
        `total` задачи.

        - Ошибки валидации (нечисловая запись, пустой список, отсутствие как
        `session_numbers`, так и `delete_all`, либо срок хранения шаблона,
        который приложение не может обеспечить) отклоняют **весь запрос** со
        статусом `400` и ничего не удаляют.

        - Сессии удаляются группами. Если группу невозможно удалить (например,
        из-за недоступности сервиса хранения данных), для каждой сессии в этой
        группе возвращается `face_retention_outcome: failed_retryable`, и она
        остается без изменений; остальные группы не затрагиваются. Повторите
        запрос для этих сессий. Задача повторяет попытку для такой группы
        автоматически.

        - Документированного ограничения на длину списка нет; практическим
        ограничением служит общий лимит запросов на запись (см. ниже).


        **Биометрические данные лица:** необязательные поля
        `retain_face_embeddings`, `face_retention_days`,
        `face_retention_deadline`, `deletion_instruction` и `instruction_id`
        имеют то же значение, что и в `DELETE /v3/session/{sessionId}/delete/`,
        и применяются к каждой подходящей сессии. Каждый результат сообщает свой
        собственный `face_retention_outcome`.


        **Ответ:** `200 OK` с `results[]` для до 20 подходящих сессий или `202
        Accepted` с задачей на удаление для большего количества. Каждый
        результат подтверждает удаление, за исключением `face_retention_outcome:
        failed_retryable`, который сообщает о сессии, которая НЕ была удалена и
        для которой следует повторить попытку. Более ранние версии этого
        endpoint возвращали `204 No Content`; обновите клиенты, ожидающие `204`.


        **Идемпотентность:** повторение одного и того же запроса больше ничего
        не удаляет: номера, которые больше не соответствуют сессии,
        пропускаются.


        **`delete_all: true` (деструктивное действие):** удаляет **каждую**
        оставшуюся KYC-сессию в приложении; если параметр задан,
        `session_numbers` игнорируется. Подтверждение не требуется, а отменить
        удаление невозможно.


        **Аутентификация:** API-ключ в заголовке `x-api-key`. Отсутствующие или
        недействительные учетные данные возвращают `403` (`{"detail": "You do
        not have permission to perform this action."}`); этот API никогда не
        возвращает `401`.


        **Лимит запросов:** общий лимит на запись составляет 300 запросов/мин на
        API-ключ для всех endpoints POST/PATCH/DELETE; его превышение возвращает
        `429`.


        Этот endpoint принимает только API-ключи. Bearer-токены пользователей
        Business Console отклоняются со статусом `403` (в отличие от удаления
        отдельной сессии, которое принимает и то, и другое).


        **Поданные регуляторные отчёты:** если выбранные данные содержатся в
        окончательно сформированном регуляторном отчёте, весь запрос отклоняется
        со статусом `409` и ничего не удаляется. В теле ответа используется
        `code: in_filed_report` и указывается каждый отчёт с полями `uuid`,
        `report_number`, `report_type` и `case_uuid`. Удалите отчёты, затем
        повторите запрос.
      operationId: batch_delete_sessions
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                session_numbers:
                  type: array
                  description: >-
                    Числовые значения `session_number` удаляемых KYC-сессий в
                    виде строк, состоящих только из цифр (числа JSON также
                    принимаются и приводятся к нужному типу). Обязательно, если
                    `delete_all` не равен `true`; пустой список возвращает
                    `400`. Любой элемент, содержащий не только цифры, отклоняет
                    весь запрос с кодом `400` (если только `delete_all` не равен
                    `true`, и в этом случае валидация пропускается, а элементы
                    игнорируются). Номера, которые не соответствуют активной
                    сессии в вашем приложении, молча пропускаются.
                  items:
                    type: string
                    pattern: ^[0-9]+$
                    example: '1001'
                  minItems: 1
                  example:
                    - '1001'
                    - '1002'
                    - '1003'
                delete_all:
                  type: boolean
                  description: >-
                    Когда `true`, все оставшиеся KYC-сессии в вызывающем
                    приложении удаляются, а `session_numbers` игнорируется, если
                    вы не сузите выборку с помощью ключей `filter_*`. Если
                    совпадает более 20 сессий, они обрабатываются как задача
                    удаления (`202`), охватывающая только сессии, созданные до
                    момента запроса. По умолчанию `false`. Действие необратимо;
                    шаг подтверждения отсутствует.
                  default: false
                  example: false
                retain_face_embeddings:
                  type: boolean
                  nullable: true
                  description: >-
                    Переопределить `face_retention_policy` приложения для этого
                    удаления. При значении `true` после удаления сессии
                    сохраняется один биометрический шаблон лица без изображения,
                    привязанный к пользователю сессии; при `false` эмбеддинг
                    лица удаляется вместе с сессией; опустите или укажите
                    `null`, чтобы использовать политику приложения. Игнорируется
                    для KYB-сессий и сессий без эмбеддинга лица.
                  example: true
                face_retention_days:
                  type: integer
                  minimum: 1
                  maximum: 3650
                  description: >-
                    Ограниченный срок хранения в днях для сохраняемого шаблона.
                    Обязателен при сохранении шаблона, если в приложении ещё не
                    задан `face_retention_days`. Значение `expires_at` шаблона
                    является наименьшим из этого срока, общего окна хранения
                    данных приложения и `face_retention_deadline`.
                  example: 365
                face_retention_deadline:
                  type: string
                  format: date-time
                  description: >-
                    Необязательный точный срок действия сохранённого шаблона.
                    Должен быть в будущем.
                  example: '2027-08-28T00:00:00Z'
                deletion_instruction:
                  type: string
                  enum:
                    - operational_session_delete
                    - privacy_erasure
                  default: operational_session_delete
                  description: >-
                    Класс передаваемой инструкции. `operational_session_delete`
                    удаляет сессию и сохраняет шаблон только тогда, когда это
                    предусмотрено политикой или параметром
                    `retain_face_embeddings`. `privacy_erasure` полностью
                    удаляет каждый сохранённый биометрический шаблон,
                    привязанный к пользователю сессии, перед удалением самой
                    сессии, не может быть переопределён политикой приложения и
                    не может сочетаться с `retain_face_embeddings: true`
                    (`400`).
                  example: operational_session_delete
                instruction_id:
                  type: string
                  maxLength: 255
                  description: >-
                    Ваш постоянный идентификатор для этой инструкции по удалению
                    (например, id тикета на удаление). Фиксируется в журнале
                    аудита и на любом сохраненном шаблоне. Генерируется Didit,
                    если опущен.
                  example: dsar-2026-0142
                filter_status:
                  description: >-
                    Ограничивает действие `delete_all` сессиями,
                    соответствующими фильтру `status` метода [List
                    Sessions](/ru/sessions-api/list-sessions), с теми же
                    значениями. Строка с разделителями-запятыми или массив.
                    Игнорируется без `delete_all`. Пустое значение игнорируется
                    и не сужает выборку.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_vendor_data:
                  description: >-
                    Ограничивает действие `delete_all` сессиями,
                    соответствующими фильтру `vendor_data` метода [List
                    Sessions](/ru/sessions-api/list-sessions), с тем же
                    значением. Одно значение, не список: массив объединяется в
                    одну строку через запятую, поэтому несколько значений не
                    сопоставляются как альтернативы. Игнорируется без
                    `delete_all`. Пустое значение игнорируется и не сужает
                    выборку.
                  type: string
                filter_search:
                  description: >-
                    Ограничивает действие `delete_all` сессиями,
                    соответствующими фильтру `search` метода [List
                    Sessions](/ru/sessions-api/list-sessions), с тем же
                    значением. Одно значение, не список: массив объединяется в
                    одну строку через запятую, поэтому несколько значений не
                    сопоставляются как альтернативы. Игнорируется без
                    `delete_all`. Пустое значение игнорируется и не сужает
                    выборку.
                  type: string
                filter_workflow_id:
                  description: >-
                    Ограничивает действие `delete_all` сессиями,
                    соответствующими фильтру `workflow_id` метода [List
                    Sessions](/ru/sessions-api/list-sessions), с теми же
                    значениями. Строка с разделителями-запятыми или массив.
                    Игнорируется без `delete_all`. Пустое значение игнорируется
                    и не сужает выборку.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_date_from:
                  description: >-
                    Ограничивает операцию `delete_all` сессиями, которые
                    соответствуют фильтру `date_from` метода [List
                    Sessions](/ru/sessions-api/list-sessions) с тем же
                    значением. Одно значение, не список: массив объединяется в
                    одну строку через запятую, поэтому несколько значений
                    отклоняются с ошибкой `400`. Игнорируется без `delete_all`.
                    Пустое значение игнорируется и не сужает выборку.
                  type: string
                  format: date
                filter_date_to:
                  description: >-
                    Ограничивает операцию `delete_all` сессиями, которые
                    соответствуют фильтру `date_to` метода [List
                    Sessions](/ru/sessions-api/list-sessions) с тем же
                    значением. Одно значение, не список: массив объединяется в
                    одну строку через запятую, поэтому несколько значений
                    отклоняются с ошибкой `400`. Игнорируется без `delete_all`.
                    Пустое значение игнорируется и не сужает выборку.
                  type: string
                  format: date
                filter_country:
                  description: >-
                    Ограничивает операцию `delete_all` сессиями, которые
                    соответствуют фильтру `country` метода [List
                    Sessions](/ru/sessions-api/list-sessions) с теми же
                    значениями. Строка со значениями через запятую или массив.
                    Игнорируется без `delete_all`. Пустое значение игнорируется
                    и не сужает выборку.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_document_type:
                  description: >-
                    Ограничивает операцию `delete_all` сессиями, которые
                    соответствуют фильтру `document_type` метода [List
                    Sessions](/ru/sessions-api/list-sessions) с теми же
                    значениями. Строка со значениями через запятую или массив.
                    Игнорируется без `delete_all`. Пустое значение игнорируется
                    и не сужает выборку.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_document_name:
                  description: >-
                    Ограничивает операцию `delete_all` сессиями, которые
                    соответствуют фильтру `document_name` метода [List
                    Sessions](/ru/sessions-api/list-sessions) с теми же
                    значениями. Строка со значениями через запятую или массив.
                    Игнорируется без `delete_all`. Пустое значение игнорируется
                    и не сужает выборку.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_region:
                  description: >-
                    Ограничивает действие `delete_all` сессиями,
                    соответствующими фильтру `region` метода [List
                    Sessions](/ru/sessions-api/list-sessions), с теми же
                    значениями. Строка с разделителями-запятыми или массив.
                    Игнорируется без `delete_all`. Пустое значение игнорируется
                    и не сужает выборку.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_didit_internal_id:
                  description: >-
                    Ограничивает операцию `delete_all` сессиями, которые
                    соответствуют фильтру `didit_internal_id` метода [List
                    Sessions](/ru/sessions-api/list-sessions) с тем же
                    значением. Одно значение, не список: массив объединяется в
                    одну строку через запятую, поэтому несколько значений
                    отклоняются с ошибкой `400`. Игнорируется без `delete_all`.
                    Пустое значение игнорируется и не сужает выборку.
                  type: string
                  format: uuid
                filter_session_type:
                  description: >-
                    Ограничивает действие `delete_all` сессиями,
                    соответствующими фильтру `session_type` метода [List
                    Sessions](/ru/sessions-api/list-sessions), с теми же
                    значениями. Строка с разделителями-запятыми или массив.
                    Игнорируется без `delete_all`. Пустое значение игнорируется
                    и не сужает выборку.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_api_service:
                  description: >-
                    Ограничивает операцию `delete_all` сессиями, которые
                    соответствуют фильтру `api_service` метода [List
                    Sessions](/ru/sessions-api/list-sessions) с тем же
                    значением. Одно значение, не список: массив объединяется в
                    одну строку через запятую, поэтому несколько значений
                    отклоняются с ошибкой `400`. Игнорируется без `delete_all`.
                    Пустое значение игнорируется и не сужает выборку.
                  type: string
                filter_screened_full_name:
                  description: >-
                    Ограничивает действие `delete_all` сессиями,
                    соответствующими фильтру `screened_full_name` метода [List
                    Sessions](/ru/sessions-api/list-sessions), с тем же
                    значением. Одно значение, не список: массив объединяется в
                    одну строку через запятую, поэтому несколько значений не
                    сопоставляются как альтернативы. Игнорируется без
                    `delete_all`. Пустое значение игнорируется и не сужает
                    выборку.
                  type: string
                filter_warning:
                  description: >-
                    Ограничивает действие `delete_all` сессиями,
                    соответствующими фильтру `warning` метода [List
                    Sessions](/ru/sessions-api/list-sessions), с теми же
                    значениями. Строка с разделителями-запятыми или массив.
                    Игнорируется без `delete_all`. Пустое значение игнорируется
                    и не сужает выборку.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_status_initialized_as_in_review:
                  description: >-
                    Ограничивает действие `delete_all` сессиями,
                    соответствующими фильтру `status_initialized_as_in_review`
                    метода [List Sessions](/ru/sessions-api/list-sessions), с
                    теми же значениями. Игнорируется без `delete_all`. Пустое
                    значение игнорируется и не сужает выборку.
                  type: boolean
                filter_is_kyc_to_be_reviewed:
                  description: >-
                    Ограничивает операцию `delete_all` сессиями, которые
                    соответствуют фильтру `is_kyc_to_be_reviewed` метода [List
                    Sessions](/ru/sessions-api/list-sessions) с теми же
                    значениями. Игнорируется без `delete_all`. Пустое значение
                    игнорируется и не сужает выборку.
                  type: boolean
                filter_euuid:
                  description: >-
                    Ограничивает операцию `delete_all` сессиями, которые
                    соответствуют фильтру `euuid` метода [List
                    Sessions](/ru/sessions-api/list-sessions) с тем же
                    значением. Одно значение, не список: массив объединяется в
                    одну строку через запятую, поэтому несколько значений
                    отклоняются с ошибкой `400`. Игнорируется без `delete_all`.
                    Пустое значение игнорируется и не сужает выборку.
                  type: string
                  format: uuid
                filter_organization_name:
                  description: >-
                    Ограничивает действие `delete_all` сессиями,
                    соответствующими фильтру `organization_name` метода [List
                    Sessions](/ru/sessions-api/list-sessions), с теми же
                    значениями. Строка с разделителями-запятыми или массив. При
                    использовании API-ключа может совпадать только с названием
                    вашей собственной организации, поэтому выбираются либо все
                    ваши сессии, либо ни одной. Игнорируется без `delete_all`.
                    Пустое значение игнорируется и не сужает выборку.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
            examples:
              Specific sessions:
                summary: Удалить конкретные сессии по номерам
                value:
                  session_numbers:
                    - '1001'
                    - '1002'
                    - '1003'
              All sessions:
                summary: Удалить все KYC-сессии в приложении
                value:
                  delete_all: true
              Delete and retain templates:
                summary: >-
                  Удалить сессии, но сохранить биометрические шаблоны без
                  изображений на 365 дней
                value:
                  session_numbers:
                    - '1001'
                    - '1002'
                  retain_face_embeddings: true
                  face_retention_days: 365
                  instruction_id: post-approval-cleanup-2026-08
              Privacy erasure:
                summary: >-
                  Удалить сессии и стереть все сохраненные шаблоны для их
                  пользователей
                value:
                  session_numbers:
                    - '1001'
                  deletion_instruction: privacy_erasure
                  instruction_id: dsar-2026-0142
              Filtered delete_all:
                summary: >-
                  Удалить все сессии одного сценария со статусом «отклонена»,
                  созданные в сентябре 2026 года
                value:
                  delete_all: true
                  filter_status:
                    - Declined
                  filter_workflow_id: 3fa85f64-5717-4562-b3fc-2c963f66afa6
                  filter_date_from: '2026-09-01'
                  filter_date_to: '2026-09-30'
      responses:
        '200':
          description: >-
            До 20 сессий совпали и были обработаны в запросе. По одному
            результату на каждую совпавшую сессию; номера без совпадений
            (неизвестные или уже удалённые) пропускаются и не отображаются.
            Результат подтверждает удаление, за исключением случаев, когда
            `face_retention_outcome` имеет значение `failed_retryable`: такая
            сессия НЕ была удалена, и попытку следует повторить.
          content:
            application/json:
              schema:
                type: object
                properties:
                  results:
                    type: array
                    items:
                      type: object
                      properties:
                        session_id:
                          type: string
                          format: uuid
                          description: Удалённая сессия.
                        session_number:
                          type: integer
                          nullable: true
                          description: Номер удалённой сессии.
                        face_retention_outcome:
                          type: string
                          enum:
                            - retained_with_user
                            - deleted
                            - none
                            - ineligible_no_vendor_user
                            - failed_retryable
                          description: >-
                            Что произошло с лицевыми биометрическими данными
                            сессии. `deleted`: эмбеддинг лица был удалён вместе
                            с сессией (по умолчанию). `retained_with_user`:
                            сессия удалена, а один биометрический шаблон без
                            изображения остаётся привязанным к пользователю; см.
                            `biometric_template_uuid`. `none`: в сессии не было
                            эмбеддинга лица (например, сессия KYC только по
                            документам без селфи для проверки живости; сессии
                            KYB никогда не выбираются этим endpoint).
                            `ineligible_no_vendor_user`: было запрошено
                            сохранение, но у сессии нет связанного пользователя,
                            поэтому эмбеддинг был удалён вместе с сессией.
                            `failed_retryable` (только для пакетного endpoint):
                            группу, вместе с которой удалялась эта сессия, не
                            удалось удалить (служба хранения, биометрическое
                            хранилище или провайдер мониторинга были
                            недоступны); эта сессия всё ещё существует,
                            повторите запрос для неё.
                        biometric_template_uuid:
                          type: string
                          format: uuid
                          nullable: true
                          description: >-
                            Идентификатор сохранённого биометрического шаблона,
                            если `face_retention_outcome` имеет значение
                            `retained_with_user`; в противном случае `null`.
                            Управляется через
                            `/v3/biometric-templates/{template_uuid}/`.
                        biometric_template_expires_at:
                          type: string
                          format: date-time
                          nullable: true
                          description: >-
                            Время удаления сохранённого биометрического шаблона,
                            когда `face_retention_outcome` имеет значение
                            `retained_with_user`; `null`, если шаблон не
                            сохраняется.
                        deleted_child_verifications:
                          type: integer
                          description: >-
                            Всегда `0` на этом endpoint, который удаляет только
                            сессии KYC. Удаление сессии Верификации бизнеса
                            (KYB) через `DELETE /v3/session/{sessionId}/delete/`
                            сообщает о созданных ею верификациях, которые были
                            удалены вместе с ней.
              examples:
                Mixed outcomes:
                  value:
                    results:
                      - session_id: 4c5c7f3a-3b1d-4b7e-9c39-2b4f7e6a1d02
                        session_number: 1001
                        face_retention_outcome: deleted
                        biometric_template_uuid: null
                        biometric_template_expires_at: null
                        deleted_child_verifications: 0
                      - session_id: b8e1d2c3-4f5a-4b6c-8d7e-9f0a1b2c3d4e
                        session_number: 1002
                        face_retention_outcome: retained_with_user
                        biometric_template_uuid: 9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b
                        biometric_template_expires_at: '2027-10-09T10:15:00Z'
                        deleted_child_verifications: 0
                      - session_id: 7a1e9c2d-5f4b-4c3a-8e2d-1b0a9f8e7d6c
                        session_number: 1003
                        face_retention_outcome: ineligible_no_vendor_user
                        biometric_template_uuid: null
                        biometric_template_expires_at: null
                        deleted_child_verifications: 0
                      - session_id: c1d2e3f4-a5b6-4c7d-8e9f-0a1b2c3d4e5f
                        session_number: 1004
                        face_retention_outcome: failed_retryable
                        biometric_template_uuid: null
                        biometric_template_expires_at: null
                        deleted_child_verifications: 0
        '202':
          description: >-
            Найдено более 20 сессий. Они удаляются в фоновом режиме; опрашивайте
            `GET /v3/sessions/delete/{job_id}/`, пока `status` не станет
            `COMPLETED` или `FAILED`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SessionDeletionJob'
              examples:
                Job accepted:
                  value:
                    job_id: 5b8f2c1e-7d3a-4f6b-9e2c-1a0d8f7e6c5b
                    status: PENDING
                    total: 250
                    processed: 0
                    outcomes:
                      deleted: 0
                      none: 0
                      retained_with_user: 0
                      ineligible_no_vendor_user: 0
                      failed_retryable: 0
                      already_deleted: 0
                    deleted_child_verifications: 0
                    error: null
                    created_at: '2026-10-09T10:15:00Z'
                    completed_at: null
        '400':
          description: >-
            Ошибка валидации — ничего не было удалено. Значения ошибок
            представляют собой массивы строк сообщений с ключами по именам
            полей.
          content:
            application/json:
              schema:
                type: object
                properties:
                  session_numbers:
                    type: array
                    items:
                      type: string
                additionalProperties:
                  description: >-
                    Другие ключи: ключ `filter_*`, который не является фильтром
                    List Sessions (`"Unknown filter."`), или ключ `filter_*`,
                    значение которого невозможно прочитать (с ключом в виде
                    этого `filter_*` и массивом сообщений).
              examples:
                Missing selector:
                  summary: Не указаны ни session_numbers, ни delete_all
                  value:
                    session_numbers:
                      - This field is required unless delete_all is true.
                Empty list:
                  summary: session_numbers является пустым массивом
                  value:
                    session_numbers:
                      - This list may not be empty.
                Non-numeric entry:
                  summary: session_numbers содержит нецифровую строку
                  value:
                    session_numbers:
                      - All session_numbers must be numeric.
                Privacy erasure cannot retain:
                  summary: >-
                    deletion_instruction privacy_erasure в сочетании с
                    retain_face_embeddings true
                  value:
                    retain_face_embeddings:
                      - Privacy erasure cannot retain biometric templates.
                No finite retention duration:
                  summary: >-
                    Запрошено хранение без указания face_retention_days в
                    запросе или приложении
                  value:
                    detail: >-
                      A finite biometric-template retention duration is
                      required.
                Unknown filter:
                  summary: Ключ filter_*, которого нет в методе получения списка сессий
                  value:
                    filter_reviewer: Unknown filter.
                Unreadable filter value:
                  summary: Значение фильтра, которое не удаётся прочитать
                  value:
                    filter_date_from:
                      - Enter a valid date.
        '403':
          description: >-
            Отсутствует API-ключ. При отсутствии ключа возвращается `403`; при
            неверном, отозванном или истекшем ключе возвращается `401`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              examples:
                Missing or invalid API key:
                  summary: Заголовок x-api-key отсутствует, либо ключ недействителен
                  value:
                    detail: You do not have permission to perform this action.
        '409':
          description: >-
            Выбранная сессия входит в завершённый регуляторный отчёт. Ничего не
            удалено.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InFiledReportError'
        '429':
          description: >-
            Превышен общий лимит запросов на запись (300 запросов
            POST/PATCH/DELETE в минуту на один API-ключ). Проверьте заголовок
            `Retry-After` и заголовки ответа `X-RateLimit-*` перед повторной
            попыткой.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              examples:
                Rate limited:
                  summary: Исчерпан бюджет на запись
                  value:
                    detail: >-
                      Write request rate limit exceeded. You can make up to 300
                      requests per minute.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: |-
            curl -X POST \
              https://verification.didit.me/v3/sessions/delete/ \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{
                "session_numbers": ["1001", "1002", "1003"]
              }'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.sessions.batch_delete(
                session_numbers=["1001", "1002", "1003"],
            )
            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.batchDelete({
              session_numbers: ["1001", "1002", "1003"],
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.BatchDelete(ctx, didit.SessionsBatchDeleteParams{\n\tSessionNumbers: didit.Some([]string{\"1001\", \"1002\", \"1003\"}),\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.SessionsBatchDeleteParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.sessions().batchDelete(SessionsBatchDeleteParams.builder()
                    .sessionNumbers(List.of("1001", "1002", "1003"))
                    .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->batchDelete([
                'session_numbers' => ['1001', '1002', '1003'],
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: >-
            require "didit"


            # Reads DIDIT_API_KEY.

            didit = Didit::Client.new


            result = didit.sessions.batch_delete(session_numbers: ["1001",
            "1002", "1003"])

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

            {
                SessionNumbers = new string[] { "1001", "1002", "1003" },
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    SessionDeletionJob:
      type: object
      description: >-
        Массовое удаление сессий, выполняющееся в фоновом режиме: прогресс и
        количество по результатам, без указания того, какие именно сессии были
        удалены.
      properties:
        job_id:
          type: string
          format: uuid
          description: Опрашивайте `GET /v3/sessions/delete/{job_id}/` с этим id.
        status:
          type: string
          enum:
            - PENDING
            - PROCESSING
            - COMPLETED
            - FAILED
          description: >-
            `PENDING`: принято, ещё не запущено. `PROCESSING`: удаление;
            `processed` и `outcomes` обновляются. `COMPLETED`: учтена каждая
            выбранная сессия. `FAILED`: задача завершилась досрочно; см.
            `error`.
        total:
          type: integer
          description: Сессии, выбранные при запросе удаления.
        processed:
          type: integer
          description: Сессии, обработку которых задание завершило к настоящему моменту.
        outcomes:
          type: object
          description: >-
            Сколько сессий завершилось с каждым из исходов. Все ключи
            присутствуют всегда.
          properties:
            deleted:
              type: integer
              description: Сессии, удалённые вместе с их эмбеддингом лица.
            none:
              type: integer
              description: Удалённые сессии, не содержавшие эмбеддинг лица.
            retained_with_user:
              type: integer
              description: >-
                Сессии, удалённые с сохранением одного биометрического шаблона
                без изображения для их пользователя в соответствии с запросом
                или политикой приложения.
            ineligible_no_vendor_user:
              type: integer
              description: >-
                Сессии, удалённые вместе с их эмбеддингом лица из-за того, что
                было запрошено сохранение, но у них не было привязанного
                пользователя.
            failed_retryable:
              type: integer
              description: >-
                Сессии, о которых сообщено как о неудалённых. Задание повторно
                пытается удалить группу, которую ему не удалось удалить
                самостоятельно, вместо того чтобы учитывать её здесь.
            already_deleted:
              type: integer
              description: >-
                Выбранные сессии, которые уже были удалены, например другим
                запросом, когда задача дошла до них.
        deleted_child_verifications:
          type: integer
          description: >-
            Верификации, созданные удалёнными верификациями бизнеса, удалённые
            вместе с ними. Всегда `0` для задачи, запущенной через `POST
            /v3/sessions/delete/`, которая удаляет только сессии KYC.
        error:
          type: string
          nullable: true
          description: >-
            `null`, если `status` не равен `FAILED`; в противном случае указана
            причина остановки удаления. Сессии, до которых задание не дошло,
            остаются на месте: повторите запрос, чтобы удалить их.
        created_at:
          type: string
          format: date-time
          description: Когда было запрошено удаление.
        completed_at:
          type: string
          format: date-time
          nullable: true
          description: Время завершения задачи; `null` во время выполнения.
    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: >-
            Транзакции, блокирующие удаление транзакции, каждая со списком
            отчётов, в которых она фигурирует.
    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.