> ## 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 de suppression groupée de sessions KYC

> Didit : supprimez plusieurs sessions KYC par numéro ou toutes d'un coup. Jusqu'à 20, résultat par session ; au-delà, une tâche à interroger.



Prompt de suppression de sessions par lot
        Copier le prompt dans le presse-papiers



      
      

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



      
      

Coller dans

## ComportementChaque session correspondante est supprimée exactement comme avec [Supprimer une session](https://docs.didit.me/fr/sessions-api/delete-session.md) : la session, chaque tentative de vérification qu'elle contient, sa décision et ses données extraites, ses enregistrements de fonctionnalités et tous ses fichiers stockés sont supprimés, elle disparaît de tous les endpoints de lecture, et les URL de médias émises auparavant cessent de fonctionner. Les envois de webhook encore en file d'attente pour une session supprimée, ainsi que leurs nouvelles tentatives, sont abandonnés ; les webhooks déjà livrés ne sont pas affectés. La suppression est définitive et irréversible.Si l'une des sessions sélectionnées fait partie d'un rapport réglementaire finalisé, la requête entière renvoie `409` et rien n'est supprimé. La réponse utilise `code: in_filed_report` et nomme chaque rapport. Supprimez chaque rapport avec [Supprimer un rapport](https://docs.didit.me/fr/management-api/regulatory-reports/delete.md), puis répétez la requête. La suppression d'un rapport ne supprime pas la session : celle-ci reste en place tant que vous n'avez pas répété la requête.Le nombre de sessions correspondantes détermine la réponse, que vous les sélectionniez avec `session_numbers` ou avec `delete_all` :| Sessions correspondantes | Réponse |
| - | - |
| Jusqu'à 20 | `200 OK` une fois les sessions supprimées, avec un résultat par session correspondante dans `results`. |
| Plus de 20 | `202 Accepted` avec une tâche de suppression. Les sessions sont supprimées en arrière-plan ; interrogez [Obtenir la tâche de suppression de session](https://docs.didit.me/fr/management-api/sessions/get-deletion-job.md) jusqu'à ce qu'elle se termine. |Un résultat confirme que la session a été supprimée, sauf lorsque son `face_retention_outcome` vaut `failed_retryable` : cette session n'a **pas** été supprimée et reste en place. Traitez ce résultat comme un échec à réessayer, jamais comme une confirmation de suppression.
Les numéros qui ne correspondent à aucune session KYC active dans votre application sont ignorés et n'apparaissent pas dans `results`.## Restreindre `delete_all` avec des filtresAvec `delete_all: true`, vous pouvez restreindre la sélection grâce aux filtres de [Lister les sessions](https://docs.didit.me/fr/sessions-api/list-sessions.md), chacun préfixé par `filter_`.
Ils acceptent les mêmes valeurs que les paramètres de requête.
Un filtre qui accepte plusieurs valeurs (`status`, `workflow_id`, `country`, `region`, `document_type`, `document_name`, `session_type`, `warning`, `organization_name`) accepte une chaîne séparée par des virgules ou un tableau :```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"
}
```- Les filtres ne s'appliquent qu'avec `delete_all` ; avec `session_numbers`, ils sont vérifiés mais ne modifient pas la sélection.
- Chaque autre filtre n'accepte qu'une seule valeur.
  Un tableau est réuni en une seule valeur séparée par des virgules : plusieurs dates, UUID ou valeurs `api_service` renvoient donc `400`, et plusieurs textes `vendor_data`, `search` ou `screened_full_name` ne sont pas comparés comme des alternatives.
- Un filtre dont la valeur est vide est ignoré, et ne restreint donc pas la sélection.
- Une clé `filter_*` inconnue renvoie `400` avec `{"filter_reviewer": "Unknown filter."}`, et une valeur illisible renvoie `400` indexée par cette clé `filter_*`, comme `{"filter_date_from": ["Enter a valid date."]}`.
  Dans ces deux cas, rien n'est supprimé : un filtre mal saisi n'élargit donc jamais la suppression à toutes les sessions.
- Une tâche de suppression applique les mêmes filtres et, comme tout `delete_all`, ne couvre que les sessions créées avant la requête.## Champs de conservation et d'instructionL'endpoint accepte les mêmes champs optionnels que l'endpoint de suppression d'une session unique et les applique à chaque session correspondante :| Champ | Type | Description |
| - | - | - |
| `retain_face_embeddings` | booléen ou null | Remplace le `face_retention_policy` de l'application pour cette requête. |
| `face_retention_days` | entier (1-3650) | Durée de conservation finie des gabarits conservés. Obligatoire lors d'une conservation, sauf si l'application définit `face_retention_days`. |
| `face_retention_deadline` | datetime (ISO 8601) | Date d'expiration maximale facultative, qui doit être dans le futur. |
| `deletion_instruction` | `operational_session_delete` (par défaut) ou `privacy_erasure` | `privacy_erasure` purge chaque gabarit conservé de l'utilisateur associé à chaque session avant de supprimer la session, et ne peut pas être combiné avec `retain_face_embeddings: true`. |
| `instruction_id` | chaîne (max 255) | Votre référence durable pour cette instruction. Enregistrée dans le journal d'audit et sur chaque gabarit conservé. |Consultez [Supprimer une session](https://docs.didit.me/fr/sessions-api/delete-session.md#données-biométriques-faciales--supprimer-ou-conserver) pour savoir ce que contient, et ce que ne contient pas, un gabarit conservé, comment `expires_at` est calculé et ce que fait une instruction d'effacement pour raisons de confidentialité.## Résultats par sessionPour jusqu'à 20 sessions correspondantes, `200 OK` renvoie un résultat par session :```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 }
  ]
}
```Chaque résultat contient les mêmes champs que la réponse de [Supprimer une session](https://docs.didit.me/fr/sessions-api/delete-session.md#réponse). `biometric_template_expires_at` indique le moment où un gabarit conservé est supprimé, et `deleted_child_verifications` vaut toujours `0` ici, car cet endpoint ne supprime que des sessions KYC.| `face_retention_outcome` | Signification |
| - | - |
| `deleted` | La session et son embedding facial sont supprimés. Comportement par défaut. |
| `retained_with_user` | La session est supprimée. Un gabarit biométrique sans image reste rattaché à l'utilisateur ; son identifiant est `biometric_template_uuid`. |
| `none` | La session ne comportait aucun embedding facial à supprimer ni à conserver. |
| `ineligible_no_vendor_user` | La conservation a été demandée, mais la session n'est pas liée à un utilisateur : rien ne peut donc rattacher un gabarit. La session et son embedding sont supprimés. |
| `failed_retryable` | Le groupe avec lequel cette session a été supprimée n'a pas pu être supprimé, car un service de stockage, un magasin biométrique ou un fournisseur de surveillance était indisponible. Cette session n'est **pas** supprimée et reste en place. Relancez la requête pour cette session ; les nouvelles tentatives n'aboutissent qu'à un seul gabarit. |Les sessions sont supprimées par groupes. Lorsqu'un groupe ne peut pas être supprimé, chaque session de ce groupe est signalée comme `failed_retryable` ; les autres groupes ne sont pas affectés et restent supprimés.## Grandes sélections exécutées sous forme de tâcheLorsque plus de 20 sessions correspondent, la réponse est `202 Accepted` avec une tâche de suppression à la place de `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
}
```Interrogez [Obtenir la tâche de suppression de session](https://docs.didit.me/fr/management-api/sessions/get-deletion-job.md) toutes les quelques secondes jusqu'à ce que `status` soit `COMPLETED` ou `FAILED`.- La tâche indique combien de sessions ont abouti à chaque résultat, mais jamais lesquelles elle a supprimées.
- Une tâche `delete_all` supprime uniquement les sessions créées avant votre requête. Les sessions démarrées pendant son exécution ne sont pas supprimées.
- Les champs de conservation et d'instruction de votre requête s'appliquent à chaque session supprimée par la tâche.
- Si un groupe ne peut pas encore être supprimé, la tâche le réessaie automatiquement.
- Une tâche `FAILED` explique la raison dans `error`. Les sessions qu'elle n'a pas atteintes sont toujours en place : renvoyez la requête pour les supprimer.## Exemples> [tab] Supprimer par nombre
>
> ```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] Supprimer et conserver les gabarits
>
> ```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] Effacement à des fins de confidentialité
>
> ```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] Tout supprimer et interroger la tâche
>
> ```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 depuis les réponses 204Jusqu'à cette version, l'endpoint renvoyait `204 No Content`. Il renvoie désormais `200 OK` avec `results[]`, ou `202 Accepted` avec une tâche de suppression pour plus de 20 sessions correspondantes. Mettez à jour les clients qui vérifient `204`. Le comportement de suppression par défaut est inchangé : les applications existantes restent sur `delete_with_session` tant que vous ne modifiez pas explicitement la politique.## Ressources associées- [Supprimer une session](https://docs.didit.me/fr/sessions-api/delete-session.md)
- [Obtenir la tâche de suppression de session](https://docs.didit.me/fr/management-api/sessions/get-deletion-job.md)
- [Gabarits biométriques](https://docs.didit.me/fr/management-api/biometric-templates/overview.md)
- [Conservation des données](https://docs.didit.me/fr/console/data-retention.md)


## OpenAPI

````yaml fr/openapi-25.json POST /v3/sessions/delete/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API de vérification d'identité. Authentifiez-vous avec l'en-tête x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/sessions/delete/:
    post:
      tags:
        - Sessions
      summary: Supprimer des sessions KYC en masse par session_number
      description: >-
        Supprimez en masse des sessions de Vérification des utilisateurs (KYC) à
        partir de leur `session_number` numérique, ou toutes les sessions KYC de
        votre application avec `delete_all: true`.


        `session_number` est le compteur incrémentiel lisible affiché dans la
        liste des sessions de la Console et renvoyé sous le nom `session_number`
        par les endpoints de création de session et de décision ; il ne s'agit
        **pas** de l'UUID `session_id`. Pour supprimer une session par UUID ou
        pour supprimer une session de Vérification d'entreprise (KYB), que cet
        endpoint ne traite jamais, utilisez plutôt `DELETE
        /v3/session/{sessionId}/delete/`.


        **Jusqu'à 20 sessions sont supprimées au cours de la requête, au-delà,
        l'opération s'exécute sous forme de tâche.** Le nombre de sessions
        correspondantes détermine le comportement, qu'elles soient sélectionnées
        par `session_numbers` ou avec `delete_all` :

        - Jusqu'à 20 sessions correspondantes : elles sont supprimées avant la
        réponse, qui est un code `200` avec une entrée par session dans
        `results[]`.

        - Plus de 20 : la réponse est un code `202` avec une tâche de
        suppression, et les sessions sont supprimées en arrière-plan. Interrogez
        régulièrement `GET /v3/sessions/delete/{job_id}/` jusqu'à ce que
        `status` soit `COMPLETED` ou `FAILED`. Une tâche indique les totaux par
        résultat, sans jamais préciser quelles sessions elle a supprimées. Une
        tâche `delete_all` supprime uniquement les sessions créées avant la
        requête ; les sessions démarrées pendant son exécution ne sont pas
        supprimées.


        Chaque session supprimée reçoit exactement le même traitement qu'avec
        l'endpoint de suppression d'une session unique : la session, chaque
        tentative de vérification qu'elle contient, sa décision et ses données
        extraites, ses enregistrements de fonctionnalités associés (vérification
        d'identité, visage, détection du vivant, correspondance faciale, etc.)
        ainsi que tous ses fichiers stockés sont supprimés, elle disparaît de
        tous les endpoints de lecture, et les URL de médias précédemment
        générées cessent de fonctionner. Les livraisons de webhooks encore en
        file d'attente pour une session supprimée, ainsi que leurs nouvelles
        tentatives, sont abandonnées ; les webhooks déjà livrés ne sont pas
        affectés. Les entrées de la liste de blocage ne sont **pas** supprimées,
        les crédits déjà consommés ne sont **pas** remboursés, et les entités
        Utilisateur parentes ne sont **pas** supprimées (utilisez `POST
        /v3/users/delete/` pour celles-ci) ; aucun webhook n'est émis pour la
        suppression. La suppression est définitive et irréversible.


        **Sémantique de sélection :**

        - Avec `delete_all: true`, vous pouvez restreindre la sélection à l'aide
        des filtres de `GET /v3/sessions/`, chacun préfixé par `filter_` (par
        exemple `filter_status`, `filter_workflow_id`, `filter_date_from`). Les
        filtres acceptant plusieurs valeurs dans List Sessions (`status`,
        `workflow_id`, `country`, `region`, `document_type`, `document_name`,
        `session_type`, `warning`, `organization_name`) acceptent une chaîne
        séparée par des virgules ou un tableau ; les autres prennent une seule
        valeur. Une valeur vide est ignorée. Les filtres ne s'appliquent qu'avec
        `delete_all`, et une tâche de suppression applique les mêmes filtres.

        - Une clé `filter_*` inconnue ou une valeur de filtre illisible rejette
        l'ensemble de la requête avec un code `400` avant que quoi que ce soit
        ne soit supprimé, évitant ainsi qu'une faute de frappe dans un filtre
        n'étende la suppression à toutes les sessions.

        - Les entrées de `session_numbers` qui ne correspondent pas à une
        session KYC active dans votre application (numéros inconnus, sessions
        déjà supprimées ou sessions appartenant à une autre application) sont
        **ignorées silencieusement** : elles n'apparaissent pas dans `results`
        et ne sont pas comptabilisées dans le `total` d'une tâche.

        - Les échecs de validation (une entrée non numérique, une liste vide, ni
        `session_numbers` ni `delete_all` fourni, ou une conservation de
        gabarits que l'application ne peut pas honorer) rejettent **l'ensemble
        de la requête** avec un code `400` et ne suppriment rien.

        - Les sessions sont supprimées par groupes. Si un groupe ne peut pas
        être supprimé (par exemple parce qu'un service de stockage est
        indisponible), chaque session de ce groupe est signalée avec
        `face_retention_outcome: failed_retryable` et reste en place ; les
        autres groupes ne sont pas affectés. Réitérez la requête pour ces
        sessions. Une tâche réessaie automatiquement un tel groupe.

        - Il n'y a pas de plafond documenté sur la longueur de la liste ; la
        limite de débit d'écriture partagée (ci-dessous) constitue la limite
        pratique.


        **Données biométriques faciales :** les champs optionnels
        `retain_face_embeddings`, `face_retention_days`,
        `face_retention_deadline`, `deletion_instruction` et `instruction_id`
        ont la même signification que sur `DELETE
        /v3/session/{sessionId}/delete/` et s'appliquent à chaque session
        correspondante. Chaque résultat renvoie son propre
        `face_retention_outcome`.


        **Réponse :** `200 OK` avec `results[]` pour un maximum de 20 sessions
        correspondantes, ou `202 Accepted` avec une tâche de suppression
        au-delà. Chaque résultat confirme la suppression, sauf
        `face_retention_outcome: failed_retryable`, qui signale une session qui
        n'a PAS été supprimée et doit être réessayée. Les versions antérieures
        de cet endpoint renvoyaient `204 No Content` ; mettez à jour les clients
        qui vérifient le code `204`.


        **Idempotence :** réitérer la même requête ne supprime rien de plus :
        les numéros qui ne correspondent plus à une session sont ignorés.


        **`delete_all: true` (destructif) :** supprime **chaque** session KYC
        restante dans l'application ; `session_numbers` est ignoré lorsqu'il est
        défini. Il n'y a pas d'étape de confirmation ni d'annulation possible.


        **Authentification :** clé API dans l'en-tête `x-api-key`. Des
        identifiants manquants ou invalides renvoient `403` (`{"detail": "You do
        not have permission to perform this action."}`) ; cette API ne renvoie
        jamais `401`.


        **Limite de débit :** budget d'écriture partagé de 300 requêtes/min par
        clé API sur l'ensemble des endpoints POST/PATCH/DELETE ; tout
        dépassement renvoie `429`.


        Cet endpoint accepte uniquement les clés API. Les tokens Bearer
        utilisateur de la Business Console sont rejetés avec un code `403`
        (contrairement à la suppression d'une session unique, qui accepte les
        deux).


        **Rapports réglementaires déposés :** si les données sélectionnées
        figurent dans un rapport réglementaire finalisé, l'ensemble de la
        requête est refusé avec un code `409` et rien n'est supprimé. Le corps
        utilise `code: in_filed_report` et nomme chaque rapport avec `uuid`,
        `report_number`, `report_type` et `case_uuid`. Supprimez les rapports,
        puis réitérez la requête.
      operationId: batch_delete_sessions
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                session_numbers:
                  type: array
                  description: >-
                    Valeurs numériques `session_number` des sessions KYC à
                    supprimer, sous forme de chaînes composées uniquement de
                    chiffres (les nombres JSON sont également acceptés et
                    convertis). Requis sauf si `delete_all` est `true` ; une
                    liste vide renvoie `400`. Toute entrée ne comportant pas que
                    des chiffres rejette l'ensemble de la requête avec `400`
                    (sauf si `delete_all` est `true`, auquel cas la validation
                    est ignorée et les entrées ne sont pas prises en compte).
                    Les numéros qui ne correspondent à aucune session active
                    dans votre application sont ignorés sans erreur.
                  items:
                    type: string
                    pattern: ^[0-9]+$
                    example: '1001'
                  minItems: 1
                  example:
                    - '1001'
                    - '1002'
                    - '1003'
                delete_all:
                  type: boolean
                  description: >-
                    Lorsque la valeur est `true`, toutes les sessions KYC
                    restantes dans l'application appelante sont supprimées et
                    `session_numbers` est ignoré, sauf si vous restreignez la
                    sélection avec les clés `filter_*`. Plus de 20 sessions
                    correspondantes sont traitées sous la forme d'une tâche de
                    suppression (`202`) qui ne couvre que les sessions créées
                    avant la requête. Valeur par défaut : `false`. Irréversible
                    ; il n'y a aucune étape de confirmation.
                  default: false
                  example: false
                retain_face_embeddings:
                  type: boolean
                  nullable: true
                  description: >-
                    Remplacer la `face_retention_policy` de l'application pour
                    cette suppression. `true` conserve un gabarit biométrique
                    facial sans image rattaché à l'utilisateur de la session
                    après la suppression de la session ; `false` supprime
                    l'embedding facial avec la session ; omettez ou définissez
                    sur `null` pour suivre la politique de l'application. Ignoré
                    pour les sessions KYB et pour les sessions sans embedding
                    facial.
                  example: true
                face_retention_days:
                  type: integer
                  minimum: 1
                  maximum: 3650
                  description: >-
                    Durée de conservation finie, en jours, pour un gabarit
                    conservé. Requise lorsqu'un gabarit est conservé, sauf si
                    l'application définit déjà `face_retention_days`. La valeur
                    `expires_at` du gabarit correspond à la date d'expiration la
                    plus proche, déterminée par cette durée, la fenêtre générale
                    de conservation des données de l'application et
                    `face_retention_deadline`.
                  example: 365
                face_retention_deadline:
                  type: string
                  format: date-time
                  description: >-
                    Expiration stricte optionnelle pour un modèle conservé. Doit
                    être dans le futur.
                  example: '2027-08-28T00:00:00Z'
                deletion_instruction:
                  type: string
                  enum:
                    - operational_session_delete
                    - privacy_erasure
                  default: operational_session_delete
                  description: >-
                    La catégorie d'instruction que vous donnez.
                    `operational_session_delete` supprime la session et ne
                    conserve un modèle que si la politique ou
                    `retain_face_embeddings` l'indique. `privacy_erasure` purge
                    tout gabarit biométrique conservé ancré à l'Utilisateur de
                    la session avant de supprimer la session, ne peut pas être
                    outrepassé par la politique de l'application, et ne peut pas
                    être combiné avec `retain_face_embeddings: true` (`400`).
                  example: operational_session_delete
                instruction_id:
                  type: string
                  maxLength: 255
                  description: >-
                    Votre référence durable pour cette instruction de
                    suppression (par exemple un ID de ticket d'effacement).
                    Enregistrée dans le journal d'audit et sur tout gabarit
                    conservé. Générée par Didit lorsqu'elle est omise.
                  example: dsar-2026-0142
                filter_status:
                  description: >-
                    Restreint un `delete_all` aux sessions qui correspondent au
                    filtre `status` de [Lister les
                    sessions](/fr/sessions-api/list-sessions), avec les mêmes
                    valeurs. Une chaîne séparée par des virgules ou un tableau.
                    Ignoré sans `delete_all`. Une valeur vide est ignorée et ne
                    restreint pas la sélection.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_vendor_data:
                  description: "Restreint un `delete_all` aux sessions qui correspondent au filtre `vendor_data` de [Lister les sessions](/fr/sessions-api/list-sessions), avec la même valeur. Une seule valeur, pas une liste\_: un tableau est joint en un seul texte séparé par des virgules, donc plusieurs valeurs ne sont pas traitées comme des alternatives. Ignoré sans `delete_all`. Une valeur vide est ignorée et ne restreint pas la sélection."
                  type: string
                filter_search:
                  description: "Restreint un `delete_all` aux sessions qui correspondent au filtre `search` de [Lister les sessions](/fr/sessions-api/list-sessions), avec la même valeur. Une seule valeur, pas une liste\_: un tableau est joint en un seul texte séparé par des virgules, donc plusieurs valeurs ne sont pas traitées comme des alternatives. Ignoré sans `delete_all`. Une valeur vide est ignorée et ne restreint pas la sélection."
                  type: string
                filter_workflow_id:
                  description: >-
                    Restreint un `delete_all` aux sessions qui correspondent au
                    filtre `workflow_id` de [Lister les
                    sessions](/fr/sessions-api/list-sessions), avec les mêmes
                    valeurs. Une chaîne séparée par des virgules ou un tableau.
                    Ignoré sans `delete_all`. Une valeur vide est ignorée et ne
                    restreint pas la sélection.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_date_from:
                  description: >-
                    Limite un `delete_all` aux sessions correspondant au filtre
                    `date_from` de [List
                    Sessions](/fr/sessions-api/list-sessions), avec la même
                    valeur. Une seule valeur, pas une liste : un tableau est
                    fusionné en une seule valeur séparée par des virgules, donc
                    plusieurs valeurs sont refusées avec `400`. Ignoré sans
                    `delete_all`. Une valeur vide est ignorée et ne restreint
                    pas la sélection.
                  type: string
                  format: date
                filter_date_to:
                  description: >-
                    Limite un `delete_all` aux sessions correspondant au filtre
                    `date_to` de [List
                    Sessions](/fr/sessions-api/list-sessions), avec la même
                    valeur. Une seule valeur, pas une liste : un tableau est
                    fusionné en une seule valeur séparée par des virgules, donc
                    plusieurs valeurs sont refusées avec `400`. Ignoré sans
                    `delete_all`. Une valeur vide est ignorée et ne restreint
                    pas la sélection.
                  type: string
                  format: date
                filter_country:
                  description: >-
                    Limite un `delete_all` aux sessions correspondant au filtre
                    `country` de [List
                    Sessions](/fr/sessions-api/list-sessions), avec les mêmes
                    valeurs. Une chaîne séparée par des virgules ou un tableau.
                    Ignoré sans `delete_all`. Une valeur vide est ignorée et ne
                    restreint pas la sélection.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_document_type:
                  description: >-
                    Limite un `delete_all` aux sessions correspondant au filtre
                    `document_type` de [List
                    Sessions](/fr/sessions-api/list-sessions), avec les mêmes
                    valeurs. Une chaîne séparée par des virgules ou un tableau.
                    Ignoré sans `delete_all`. Une valeur vide est ignorée et ne
                    restreint pas la sélection.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_document_name:
                  description: >-
                    Limite un `delete_all` aux sessions correspondant au filtre
                    `document_name` de [List
                    Sessions](/fr/sessions-api/list-sessions), avec les mêmes
                    valeurs. Une chaîne séparée par des virgules ou un tableau.
                    Ignoré sans `delete_all`. Une valeur vide est ignorée et ne
                    restreint pas la sélection.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_region:
                  description: >-
                    Restreint un `delete_all` aux sessions qui correspondent au
                    filtre `region` de [Lister les
                    sessions](/fr/sessions-api/list-sessions), avec les mêmes
                    valeurs. Une chaîne séparée par des virgules ou un tableau.
                    Ignoré sans `delete_all`. Une valeur vide est ignorée et ne
                    restreint pas la sélection.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_didit_internal_id:
                  description: >-
                    Limite un `delete_all` aux sessions correspondant au filtre
                    `didit_internal_id` de [List
                    Sessions](/fr/sessions-api/list-sessions), avec la même
                    valeur. Une seule valeur, pas une liste : un tableau est
                    fusionné en une seule valeur séparée par des virgules, donc
                    plusieurs valeurs sont refusées avec `400`. Ignoré sans
                    `delete_all`. Une valeur vide est ignorée et ne restreint
                    pas la sélection.
                  type: string
                  format: uuid
                filter_session_type:
                  description: >-
                    Restreint un `delete_all` aux sessions qui correspondent au
                    filtre `session_type` de [Lister les
                    sessions](/fr/sessions-api/list-sessions), avec les mêmes
                    valeurs. Une chaîne séparée par des virgules ou un tableau.
                    Ignoré sans `delete_all`. Une valeur vide est ignorée et ne
                    restreint pas la sélection.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_api_service:
                  description: >-
                    Limite un `delete_all` aux sessions correspondant au filtre
                    `api_service` de [List
                    Sessions](/fr/sessions-api/list-sessions), avec la même
                    valeur. Une seule valeur, pas une liste : un tableau est
                    fusionné en une seule valeur séparée par des virgules, donc
                    plusieurs valeurs sont refusées avec `400`. Ignoré sans
                    `delete_all`. Une valeur vide est ignorée et ne restreint
                    pas la sélection.
                  type: string
                filter_screened_full_name:
                  description: "Restreint un `delete_all` aux sessions qui correspondent au filtre `screened_full_name` de [Lister les sessions](/fr/sessions-api/list-sessions), avec la même valeur. Une seule valeur, pas une liste\_: un tableau est joint en un seul texte séparé par des virgules, donc plusieurs valeurs ne sont pas traitées comme des alternatives. Ignoré sans `delete_all`. Une valeur vide est ignorée et ne restreint pas la sélection."
                  type: string
                filter_warning:
                  description: >-
                    Restreint un `delete_all` aux sessions qui correspondent au
                    filtre `warning` de [Lister les
                    sessions](/fr/sessions-api/list-sessions), avec les mêmes
                    valeurs. Une chaîne séparée par des virgules ou un tableau.
                    Ignoré sans `delete_all`. Une valeur vide est ignorée et ne
                    restreint pas la sélection.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_status_initialized_as_in_review:
                  description: >-
                    Restreint un `delete_all` aux sessions qui correspondent au
                    filtre `status_initialized_as_in_review` de [Lister les
                    sessions](/fr/sessions-api/list-sessions), avec les mêmes
                    valeurs. Ignoré sans `delete_all`. Une valeur vide est
                    ignorée et ne restreint pas la sélection.
                  type: boolean
                filter_is_kyc_to_be_reviewed:
                  description: >-
                    Limite un `delete_all` aux sessions correspondant au filtre
                    `is_kyc_to_be_reviewed` de [List
                    Sessions](/fr/sessions-api/list-sessions), avec les mêmes
                    valeurs. Ignoré sans `delete_all`. Une valeur vide est
                    ignorée et ne restreint pas la sélection.
                  type: boolean
                filter_euuid:
                  description: >-
                    Limite un `delete_all` aux sessions correspondant au filtre
                    `euuid` de [List Sessions](/fr/sessions-api/list-sessions),
                    avec la même valeur. Une seule valeur, pas une liste : un
                    tableau est fusionné en une seule valeur séparée par des
                    virgules, donc plusieurs valeurs sont refusées avec `400`.
                    Ignoré sans `delete_all`. Une valeur vide est ignorée et ne
                    restreint pas la sélection.
                  type: string
                  format: uuid
                filter_organization_name:
                  description: >-
                    Restreint un `delete_all` aux sessions qui correspondent au
                    filtre `organization_name` de [Lister les
                    sessions](/fr/sessions-api/list-sessions), avec les mêmes
                    valeurs. Une chaîne séparée par des virgules ou un tableau.
                    Avec une clé API, il ne peut correspondre qu'au nom de votre
                    propre organisation, sélectionnant ainsi toutes vos sessions
                    ou aucune. Ignoré sans `delete_all`. Une valeur vide est
                    ignorée et ne restreint pas la sélection.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
            examples:
              Specific sessions:
                summary: Supprimer des sessions spécifiques par numéro
                value:
                  session_numbers:
                    - '1001'
                    - '1002'
                    - '1003'
              All sessions:
                summary: Supprimer chaque session KYC de l'application
                value:
                  delete_all: true
              Delete and retain templates:
                summary: >-
                  Supprimer les sessions mais conserver les gabarits
                  biométriques sans image pendant 365 jours
                value:
                  session_numbers:
                    - '1001'
                    - '1002'
                  retain_face_embeddings: true
                  face_retention_days: 365
                  instruction_id: post-approval-cleanup-2026-08
              Privacy erasure:
                summary: >-
                  Supprimer les sessions et purger chaque modèle conservé pour
                  leurs Utilisateurs
                value:
                  session_numbers:
                    - '1001'
                  deletion_instruction: privacy_erasure
                  instruction_id: dsar-2026-0142
              Filtered delete_all:
                summary: >-
                  Supprimer chaque session Refusée d'un workflow créée en
                  septembre 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: >-
            Jusqu'à 20 sessions ont correspondu et ont été traitées dans la
            requête. Un résultat par session correspondante ; les numéros qui ne
            correspondent à rien (inconnus ou déjà supprimés) sont ignorés et
            n'apparaissent pas. Un résultat confirme la suppression sauf lorsque
            `face_retention_outcome` vaut `failed_retryable` : cette session n'a
            PAS été supprimée et doit être réessayée.
          content:
            application/json:
              schema:
                type: object
                properties:
                  results:
                    type: array
                    items:
                      type: object
                      properties:
                        session_id:
                          type: string
                          format: uuid
                          description: La session supprimée.
                        session_number:
                          type: integer
                          nullable: true
                          description: Le numéro de la session supprimée.
                        face_retention_outcome:
                          type: string
                          enum:
                            - retained_with_user
                            - deleted
                            - none
                            - ineligible_no_vendor_user
                            - failed_retryable
                          description: >-
                            Ce qui est advenu des données biométriques faciales
                            de la session. `deleted` : l'embedding facial a été
                            supprimé avec la session (par défaut).
                            `retained_with_user` : la session est supprimée et
                            un gabarit biométrique sans image reste rattaché à
                            l'User ; voir `biometric_template_uuid`. `none` : la
                            session ne comportait aucun embedding facial (par
                            exemple une session KYC sur document seul sans
                            selfie de détection du vivant ; les sessions KYB ne
                            sont jamais sélectionnées par cet endpoint).
                            `ineligible_no_vendor_user` : la conservation a été
                            demandée mais la session n'a aucun User lié,
                            l'embedding a donc été supprimé avec la session.
                            `failed_retryable` (endpoint de traitement par lot
                            uniquement) : le groupe avec lequel cette session a
                            été supprimée n'a pas pu être supprimé (un service
                            de stockage, un magasin biométrique ou un
                            fournisseur de surveillance était indisponible) ;
                            cette session est toujours en place, réessayez la
                            requête pour celle-ci.
                        biometric_template_uuid:
                          type: string
                          format: uuid
                          nullable: true
                          description: >-
                            Identifiant du gabarit biométrique conservé lorsque
                            `face_retention_outcome` vaut `retained_with_user` ;
                            `null` sinon. Gérez-le via
                            `/v3/biometric-templates/{template_uuid}/`.
                        biometric_template_expires_at:
                          type: string
                          format: date-time
                          nullable: true
                          description: >-
                            Moment où le gabarit biométrique conservé est
                            supprimé, lorsque `face_retention_outcome` vaut
                            `retained_with_user` ; `null` lorsqu'aucun gabarit
                            n'est conservé.
                        deleted_child_verifications:
                          type: integer
                          description: >-
                            Toujours `0` sur cet endpoint, qui supprime
                            uniquement les sessions KYC. La suppression d'une
                            session de Vérification d'entreprise (KYB) avec
                            `DELETE /v3/session/{sessionId}/delete/` indique les
                            vérifications créées par celle-ci qui ont été
                            supprimées en même temps.
              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: >-
            Plus de 20 sessions correspondent. Elles sont supprimées en
            arrière-plan ; interrogez `GET /v3/sessions/delete/{job_id}/`
            jusqu'à ce que `status` soit `COMPLETED` ou `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: >-
            Erreur de validation — rien n'a été supprimé. Les valeurs d'erreur
            sont des tableaux de chaînes de message indexés par nom de champ.
          content:
            application/json:
              schema:
                type: object
                properties:
                  session_numbers:
                    type: array
                    items:
                      type: string
                additionalProperties:
                  description: >-
                    Autres clés : une clé `filter_*` qui n'est pas un filtre de
                    List Sessions (`"Unknown filter."`), ou une clé `filter_*`
                    dont la valeur ne peut pas être lue (indexée par cette clé
                    `filter_*`, avec un tableau de messages).
              examples:
                Missing selector:
                  summary: Ni session_numbers ni delete_all n'ont été fournis
                  value:
                    session_numbers:
                      - This field is required unless delete_all is true.
                Empty list:
                  summary: session_numbers est un tableau vide
                  value:
                    session_numbers:
                      - This list may not be empty.
                Non-numeric entry:
                  summary: session_numbers contient une chaîne non numérique
                  value:
                    session_numbers:
                      - All session_numbers must be numeric.
                Privacy erasure cannot retain:
                  summary: >-
                    deletion_instruction privacy_erasure combinée avec
                    retain_face_embeddings true
                  value:
                    retain_face_embeddings:
                      - Privacy erasure cannot retain biometric templates.
                No finite retention duration:
                  summary: >-
                    Conservation demandée sans face_retention_days sur la
                    requête ou l'application
                  value:
                    detail: >-
                      A finite biometric-template retention duration is
                      required.
                Unknown filter:
                  summary: Une clé filter_* que List Sessions ne possède pas
                  value:
                    filter_reviewer: Unknown filter.
                Unreadable filter value:
                  summary: Une valeur de filtre qui ne peut pas être lue
                  value:
                    filter_date_from:
                      - Enter a valid date.
        '403':
          description: >-
            Clé API manquante. Une clé manquante renvoie `403` ; une clé
            erronée, révoquée ou expirée renvoie `401`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              examples:
                Missing or invalid API key:
                  summary: Aucun en-tête x-api-key, ou la clé est invalide
                  value:
                    detail: You do not have permission to perform this action.
        '409':
          description: >-
            Une session sélectionnée fait partie d'un rapport réglementaire
            finalisé. Rien n'est supprimé.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InFiledReportError'
        '429':
          description: >-
            Limite de débit d'écriture partagée dépassée (300 requêtes
            POST/PATCH/DELETE par minute et par clé API). Examinez `Retry-After`
            et les en-têtes de réponse `X-RateLimit-*` avant de réessayer.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              examples:
                Rate limited:
                  summary: Budget d'écriture épuisé
                  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: "Une suppression groupée de sessions en cours en arrière-plan\_: progression et totaux par résultat, jamais les sessions spécifiques supprimées."
      properties:
        job_id:
          type: string
          format: uuid
          description: Interrogez `GET /v3/sessions/delete/{job_id}/` avec cet identifiant.
        status:
          type: string
          enum:
            - PENDING
            - PROCESSING
            - COMPLETED
            - FAILED
          description: >-
            `PENDING` : accepté, pas encore démarré. `PROCESSING` : suppression
            en cours ; `processed` et `outcomes` sont en cours de mise à jour.
            `COMPLETED` : chaque session sélectionnée est prise en compte.
            `FAILED` : la tâche s'est arrêtée prématurément ; voir `error`.
        total:
          type: integer
          description: Sessions sélectionnées lors de la demande de suppression.
        processed:
          type: integer
          description: Sessions traitées par la tâche jusqu'à présent.
        outcomes:
          type: object
          description: >-
            Nombre de sessions s'étant terminées par chaque résultat. Chaque clé
            est toujours présente.
          properties:
            deleted:
              type: integer
              description: Sessions supprimées avec leur embedding facial.
            none:
              type: integer
              description: Sessions supprimées qui n'avaient pas d'embedding facial.
            retained_with_user:
              type: integer
              description: >-
                Sessions supprimées alors qu'un gabarit biométrique sans image a
                été conservé pour leur utilisateur, comme demandé par la requête
                ou la politique de l'application.
            ineligible_no_vendor_user:
              type: integer
              description: >-
                Sessions supprimées, avec leur embedding facial, car la
                conservation a été demandée mais aucun utilisateur n'y était
                lié.
            failed_retryable:
              type: integer
              description: >-
                Sessions signalées comme non supprimées. Une tâche réessaie de
                supprimer par elle-même un groupe qu'elle n'a pas pu supprimer
                au lieu de le comptabiliser ici.
            already_deleted:
              type: integer
              description: >-
                Sessions sélectionnées qui étaient déjà supprimées, par exemple
                par une autre requête, lorsque la tâche les a atteintes.
        deleted_child_verifications:
          type: integer
          description: >-
            Vérifications créées par les vérifications d'entreprise supprimées,
            supprimées avec elles. Vaut toujours `0` pour une tâche initiée par
            `POST /v3/sessions/delete/`, qui supprime uniquement les sessions
            KYC.
        error:
          type: string
          nullable: true
          description: >-
            `null` sauf si `status` est `FAILED` ; indique alors la raison de
            l'interruption de la suppression. Les sessions que la tâche n'avait
            pas encore atteintes sont conservées : répétez la requête pour les
            supprimer.
        created_at:
          type: string
          format: date-time
          description: Date et heure auxquelles la suppression a été demandée.
        completed_at:
          type: string
          format: date-time
          nullable: true
          description: Moment où la tâche s'est terminée ; `null` pendant son exécution.
    InFiledReportError:
      type: object
      description: >-
        La suppression est refusée car les données sélectionnées figurent dans
        un rapport réglementaire finalisé. Rien n'est supprimé. Supprimez le
        rapport, puis réessayez la requête.
      required:
        - detail
        - code
      properties:
        detail:
          type: string
        code:
          type: string
          enum:
            - in_filed_report
          description: >-
            Code d'erreur stable pour une suppression bloquée par un rapport
            réglementaire finalisé.
        reports:
          type: array
          items:
            $ref: '#/components/schemas/FiledRegulatoryReport'
          description: >-
            Rapports qui bloquent la suppression d'une personne, d'une
            entreprise, d'un dossier ou d'une session.
        transactions:
          type: array
          items:
            $ref: '#/components/schemas/FiledReportTransaction'
          description: >-
            Transactions qui bloquent la suppression d'une transaction, chacune
            accompagnée des rapports qui la répertorient.
    FiledRegulatoryReport:
      type: object
      description: Un rapport réglementaire finalisé qui empêche la suppression demandée.
      required:
        - uuid
        - report_number
        - report_type
        - case_uuid
      properties:
        uuid:
          type: string
          format: uuid
          description: UUID du rapport.
        report_number:
          type: string
          description: Numéro de rapport affiché dans la Console (par exemple, SAR-0001).
        report_type:
          type: string
          enum:
            - SAR
            - STR
            - CTR
            - TTR
            - UTR
            - IFT
            - CBR
            - TFR
          description: Type de rapport réglementaire.
        case_uuid:
          type: string
          format: uuid
          description: Dossier auquel appartient le rapport.
    FiledReportTransaction:
      type: object
      description: >-
        Une transaction qui ne peut pas être supprimée car un rapport
        réglementaire finalisé la répertorie.
      required:
        - uuid
        - transaction_id
        - reports
      properties:
        uuid:
          type: string
          format: uuid
          description: UUID de transaction Didit.
        transaction_id:
          type: string
          description: >-
            L'identifiant de la transaction fourni lors de la création de la
            transaction.
        reports:
          type: array
          items:
            $ref: '#/components/schemas/FiledRegulatoryReport'
          description: Rapports finalisés répertoriant cette transaction.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        La clé API de votre application, issue de Développeurs -> Clés API dans
        la Business Console. La clé principale dispose d'un accès complet. Une
        clé nommée peut être restreinte : aucun, lecture ou écriture par
        ressource, limitée à certains workflows ou aux sessions approuvées, à
        une liste d'adresses IP et à une date d'expiration. 401 signifie que la
        clé est incorrecte, révoquée ou expirée ; 403 signifie qu'aucune clé n'a
        été envoyée, que la clé n'a pas accès à cette ressource ou action, ou
        que la requête provient d'une adresse hors de sa liste d'IP ; 404 sur
        une route de session signifie que la session est hors des workflows ou
        des statuts de la clé. Une clé sans accès aux médias reçoit les URL
        d'images, de vidéos et de PDF à null, et une clé sans accès en écriture
        aux sessions reçoit les liens et tokens de session à null. Voir
        https://docs.didit.me/console/api-keys.

````

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