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

# Sitzungen per Batch löschen: API für KYC-Bereinigung

> Mit Didit KYC-Sitzungen per Nummer oder alle auf einmal löschen. Bis zu 20 liefern Ergebnis je Sitzung; größere Auswahl läuft als abfragbarer Job.



Prompt zum Löschen mehrerer Sitzungen
        Prompt in die Zwischenablage kopieren



      
      

\<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>



      
      

Einfügen in

## VerhaltenJede passende Sitzung wird genauso gelöscht wie bei [Sitzung löschen](https://docs.didit.me/de/sessions-api/delete-session.md): Die Sitzung, alle Verifizierungsversuche, die sie enthält, ihre Entscheidung und extrahierten Daten, ihre Funktionsdatensätze und alle gespeicherten Dateien werden gelöscht. Sie verschwindet aus jedem Lese-Endpoint, und zuvor ausgegebene Medien-URLs werden nicht mehr aufgelöst. Webhook-Zustellungen, die für eine gelöschte Sitzung noch ausstehen, und deren Wiederholungen werden verworfen. Bereits zugestellte Webhooks sind davon nicht betroffen. Die Löschung ist endgültig und nicht rückgängig zu machen.Wenn eine ausgewählte Sitzung Teil eines abgeschlossenen Regulierungsberichts ist, gibt die gesamte Anfrage `409` zurück, und es wird nichts gelöscht. Die Antwort verwendet `code: in_filed_report` und nennt jeden Bericht. Löschen Sie jeden Bericht mit [Bericht löschen](https://docs.didit.me/de/management-api/regulatory-reports/delete.md) und wiederholen Sie danach die Anfrage. Das Löschen des Berichts löscht die Sitzung nicht. Die Sitzung bleibt bestehen, bis Sie diese Anfrage wiederholen.Die Anzahl der passenden Sitzungen bestimmt, wie die Anfrage beantwortet wird, unabhängig davon, ob Sie sie mit `session_numbers` oder mit `delete_all` auswählen:| Passende Sitzungen | Antwort |
| - | - |
| Bis zu 20 | `200 OK`, sobald sie gelöscht sind, mit einem Ergebnis pro passender Sitzung in `results`. |
| Mehr als 20 | `202 Accepted` mit einem Löschauftrag. Die Sitzungen werden im Hintergrund gelöscht. Fragen Sie [Löschauftrag für Sitzung abrufen](https://docs.didit.me/de/management-api/sessions/get-deletion-job.md) ab, bis der Auftrag abgeschlossen ist. |Ein Ergebnis bestätigt, dass die Sitzung gelöscht wurde, außer wenn ihr `face_retention_outcome` den Wert `failed_retryable` hat. Dann wurde die Sitzung **nicht** gelöscht und ist weiterhin vorhanden. Behandeln Sie dieses Ergebnis daher als fehlgeschlagen und führen Sie einen Wiederholungsversuch durch. Betrachten Sie es niemals als Bestätigung der Löschung.
Nummern, die keiner aktiven KYC-Sitzung in Ihrer Anwendung entsprechen, werden übersprungen und erscheinen nicht in `results`.## `delete_all` mit Filtern einschränkenMit `delete_all: true` können Sie die Auswahl mit den Filtern von [Sitzungen auflisten](https://docs.didit.me/de/sessions-api/list-sessions.md) einschränken. Jeder Filter erhält das Präfix `filter_`.
Sie akzeptieren dieselben Werte wie die Abfrageparameter.
Ein Filter, der mehrere Werte annimmt (`status`, `workflow_id`, `country`, `region`, `document_type`, `document_name`, `session_type`, `warning`, `organization_name`), akzeptiert eine durch Kommas getrennte Zeichenkette oder ein Array:```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"
}
```- Filter wirken nur zusammen mit `delete_all`. Mit `session_numbers` werden sie geprüft, verändern die Auswahl aber nicht.
- Jeder andere Filter nimmt genau einen Wert entgegen.
  Ein Array wird zu einem einzigen, durch Kommas getrennten Wert zusammengefügt. Mehrere Daten, UUIDs oder `api_service`-Werte führen daher zu `400`. Mehrere Texte für `vendor_data`, `search` oder `screened_full_name` werden nicht als Alternativen abgeglichen.
- Ein Filter mit leerem Wert wird ignoriert und schränkt die Auswahl daher nicht ein.
- Ein unbekannter `filter_*`-Schlüssel gibt `400` mit `{"filter_reviewer": "Unknown filter."}` zurück. Ein Wert, der nicht verarbeitet werden kann, gibt `400` zurück, unter dem jeweiligen `filter_*`-Schlüssel, zum Beispiel `{"filter_date_from": ["Enter a valid date."]}`.
  In beiden Fällen wird nichts gelöscht. Ein falsch geschriebener Filter erweitert die Löschung daher nie auf alle Sitzungen.
- Ein Löschauftrag wendet dieselben Filter an. Wie jede `delete_all`-Anfrage erfasst er nur Sitzungen, die vor der Anfrage erstellt wurden.## Aufbewahrungs- und AnweisungsfelderDer Endpoint akzeptiert dieselben optionalen Felder wie der Endpoint für eine einzelne Sitzung und wendet sie auf jede passende Sitzung an:| Feld | Typ | Beschreibung |
| - | - | - |
| `retain_face_embeddings` | boolean oder null | Überschreibt die `face_retention_policy` der Anwendung für diese Anfrage. |
| `face_retention_days` | Integer (1-3650) | Zeitlich begrenzte Aufbewahrungsdauer für beibehaltene Vorlagen. Erforderlich bei Aufbewahrung, sofern die Anwendung nicht `face_retention_days` festlegt. |
| `face_retention_deadline` | datetime (ISO 8601) | Optionales hartes Ablaufdatum, muss in der Zukunft liegen. |
| `deletion_instruction` | `operational_session_delete` (Standard) oder `privacy_erasure` | `privacy_erasure` entfernt vor dem Löschen der Sitzung jede beibehaltene Vorlage des Benutzers der jeweiligen Sitzung. Es kann nicht mit `retain_face_embeddings: true` kombiniert werden. |
| `instruction_id` | string (max. 255) | Ihre dauerhafte Referenz für diese Anweisung. Wird im Audit-Log und bei jedem beibehaltenen Template erfasst. |Was ein beibehaltenes Template enthält und was nicht, wie `expires_at` berechnet wird und was eine Anweisung zur Datenschutz-Löschung bewirkt, finden Sie unter [Sitzung löschen](https://docs.didit.me/de/sessions-api/delete-session.md#biometrische-gesichtsdaten-löschen-oder-aufbewahren).## Ergebnisse pro SitzungBei bis zu 20 passenden Sitzungen gibt `200 OK` ein Ergebnis pro Sitzung zurück:```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 }
  ]
}
```Jedes Ergebnis enthält dieselben Felder wie die Antwort von [Sitzung löschen](https://docs.didit.me/de/sessions-api/delete-session.md#antwort). `biometric_template_expires_at` gibt an, wann eine beibehaltene Vorlage gelöscht wird. `deleted_child_verifications` ist hier immer `0`, weil dieser Endpoint nur KYC-Sitzungen löscht.| `face_retention_outcome` | Bedeutung |
| - | - |
| `deleted` | Die Sitzung und ihr Gesichts-Embedding werden gelöscht. Standardverhalten. |
| `retained_with_user` | Die Sitzung wird gelöscht. Ein bildfreies biometrisches Template bleibt dem Benutzer zugeordnet. Seine ID ist `biometric_template_uuid`. |
| `none` | Die Sitzung hatte kein Gesichts-Embedding, das gelöscht oder beibehalten werden konnte. |
| `ineligible_no_vendor_user` | Aufbewahrung wurde angefordert, die Sitzung ist aber keinem Benutzer zugeordnet. Daher gibt es nichts, dem ein Template zugeordnet werden könnte. Die Sitzung und ihr Gesichts-Embedding werden gelöscht. |
| `failed_retryable` | Die Gruppe, mit der diese Sitzung gelöscht werden sollte, konnte nicht gelöscht werden, weil ein Speicherdienst, ein biometrischer Speicher oder ein Monitoring-Anbieter nicht verfügbar war. Diese Sitzung wurde **nicht** gelöscht und ist weiterhin vorhanden. Führen Sie die Anfrage für sie erneut aus. Wiederholungen führen zu einer einzigen Vorlage. |Sitzungen werden in Gruppen gelöscht. Kann eine Gruppe nicht gelöscht werden, wird jede Sitzung darin als `failed_retryable` gemeldet. Die übrigen Gruppen sind davon nicht betroffen und bleiben gelöscht.## Große Auswahlen werden als Auftrag ausgeführtWenn mehr als 20 Sitzungen übereinstimmen, lautet die Antwort `202 Accepted` mit einem Löschauftrag anstelle von `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
}
```Fragen Sie [Löschauftrag einer Session abrufen](https://docs.didit.me/de/management-api/sessions/get-deletion-job.md) alle paar Sekunden ab, bis `status` den Wert `COMPLETED` oder `FAILED` hat.- Der Auftrag meldet, wie viele Sitzungen auf die einzelnen Ergebnisse entfielen, aber niemals, welche Sitzungen er gelöscht hat.
- Ein `delete_all`-Auftrag löscht nur Sitzungen, die vor Ihrer Anfrage erstellt wurden. Sitzungen, die während der Ausführung gestartet werden, bleiben erhalten.
- Die Felder für Aufbewahrung und Anweisungen Ihrer Anfrage gelten für jede Sitzung, die der Auftrag löscht.
- Kann eine Gruppe noch nicht gelöscht werden, wiederholt der Auftrag den Vorgang selbstständig.
- Ein `FAILED`-Auftrag erklärt den Grund in `error`. Die Sitzungen, die er noch nicht erreicht hat, bestehen weiterhin: Wiederholen Sie die Anfrage, um sie zu löschen.## Beispiele> [tab] Nach Anzahl löschen
>
> ```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] Löschen und Vorlagen behalten
>
> ```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] Löschung aus Datenschutzgründen
>
> ```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] Alle löschen und Auftrag abfragen
>
> ```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"
> ```## Migration von 204-AntwortenBis zu dieser Version gab der Endpoint `204 No Content` zurück. Jetzt gibt er `200 OK` mit `results[]` zurück oder `202 Accepted` mit einem Löschauftrag, wenn mehr als 20 Sitzungen übereinstimmen. Aktualisieren Sie Clients, die auf `204` prüfen. Das Standardverhalten beim Löschen bleibt unverändert: Bestehende Anwendungen bleiben bei `delete_with_session`, bis Sie die Richtlinie ausdrücklich ändern.## Verwandte Inhalte- [Session löschen](https://docs.didit.me/de/sessions-api/delete-session.md)
- [Löschauftrag einer Session abrufen](https://docs.didit.me/de/management-api/sessions/get-deletion-job.md)
- [Biometrische Templates](https://docs.didit.me/de/management-api/biometric-templates/overview.md)
- [Datenaufbewahrung](https://docs.didit.me/de/console/data-retention.md)


## OpenAPI

````yaml de/openapi-25.json POST /v3/sessions/delete/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API für Ausweisverifizierung. Authentifizierung über den x-api-key-Header.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/sessions/delete/:
    post:
      tags:
        - Sessions
      summary: KYC-Sitzungen nach session_number gesammelt löschen
      description: >-
        Löschen Sie Benutzerverifizierungs-Sitzungen (KYC) per Massenvorgang
        anhand ihrer numerischen `session_number` oder jede KYC-Sitzung in Ihrer
        Anwendung mit `delete_all: true`.


        `session_number` ist der benutzerfreundliche, inkrementierende Zähler,
        der in der Sitzungsliste der Console angezeigt und von den Endpoints zur
        Sitzungserstellung und Entscheidungsfindung als `session_number`
        zurückgegeben wird; es ist **nicht** die `session_id`-UUID. Um eine
        Sitzung per UUID zu löschen oder eine Unternehmensverifizierungs-Sitzung
        (KYB) zu löschen, die dieser Endpoint niemals berührt, verwenden Sie
        stattdessen `DELETE /v3/session/{sessionId}/delete/`.


        **Bis zu 20 Sitzungen werden direkt in der Anfrage gelöscht, darüber
        hinaus wird ein Job ausgeführt.** Ausschlaggebend ist die Anzahl der
        übereinstimmenden Sitzungen, unabhängig davon, ob sie über
        `session_numbers` oder mit `delete_all` ausgewählt wurden:

        - Bis zu 20 übereinstimmende Sitzungen: Sie werden vor der Antwort
        gelöscht, die `200` mit einem Eintrag pro Sitzung in `results[]` ist.

        - Mehr als 20: Die Antwort ist `202` mit einem Löschjob, und die
        Sitzungen werden im Hintergrund gelöscht. Rufen Sie per Polling `GET
        /v3/sessions/delete/{job_id}/` auf, bis `status` den Wert `COMPLETED`
        oder `FAILED` hat. Ein Job meldet Anzahlen pro Ergebnis, niemals welche
        Sitzungen er gelöscht hat. Ein `delete_all`-Job löscht nur die
        Sitzungen, die vor der Anfrage erstellt wurden; Sitzungen, die während
        der Ausführung gestartet werden, werden nicht gelöscht.


        Jede gelöschte Sitzung wird genau wie beim
        Einzel-Sitzungs-Lösch-Endpoint behandelt: Die Sitzung, jeder darin
        enthaltene Verifizierungsversuch, ihre Entscheidung und extrahierten
        Daten, ihre zugehörigen Funktionsdatensätze (Ausweisverifizierung,
        Gesicht, Liveness, Gesichtsabgleich usw.) und alle ihre gespeicherten
        Dateien werden gelöscht, sie verschwindet aus jedem Lese-Endpoint und
        zuvor ausgestellte Medien-URLs können nicht mehr aufgelöst werden.
        Webhook-Zustellungen, die sich noch in der Warteschlange für eine
        gelöschte Sitzung befinden, sowie deren Wiederholungsversuche werden
        verworfen; bereits zugestellte Webhooks sind nicht betroffen.
        Sperrlisten-Einträge werden **nicht** entfernt, bereits verbrauchte
        Credits werden **nicht** erstattet und die übergeordneten
        Benutzer-Entitäten werden **nicht** gelöscht (verwenden Sie dafür `POST
        /v3/users/delete/`); für die Löschung wird kein Webhook ausgelöst. Die
        Löschung ist dauerhaft und unwiderruflich.


        **Auswahlsemantik:**

        - Mit `delete_all: true` können Sie die Auswahl mit den Filtern von `GET
        /v3/sessions/` eingrenzen, jeweils mit dem Präfix `filter_` versehen
        (zum Beispiel `filter_status`, `filter_workflow_id`,
        `filter_date_from`). Filter, die in „Sitzungen auflisten“ mehrere Werte
        annehmen (`status`, `workflow_id`, `country`, `region`, `document_type`,
        `document_name`, `session_type`, `warning`, `organization_name`),
        akzeptieren eine kommagetrennte Zeichenkette oder ein Array; die anderen
        nehmen einen einzelnen Wert an. Ein leerer Wert wird ignoriert. Filter
        greifen nur zusammen mit `delete_all`, und ein Löschjob wendet dieselben
        Filter an.

        - Ein unbekannter `filter_*`-Schlüssel oder ein Filterwert, der nicht
        gelesen werden kann, weist die gesamte Anfrage mit `400` ab, bevor etwas
        gelöscht wird, sodass ein fehlerhaft eingegebener Filter die Löschung
        niemals auf alle Sitzungen ausweitet.

        - Einträge in `session_numbers`, die nicht mit einer aktiven KYC-Sitzung
        in Ihrer Anwendung übereinstimmen (unbekannte Nummern, bereits gelöschte
        Sitzungen oder Sitzungen einer anderen Anwendung), werden
        **stillschweigend übersprungen**: Sie erscheinen nicht in `results` und
        werden im `total` eines Jobs nicht mitgezählt.

        - Validierungsfehler (ein nicht-numerischer Eintrag, eine leere Liste,
        weder `session_numbers` noch `delete_all` angegeben oder eine
        Vorlagenaufbewahrung, die die Anwendung nicht erfüllen kann) weisen die
        **gesamte Anfrage** mit `400` ab und löschen nichts.

        - Sitzungen werden in Gruppen gelöscht. Wenn eine Gruppe nicht gelöscht
        werden kann (zum Beispiel weil ein Speicherdienst nicht verfügbar ist),
        wird jede Sitzung in dieser Gruppe als `face_retention_outcome:
        failed_retryable` gemeldet und bleibt unverändert bestehen; die anderen
        Gruppen sind nicht betroffen. Wiederholen Sie die Anfrage für diese
        Sitzungen. Ein Job wiederholt eine solche Gruppe selbstständig.

        - Es gibt keine dokumentierte Obergrenze für die Listenlänge; das
        geteilte Schreib-Rate-Limit (unten) bildet die praktische Grenze.


        **Biometrische Gesichtsdaten:** Die optionalen Felder
        `retain_face_embeddings`, `face_retention_days`,
        `face_retention_deadline`, `deletion_instruction` und `instruction_id`
        haben dieselbe Bedeutung wie bei `DELETE
        /v3/session/{sessionId}/delete/` und gelten für jede übereinstimmende
        Sitzung. Jedes Ergebnis meldet sein eigenes `face_retention_outcome`.


        **Antwort:** `200 OK` mit `results[]` für bis zu 20 übereinstimmende
        Sitzungen oder `202 Accepted` mit einem Löschjob für mehr. Jedes
        Ergebnis bestätigt die Löschung mit Ausnahme von
        `face_retention_outcome: failed_retryable`, was eine Sitzung meldet, die
        NICHT gelöscht wurde und wiederholt werden sollte. Frühere Versionen
        dieses Endpoints gaben `204 No Content` zurück; aktualisieren Sie
        Clients, die auf `204` prüfen.


        **Idempotenz:** Das Wiederholen derselben Anfrage löscht nichts weiter:
        Nummern, die keiner Sitzung mehr entsprechen, werden übersprungen.


        **`delete_all: true` (destruktiv):** Löscht **jede** verbleibende
        KYC-Sitzung in der Anwendung; `session_numbers` wird ignoriert, wenn
        gesetzt. Es gibt keinen Bestätigungsschritt und kein Rückgängigmachen.


        **Authentifizierung:** API-Schlüssel im Header `x-api-key`. Fehlende
        oder ungültige Anmeldedaten geben `403` zurück (`{"detail": "You do not
        have permission to perform this action."}`); diese API gibt niemals
        `401` zurück.


        **Rate-Limit:** Geteiltes Schreibkontingent von 300 Anfragen/Min. pro
        API-Schlüssel über alle POST/PATCH/DELETE-Endpoints hinweg; eine
        Überschreitung gibt `429` zurück.


        Dieser Endpoint akzeptiert ausschließlich API-Schlüssel. Bearer-Token
        von Benutzern der Business Console werden mit `403` abgelehnt (im
        Gegensatz zum Löschen einer einzelnen Sitzung, das beides akzeptiert).


        **Eingereichte regulatorische Berichte:** Wenn sich die ausgewählten
        Daten in einem finalisierten regulatorischen Bericht befinden, wird die
        gesamte Anfrage mit `409` abgelehnt und nichts gelöscht. Der Body
        verwendet `code: in_filed_report` und benennt jeden Bericht mit `uuid`,
        `report_number`, `report_type` und `case_uuid`. Löschen Sie die Berichte
        und wiederholen Sie dann die Anfrage.
      operationId: batch_delete_sessions
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                session_numbers:
                  type: array
                  description: >-
                    Numerische `session_number`-Werte der zu löschenden
                    KYC-Sitzungen als reine Ziffern-Strings (JSON-Zahlen werden
                    ebenfalls akzeptiert und umgewandelt). Erforderlich, es sei
                    denn, `delete_all` ist `true`; eine leere Liste gibt `400`
                    zurück. Jeder nicht aus Ziffern bestehende Eintrag lehnt die
                    gesamte Anfrage mit `400` ab (es sei denn, `delete_all` ist
                    `true`, in welchem Fall die Validierung übersprungen und die
                    Einträge ignoriert werden). Nummern, die keiner Live-Sitzung
                    in Ihrer Anwendung entsprechen, werden stillschweigend
                    übersprungen.
                  items:
                    type: string
                    pattern: ^[0-9]+$
                    example: '1001'
                  minItems: 1
                  example:
                    - '1001'
                    - '1002'
                    - '1003'
                delete_all:
                  type: boolean
                  description: >-
                    Wenn `true`, wird jede verbleibende KYC-Sitzung in der
                    aufrufenden Anwendung gelöscht und `session_numbers` wird
                    ignoriert, es sei denn, Sie schränken die Auswahl mit
                    `filter_*`-Schlüsseln ein. Mehr als 20 übereinstimmende
                    Sitzungen werden als Löschauftrag (`202`) ausgeführt, der
                    nur die vor der Anfrage erstellten Sitzungen umfasst.
                    Standardmäßig `false`. Unumkehrbar; es gibt keinen
                    Bestätigungsschritt.
                  default: false
                  example: false
                retain_face_embeddings:
                  type: boolean
                  nullable: true
                  description: >-
                    Überschreibt die `face_retention_policy` der Anwendung für
                    diese Löschung. `true` behält ein bildfreies biometrisches
                    Gesichts-Template, das dem Benutzer der Sitzung zugeordnet
                    ist, bei, nachdem die Sitzung gelöscht wurde; `false` löscht
                    das Gesichts-Embedding mit der Sitzung; weglassen oder
                    `null`, um der Richtlinie der Anwendung zu folgen. Wird für
                    KYB-Sitzungen und für Sitzungen ohne Gesichts-Embedding
                    ignoriert.
                  example: true
                face_retention_days:
                  type: integer
                  minimum: 1
                  maximum: 3650
                  description: >-
                    Endliche Aufbewahrungsdauer in Tagen für ein aufbewahrtes
                    Template. Erforderlich, wenn ein Template aufbewahrt wird,
                    es sei denn, die Anwendung legt bereits
                    `face_retention_days` fest. Das `expires_at` des Templates
                    wird durch den frühesten der folgenden Zeitpunkte bestimmt:
                    diese Dauer, der allgemeine Datenaufbewahrungszeitraum der
                    Anwendung und `face_retention_deadline`.
                  example: 365
                face_retention_deadline:
                  type: string
                  format: date-time
                  description: >-
                    Optionaler fester Ablaufzeitpunkt für ein aufbewahrtes
                    Template. Muss in der Zukunft liegen.
                  example: '2027-08-28T00:00:00Z'
                deletion_instruction:
                  type: string
                  enum:
                    - operational_session_delete
                    - privacy_erasure
                  default: operational_session_delete
                  description: >-
                    Die Art der Anweisung, die Sie erteilen.
                    `operational_session_delete` löscht die Sitzung und behält
                    ein Template nur dann bei, wenn die Richtlinie oder
                    `retain_face_embeddings` dies vorschreibt. `privacy_erasure`
                    löscht jedes beibehaltene biometrische Template, das mit dem
                    Benutzer der Sitzung verknüpft ist, bevor die Sitzung
                    gelöscht wird, kann nicht durch die Anwendungsrichtlinie
                    überschrieben werden und kann nicht mit
                    `retain_face_embeddings: true` kombiniert werden (`400`).
                  example: operational_session_delete
                instruction_id:
                  type: string
                  maxLength: 255
                  description: >-
                    Ihre dauerhafte Referenz für diese Löschanweisung
                    (beispielsweise die ID eines Löschtickets). Wird im
                    Audit-Log und auf jedem aufbewahrten Template erfasst. Wird
                    von Didit generiert, wenn sie weggelassen wird.
                  example: dsar-2026-0142
                filter_status:
                  description: >-
                    Grenzt ein `delete_all` auf die Sitzungen ein, die dem
                    Filter `status` von [List
                    Sessions](/de/sessions-api/list-sessions) entsprechen, mit
                    denselben Werten. Eine kommagetrennte Zeichenkette oder ein
                    Array. Wird ohne `delete_all` ignoriert. Ein leerer Wert
                    wird ignoriert und schränkt die Auswahl nicht ein.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_vendor_data:
                  description: >-
                    Grenzt ein `delete_all` auf die Sitzungen ein, die dem
                    Filter `vendor_data` von [List
                    Sessions](/de/sessions-api/list-sessions) entsprechen, mit
                    demselben Wert. Ein einzelner Wert, keine Liste: Ein Array
                    wird zu einem einzelnen kommagetrennten Text zusammengefügt,
                    sodass mehrere Werte nicht als Alternativen abgeglichen
                    werden. Wird ohne `delete_all` ignoriert. Ein leerer Wert
                    wird ignoriert und schränkt die Auswahl nicht ein.
                  type: string
                filter_search:
                  description: >-
                    Grenzt ein `delete_all` auf die Sitzungen ein, die dem
                    Filter `search` von [List
                    Sessions](/de/sessions-api/list-sessions) entsprechen, mit
                    demselben Wert. Ein einzelner Wert, keine Liste: Ein Array
                    wird zu einem einzelnen kommagetrennten Text zusammengefügt,
                    sodass mehrere Werte nicht als Alternativen abgeglichen
                    werden. Wird ohne `delete_all` ignoriert. Ein leerer Wert
                    wird ignoriert und schränkt die Auswahl nicht ein.
                  type: string
                filter_workflow_id:
                  description: >-
                    Grenzt ein `delete_all` auf die Sitzungen ein, die dem
                    Filter `workflow_id` von [List
                    Sessions](/de/sessions-api/list-sessions) entsprechen, mit
                    denselben Werten. Eine kommagetrennte Zeichenkette oder ein
                    Array. Wird ohne `delete_all` ignoriert. Ein leerer Wert
                    wird ignoriert und schränkt die Auswahl nicht ein.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_date_from:
                  description: >-
                    Grenzt ein `delete_all` auf die Sitzungen ein, die dem
                    `date_from`-Filter von [Sitzungen
                    auflisten](/de/sessions-api/list-sessions) entsprechen, mit
                    demselben Wert. Ein einzelner Wert, keine Liste: Ein Array
                    wird zu einem einzelnen, durch Kommas getrennten Wert
                    zusammengefügt, sodass mehrere Werte mit `400` abgelehnt
                    werden. Wird ohne `delete_all` ignoriert. Ein leerer Wert
                    wird ignoriert und schränkt die Auswahl nicht ein.
                  type: string
                  format: date
                filter_date_to:
                  description: >-
                    Grenzt ein `delete_all` auf die Sitzungen ein, die dem
                    `date_to`-Filter von [Sitzungen
                    auflisten](/de/sessions-api/list-sessions) entsprechen, mit
                    demselben Wert. Ein einzelner Wert, keine Liste: Ein Array
                    wird zu einem einzelnen, durch Kommas getrennten Wert
                    zusammengefügt, sodass mehrere Werte mit `400` abgelehnt
                    werden. Wird ohne `delete_all` ignoriert. Ein leerer Wert
                    wird ignoriert und schränkt die Auswahl nicht ein.
                  type: string
                  format: date
                filter_country:
                  description: >-
                    Grenzt ein `delete_all` auf die Sitzungen ein, die dem
                    `country`-Filter von [Sitzungen
                    auflisten](/de/sessions-api/list-sessions) entsprechen, mit
                    denselben Werten. Eine kommagetrennte Zeichenfolge oder ein
                    Array. Wird ohne `delete_all` ignoriert. Ein leerer Wert
                    wird ignoriert und schränkt die Auswahl nicht ein.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_document_type:
                  description: >-
                    Grenzt ein `delete_all` auf die Sitzungen ein, die dem
                    `document_type`-Filter von [Sitzungen
                    auflisten](/de/sessions-api/list-sessions) entsprechen, mit
                    denselben Werten. Eine kommagetrennte Zeichenfolge oder ein
                    Array. Wird ohne `delete_all` ignoriert. Ein leerer Wert
                    wird ignoriert und schränkt die Auswahl nicht ein.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_document_name:
                  description: >-
                    Grenzt ein `delete_all` auf die Sitzungen ein, die dem
                    `document_name`-Filter von [Sitzungen
                    auflisten](/de/sessions-api/list-sessions) entsprechen, mit
                    denselben Werten. Eine kommagetrennte Zeichenfolge oder ein
                    Array. Wird ohne `delete_all` ignoriert. Ein leerer Wert
                    wird ignoriert und schränkt die Auswahl nicht ein.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_region:
                  description: >-
                    Grenzt ein `delete_all` auf die Sitzungen ein, die dem
                    Filter `region` von [List
                    Sessions](/de/sessions-api/list-sessions) entsprechen, mit
                    denselben Werten. Eine kommagetrennte Zeichenkette oder ein
                    Array. Wird ohne `delete_all` ignoriert. Ein leerer Wert
                    wird ignoriert und schränkt die Auswahl nicht ein.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_didit_internal_id:
                  description: >-
                    Grenzt ein `delete_all` auf die Sitzungen ein, die dem
                    `didit_internal_id`-Filter von [Sitzungen
                    auflisten](/de/sessions-api/list-sessions) entsprechen, mit
                    demselben Wert. Ein einzelner Wert, keine Liste: Ein Array
                    wird zu einem einzelnen, durch Kommas getrennten Wert
                    zusammengefügt, sodass mehrere Werte mit `400` abgelehnt
                    werden. Wird ohne `delete_all` ignoriert. Ein leerer Wert
                    wird ignoriert und schränkt die Auswahl nicht ein.
                  type: string
                  format: uuid
                filter_session_type:
                  description: >-
                    Grenzt ein `delete_all` auf die Sitzungen ein, die dem
                    Filter `session_type` von [List
                    Sessions](/de/sessions-api/list-sessions) entsprechen, mit
                    denselben Werten. Eine kommagetrennte Zeichenkette oder ein
                    Array. Wird ohne `delete_all` ignoriert. Ein leerer Wert
                    wird ignoriert und schränkt die Auswahl nicht ein.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_api_service:
                  description: >-
                    Grenzt ein `delete_all` auf die Sitzungen ein, die dem
                    `api_service`-Filter von [Sitzungen
                    auflisten](/de/sessions-api/list-sessions) entsprechen, mit
                    demselben Wert. Ein einzelner Wert, keine Liste: Ein Array
                    wird zu einem einzelnen, durch Kommas getrennten Wert
                    zusammengefügt, sodass mehrere Werte mit `400` abgelehnt
                    werden. Wird ohne `delete_all` ignoriert. Ein leerer Wert
                    wird ignoriert und schränkt die Auswahl nicht ein.
                  type: string
                filter_screened_full_name:
                  description: >-
                    Grenzt ein `delete_all` auf die Sitzungen ein, die dem
                    Filter `screened_full_name` von [List
                    Sessions](/de/sessions-api/list-sessions) entsprechen, mit
                    demselben Wert. Ein einzelner Wert, keine Liste: Ein Array
                    wird zu einem einzelnen kommagetrennten Text zusammengefügt,
                    sodass mehrere Werte nicht als Alternativen abgeglichen
                    werden. Wird ohne `delete_all` ignoriert. Ein leerer Wert
                    wird ignoriert und schränkt die Auswahl nicht ein.
                  type: string
                filter_warning:
                  description: >-
                    Grenzt ein `delete_all` auf die Sitzungen ein, die dem
                    Filter `warning` von [List
                    Sessions](/de/sessions-api/list-sessions) entsprechen, mit
                    denselben Werten. Eine kommagetrennte Zeichenkette oder ein
                    Array. Wird ohne `delete_all` ignoriert. Ein leerer Wert
                    wird ignoriert und schränkt die Auswahl nicht ein.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_status_initialized_as_in_review:
                  description: >-
                    Grenzt ein `delete_all` auf die Sitzungen ein, die dem
                    Filter `status_initialized_as_in_review` von [List
                    Sessions](/de/sessions-api/list-sessions) entsprechen, mit
                    denselben Werten. Wird ohne `delete_all` ignoriert. Ein
                    leerer Wert wird ignoriert und schränkt die Auswahl nicht
                    ein.
                  type: boolean
                filter_is_kyc_to_be_reviewed:
                  description: >-
                    Grenzt ein `delete_all` auf die Sitzungen ein, die dem
                    `is_kyc_to_be_reviewed`-Filter von [Sitzungen
                    auflisten](/de/sessions-api/list-sessions) entsprechen, mit
                    denselben Werten. Wird ohne `delete_all` ignoriert. Ein
                    leerer Wert wird ignoriert und schränkt die Auswahl nicht
                    ein.
                  type: boolean
                filter_euuid:
                  description: >-
                    Grenzt ein `delete_all` auf die Sitzungen ein, die dem
                    `euuid`-Filter von [Sitzungen
                    auflisten](/de/sessions-api/list-sessions) entsprechen, mit
                    demselben Wert. Ein einzelner Wert, keine Liste: Ein Array
                    wird zu einem einzelnen, durch Kommas getrennten Wert
                    zusammengefügt, sodass mehrere Werte mit `400` abgelehnt
                    werden. Wird ohne `delete_all` ignoriert. Ein leerer Wert
                    wird ignoriert und schränkt die Auswahl nicht ein.
                  type: string
                  format: uuid
                filter_organization_name:
                  description: >-
                    Grenzt ein `delete_all` auf die Sitzungen ein, die dem
                    Filter `organization_name` von [List
                    Sessions](/de/sessions-api/list-sessions) entsprechen, mit
                    denselben Werten. Eine kommagetrennte Zeichenkette oder ein
                    Array. Mit einem API-Schlüssel kann dies nur mit dem Namen
                    Ihrer eigenen Organisation übereinstimmen, sodass entweder
                    alle Ihre Sitzungen oder keine ausgewählt werden. Wird ohne
                    `delete_all` ignoriert. Ein leerer Wert wird ignoriert und
                    schränkt die Auswahl nicht ein.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
            examples:
              Specific sessions:
                summary: Bestimmte Sitzungen nach Nummer löschen
                value:
                  session_numbers:
                    - '1001'
                    - '1002'
                    - '1003'
              All sessions:
                summary: Jede KYC-Sitzung in der Anwendung löschen
                value:
                  delete_all: true
              Delete and retain templates:
                summary: >-
                  Sitzungen löschen, aber bildfreie biometrische Templates für
                  365 Tage behalten
                value:
                  session_numbers:
                    - '1001'
                    - '1002'
                  retain_face_embeddings: true
                  face_retention_days: 365
                  instruction_id: post-approval-cleanup-2026-08
              Privacy erasure:
                summary: >-
                  Sitzungen löschen und jede aufbewahrte Vorlage für deren
                  Benutzer löschen
                value:
                  session_numbers:
                    - '1001'
                  deletion_instruction: privacy_erasure
                  instruction_id: dsar-2026-0142
              Filtered delete_all:
                summary: >-
                  Jede im September 2026 erstellte abgelehnte Sitzung eines
                  Workflows löschen
                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: >-
            Bis zu 20 Sitzungen stimmten überein und wurden in der Anfrage
            verarbeitet. Ein Ergebnis pro übereinstimmender Sitzung; Nummern,
            die mit nichts übereinstimmten (unbekannt oder bereits gelöscht),
            werden übersprungen und erscheinen nicht. Ein Ergebnis bestätigt die
            Löschung, außer wenn `face_retention_outcome` den Wert
            `failed_retryable` hat: Diese Sitzung wurde NICHT gelöscht und
            sollte wiederholt werden.
          content:
            application/json:
              schema:
                type: object
                properties:
                  results:
                    type: array
                    items:
                      type: object
                      properties:
                        session_id:
                          type: string
                          format: uuid
                          description: Die gelöschte Sitzung.
                        session_number:
                          type: integer
                          nullable: true
                          description: Die Nummer der gelöschten Sitzung.
                        face_retention_outcome:
                          type: string
                          enum:
                            - retained_with_user
                            - deleted
                            - none
                            - ineligible_no_vendor_user
                            - failed_retryable
                          description: >-
                            Was mit den biometrischen Gesichtsdaten der Sitzung
                            passiert ist. `deleted`: Das Gesichts-Embedding
                            wurde mit der Sitzung gelöscht (Standard).
                            `retained_with_user`: Die Sitzung wird gelöscht und
                            ein bildfreies biometrisches Template bleibt beim
                            Benutzer verankert; siehe `biometric_template_uuid`.
                            `none`: Die Sitzung hatte kein Gesichts-Embedding
                            (beispielsweise eine reine Dokumenten-KYC-Sitzung
                            ohne Liveness-Selfie; KYB-Sitzungen werden von
                            diesem Endpoint niemals ausgewählt).
                            `ineligible_no_vendor_user`: Die Aufbewahrung wurde
                            angefordert, aber die Sitzung hat keinen verknüpften
                            Benutzer, daher wurde das Embedding mit der Sitzung
                            gelöscht. `failed_retryable` (nur Batch-Endpoint):
                            Die Gruppe, mit der diese Sitzung gelöscht wurde,
                            konnte nicht gelöscht werden (ein Speicherdienst,
                            ein biometrischer Speicher oder ein
                            Überwachungsanbieter war nicht verfügbar); diese
                            Sitzung ist weiterhin vorhanden, wiederholen Sie die
                            Anfrage für sie.
                        biometric_template_uuid:
                          type: string
                          format: uuid
                          nullable: true
                          description: >-
                            ID des aufbewahrten biometrischen Templates, wenn
                            `face_retention_outcome` gleich `retained_with_user`
                            ist; andernfalls `null`. Verwalten Sie es über
                            `/v3/biometric-templates/{template_uuid}/`.
                        biometric_template_expires_at:
                          type: string
                          format: date-time
                          nullable: true
                          description: >-
                            Wann das aufbewahrte biometrische Template gelöscht
                            wird, wenn `face_retention_outcome` auf
                            `retained_with_user` steht; `null`, wenn kein
                            Template aufbewahrt wird.
                        deleted_child_verifications:
                          type: integer
                          description: >-
                            Auf diesem Endpoint immer `0`, da er nur
                            KYC-Sitzungen löscht. Das Löschen einer
                            Unternehmensverifizierungs-Sitzung (KYB) mit `DELETE
                            /v3/session/{sessionId}/delete/` meldet die von ihr
                            erstellten Verifizierungen, die mit ihr gelöscht
                            wurden.
              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: >-
            Mehr als 20 Sitzungen stimmen überein. Sie werden im Hintergrund
            gelöscht; führen Sie ein Polling auf `GET
            /v3/sessions/delete/{job_id}/` durch, bis `status` `COMPLETED` oder
            `FAILED` ist.
          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: >-
            Validierungsfehler – es wurde nichts gelöscht. Fehlerwerte sind
            Arrays von Meldungsstrings mit dem Feldnamen als Schlüssel.
          content:
            application/json:
              schema:
                type: object
                properties:
                  session_numbers:
                    type: array
                    items:
                      type: string
                additionalProperties:
                  description: >-
                    Andere Schlüssel: ein `filter_*`-Schlüssel, der kein Filter
                    zum Auflisten von Sitzungen ist (`"Unknown filter."`), oder
                    ein `filter_*`-Schlüssel, dessen Wert nicht gelesen werden
                    kann (mit diesem `filter_*`-Schlüssel als Schlüssel und
                    einem Array von Meldungen).
              examples:
                Missing selector:
                  summary: Weder session_numbers noch delete_all angegeben
                  value:
                    session_numbers:
                      - This field is required unless delete_all is true.
                Empty list:
                  summary: session_numbers ist ein leeres Array
                  value:
                    session_numbers:
                      - This list may not be empty.
                Non-numeric entry:
                  summary: >-
                    session_numbers enthält eine Zeichenfolge, die nicht nur aus
                    Ziffern besteht
                  value:
                    session_numbers:
                      - All session_numbers must be numeric.
                Privacy erasure cannot retain:
                  summary: >-
                    deletion_instruction privacy_erasure kombiniert mit
                    retain_face_embeddings true
                  value:
                    retain_face_embeddings:
                      - Privacy erasure cannot retain biometric templates.
                No finite retention duration:
                  summary: >-
                    Aufbewahrung ohne face_retention_days in der Anfrage oder
                    der Anwendung angefordert
                  value:
                    detail: >-
                      A finite biometric-template retention duration is
                      required.
                Unknown filter:
                  summary: >-
                    Ein filter_*-Schlüssel, den Sitzungen auflisten nicht
                    enthält
                  value:
                    filter_reviewer: Unknown filter.
                Unreadable filter value:
                  summary: Ein Filterwert, der nicht gelesen werden kann
                  value:
                    filter_date_from:
                      - Enter a valid date.
        '403':
          description: >-
            Fehlender API-Schlüssel. Ein fehlender Schlüssel führt zu einer
            `403`-Antwort; ein falscher, widerrufener oder abgelaufener
            Schlüssel führt zu einer `401`-Antwort.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              examples:
                Missing or invalid API key:
                  summary: >-
                    Kein x-api-key-Header vorhanden oder der Schlüssel ist
                    ungültig
                  value:
                    detail: You do not have permission to perform this action.
        '409':
          description: >-
            Eine ausgewählte Sitzung ist Teil eines abgeschlossenen
            regulatorischen Berichts. Es wird nichts gelöscht.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InFiledReportError'
        '429':
          description: >-
            Gemeinsames Schreib-Rate-Limit überschritten (300
            POST/PATCH/DELETE-Anfragen pro Minute pro API-Schlüssel). Prüfen Sie
            `Retry-After` und die `X-RateLimit-*`-Antwort-Header vor einem
            Wiederholungsversuch.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              examples:
                Rate limited:
                  summary: Schreibbudget aufgebraucht
                  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: >-
        Eine Massenlöschung von Sitzungen, die im Hintergrund ausgeführt wird:
        Fortschritt und Anzahlen pro Ergebnis, niemals welche Sitzungen gelöscht
        wurden.
      properties:
        job_id:
          type: string
          format: uuid
          description: >-
            Rufen Sie `GET /v3/sessions/delete/{job_id}/` mit dieser ID
            regelmäßig ab.
        status:
          type: string
          enum:
            - PENDING
            - PROCESSING
            - COMPLETED
            - FAILED
          description: >-
            `PENDING`: Akzeptiert, noch nicht gestartet. `PROCESSING`: Wird
            gelöscht; `processed` und `outcomes` werden aktualisiert.
            `COMPLETED`: Jede ausgewählte Sitzung wurde berücksichtigt.
            `FAILED`: Der Auftrag wurde vorzeitig abgebrochen; siehe `error`.
        total:
          type: integer
          description: >-
            Sitzungen, die ausgewählt wurden, als die Löschung angefordert
            wurde.
        processed:
          type: integer
          description: Sitzungen, die der Job bisher abgeschlossen hat.
        outcomes:
          type: object
          description: >-
            Wie viele Sitzungen mit welchem Ergebnis geendet haben. Jeder
            Schlüssel ist immer vorhanden.
          properties:
            deleted:
              type: integer
              description: Zusammen mit ihrem Gesichts-Embedding gelöschte Sitzungen.
            none:
              type: integer
              description: Gelöschte Sitzungen, die kein Gesichts-Embedding hatten.
            retained_with_user:
              type: integer
              description: >-
                Gelöschte Sitzungen, bei denen ein bildfreies biometrisches
                Template für ihren Benutzer aufbewahrt wurde, wie von der
                Anfrage oder der Anwendungsrichtlinie gefordert.
            ineligible_no_vendor_user:
              type: integer
              description: >-
                Gelöschte Sitzungen samt ihrem Gesichts-Embedding, da eine
                Aufbewahrung angefordert wurde, sie jedoch keinen verknüpften
                Benutzer hatten.
            failed_retryable:
              type: integer
              description: >-
                Sitzungen, die als nicht gelöscht gemeldet wurden. Ein Job
                versucht, eine Gruppe, die er nicht selbst löschen konnte,
                erneut zu löschen, anstatt sie hier mitzuzählen.
            already_deleted:
              type: integer
              description: >-
                Ausgewählte Sitzungen, die bereits gelöscht waren,
                beispielsweise durch eine andere Anfrage, als der Job sie
                erreichte.
        deleted_child_verifications:
          type: integer
          description: >-
            Verifizierungen, die durch die gelöschten
            Unternehmensverifizierungen erstellt wurden und mit ihnen gelöscht
            werden. Immer `0` bei einem Job, der durch `POST
            /v3/sessions/delete/` gestartet wurde, da dieser nur KYC-Sitzungen
            löscht.
        error:
          type: string
          nullable: true
          description: >-
            `null`, außer wenn `status` auf `FAILED` steht; dann der Grund,
            warum die Löschung gestoppt wurde. Die Sitzungen, die der Job noch
            nicht erreicht hatte, bleiben bestehen: Wiederholen Sie die Anfrage,
            um sie zu löschen.
        created_at:
          type: string
          format: date-time
          description: Wann die Löschung angefordert wurde.
        completed_at:
          type: string
          format: date-time
          nullable: true
          description: Wann der Job beendet wurde; `null`, während er läuft.
    InFiledReportError:
      type: object
      description: >-
        Die Löschung wird verweigert, da sich die ausgewählten Daten in einem
        abgeschlossenen regulatorischen Bericht befinden. Es wird nichts
        gelöscht. Löschen Sie den Bericht und wiederholen Sie die Anfrage.
      required:
        - detail
        - code
      properties:
        detail:
          type: string
        code:
          type: string
          enum:
            - in_filed_report
          description: >-
            Stabiler Fehlercode für eine Löschung, die durch einen finalisierten
            regulatorischen Bericht blockiert wird.
        reports:
          type: array
          items:
            $ref: '#/components/schemas/FiledRegulatoryReport'
          description: >-
            Berichte, die das Löschen einer Person, eines Unternehmens, eines
            Falls oder einer Sitzung blockieren.
        transactions:
          type: array
          items:
            $ref: '#/components/schemas/FiledReportTransaction'
          description: >-
            Transaktionen, die das Löschen einer Transaktion blockieren, jeweils
            mit den Berichten, in denen sie aufgeführt sind.
    FiledRegulatoryReport:
      type: object
      description: >-
        Ein finalisierter regulatorischer Bericht, der die angeforderte Löschung
        verhindert.
      required:
        - uuid
        - report_number
        - report_type
        - case_uuid
      properties:
        uuid:
          type: string
          format: uuid
          description: Berichts-UUID.
        report_number:
          type: string
          description: In der Console angezeigte Berichtsnummer (z. B. SAR-0001).
        report_type:
          type: string
          enum:
            - SAR
            - STR
            - CTR
            - TTR
            - UTR
            - IFT
            - CBR
            - TFR
          description: Art des aufsichtsrechtlichen Berichts.
        case_uuid:
          type: string
          format: uuid
          description: Fall, zu dem der Bericht gehört.
    FiledReportTransaction:
      type: object
      description: >-
        Eine Transaktion, die nicht gelöscht werden kann, da ein abgeschlossener
        regulatorischer Bericht sie auflistet.
      required:
        - uuid
        - transaction_id
        - reports
      properties:
        uuid:
          type: string
          format: uuid
          description: Didit-Transaktions-UUID.
        transaction_id:
          type: string
          description: >-
            Die Transaktionskennung, die bei der Erstellung der Transaktion
            angegeben wurde.
        reports:
          type: array
          items:
            $ref: '#/components/schemas/FiledRegulatoryReport'
          description: Abgeschlossene Berichte, die diese Transaktion aufführen.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Der API-Schlüssel Ihrer Anwendung, aus Entwickler -> API-Schlüssel in
        der Business Console. Der Primärschlüssel hat Vollzugriff. Ein benannter
        Schlüssel kann im Geltungsbereich eingeschränkt werden: keine, Lese-
        oder Schreibberechtigung pro Ressource, beschränkt auf bestimmte
        Workflows oder genehmigte Sitzungen, auf eine Liste von IP-Adressen und
        auf ein Ablaufdatum. 401 bedeutet, dass der Schlüssel falsch, widerrufen
        oder abgelaufen ist; 403 bedeutet, dass kein Schlüssel gesendet wurde,
        der Schlüssel keinen Zugriff auf diese Ressource oder Aktion hat oder
        die Anfrage von einer Adresse außerhalb seiner IP-Liste stammte; 404 bei
        einer Sitzungsroute bedeutet, dass die Sitzung außerhalb der Workflows
        oder Status des Schlüssels liegt. Ein Schlüssel ohne Medienzugriff
        erhält Bild-, Video- und PDF-URLs als null, und ein Schlüssel ohne
        Schreibberechtigung für Sitzungen erhält Sitzungslinks und Token als
        null. Siehe https://docs.didit.me/console/api-keys.

````

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