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

# Eliminazione in batch delle sessioni: API KYC

> Con Didit elimini sessioni KYC in batch per numero o tutte insieme. Fino a 20 danno l'esito per sessione; oltre, un job da interrogare.



Prompt per l'eliminazione in batch delle sessioni
        Copia il prompt negli appunti



      
      

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



      
      

Incolla in

## ComportamentoOgni sessione corrispondente viene eliminata esattamente come con [Elimina sessione](https://docs.didit.me/it/sessions-api/delete-session.md): vengono eliminati la sessione, ogni tentativo di verifica che contiene, la sua decisione e i dati estratti, i relativi record delle funzionalità e tutti i suoi file archiviati. La sessione scompare da ogni endpoint di lettura e gli URL dei contenuti multimediali emessi in precedenza smettono di risolversi. I messaggi webhook ancora in coda per una sessione eliminata, e i relativi nuovi tentativi, vengono scartati; i webhook già consegnati non sono interessati. L'eliminazione è permanente e irreversibile.Se una sessione selezionata fa parte di un report normativo finalizzato, l'intera richiesta restituisce `409` e non viene eliminato nulla. La risposta usa `code: in_filed_report` e indica ciascun report. Elimina ogni report con [Elimina report](https://docs.didit.me/it/management-api/regulatory-reports/delete.md), quindi ripeti la richiesta. L'eliminazione del report non elimina la sessione: la sessione resta finché non ripeti questa richiesta.Il numero di sessioni corrispondenti determina la risposta, che tu le selezioni con `session_numbers` o con `delete_all`:| Sessioni corrispondenti | Risposta |
| - | - |
| Fino a 20 | `200 OK` una volta eliminate, con un risultato per sessione corrispondente in `results`. |
| Più di 20 | `202 Accepted` con un job di eliminazione. Le sessioni vengono eliminate in background; interroga [Ottieni job di eliminazione sessione](https://docs.didit.me/it/management-api/sessions/get-deletion-job.md) finché non termina. |Un risultato conferma che la sessione è stata eliminata, tranne quando il suo `face_retention_outcome` è `failed_retryable`: in quel caso la sessione **non** è stata eliminata ed è ancora presente. Tratta quindi quel risultato come un errore da ritentare, mai come conferma di eliminazione.
I numeri che non corrispondono a una sessione KYC attiva nella tua applicazione vengono saltati e non compaiono in `results`.## Restringere `delete_all` con i filtriCon `delete_all: true` puoi restringere la selezione con i filtri di [Elenca sessioni](https://docs.didit.me/it/sessions-api/list-sessions.md), ciascuno con il prefisso `filter_`.
Accettano gli stessi valori dei parametri di query.
Un filtro che accetta più valori (`status`, `workflow_id`, `country`, `region`, `document_type`, `document_name`, `session_type`, `warning`, `organization_name`) accetta una stringa separata da virgole oppure un 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"
}
```- I filtri si applicano solo insieme a `delete_all`; con `session_numbers` vengono controllati ma non modificano la selezione.
- Ogni altro filtro accetta un solo valore.
  Un array viene unito in un unico valore separato da virgole, quindi più date, UUID o valori `api_service` restituiscono `400`, e più testi `vendor_data`, `search` o `screened_full_name` non vengono confrontati come alternative.
- Un filtro con valore vuoto viene ignorato, quindi non restringe la selezione.
- Una chiave `filter_*` sconosciuta restituisce `400` `{"filter_reviewer": "Unknown filter."}`, e un valore non leggibile restituisce `400` associato a quella chiave `filter_*`, come `{"filter_date_from": ["Enter a valid date."]}`.
  In entrambi i casi non viene eliminato nulla, quindi un filtro scritto male non allarga mai l'eliminazione a tutte le sessioni.
- Un job di eliminazione applica gli stessi filtri e, come ogni `delete_all`, copre solo le sessioni create prima della richiesta.## Campi di conservazione e istruzioneL'endpoint accetta gli stessi campi opzionali dell'endpoint per la singola sessione e li applica a ogni sessione corrispondente:| Campo | Tipo | Descrizione |
| - | - | - |
| `retain_face_embeddings` | boolean o null | Sovrascrive per questa richiesta il `face_retention_policy` dell'applicazione. |
| `face_retention_days` | intero (1-3650) | Durata di conservazione finita per i modelli conservati. Obbligatorio in caso di conservazione, a meno che l'applicazione non imposti `face_retention_days`. |
| `face_retention_deadline` | datetime (ISO 8601) | Scadenza massima facoltativa; deve essere nel futuro. |
| `deletion_instruction` | `operational_session_delete` (predefinito) o `privacy_erasure` | `privacy_erasure` elimina ogni modello conservato per l'utente di ciascuna sessione prima di eliminare la sessione, e non può essere combinato con `retain_face_embeddings: true`. |
| `instruction_id` | stringa (max 255) | Il tuo riferimento durevole per questa istruzione. Viene registrato nel registro di audit e su ogni modello conservato. |Vedi [Elimina sessione](https://docs.didit.me/it/sessions-api/delete-session.md#dati-biometrici-del-volto-da-eliminare-o-conservare) per sapere cosa contiene e cosa non contiene un modello conservato, come viene calcolato `expires_at` e cosa fa un'istruzione di cancellazione per motivi di privacy.## Esiti per sessionePer fino a 20 sessioni corrispondenti, `200 OK` restituisce un risultato per sessione:```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 }
  ]
}
```Ogni risultato contiene gli stessi campi della risposta di [Elimina sessione](https://docs.didit.me/it/sessions-api/delete-session.md#risposta). `biometric_template_expires_at` indica quando viene eliminato un modello conservato, e `deleted_child_verifications` è sempre `0` in questo caso, perché questo endpoint elimina solo sessioni KYC.| `face_retention_outcome` | Significato |
| - | - |
| `deleted` | La sessione e il suo embedding facciale vengono eliminati. Comportamento predefinito. |
| `retained_with_user` | La sessione viene eliminata. Un modello biometrico privo di immagini resta collegato all'utente; il suo id è `biometric_template_uuid`. |
| `none` | La sessione non aveva alcun embedding facciale da eliminare o conservare. |
| `ineligible_no_vendor_user` | È stata richiesta la conservazione, ma la sessione non è collegata a un utente, quindi nulla può ancorare un modello. La sessione e il suo embedding vengono eliminati. |
| `failed_retryable` | Il gruppo con cui questa sessione è stata eliminata non ha potuto essere eliminato, perché un servizio di archiviazione, un archivio biometrico o un provider di monitoraggio non era disponibile. Questa sessione **non** è stata eliminata ed è ancora presente. Riesegui la richiesta per essa; i nuovi tentativi convergono su un unico modello biometrico. |Le sessioni vengono eliminate in gruppi. Quando un gruppo non può essere eliminato, ogni sessione al suo interno viene segnalata come `failed_retryable`; gli altri gruppi non sono interessati e restano eliminati.## Selezioni numerose eseguite come jobQuando il criterio corrisponde a più di 20 sessioni, la risposta è `202 Accepted` con un job di eliminazione al posto di `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
}
```Interroga [Get Session Deletion Job](https://docs.didit.me/it/management-api/sessions/get-deletion-job.md) a intervalli di pochi secondi finché `status` non diventa `COMPLETED` o `FAILED`.- Il job riporta quante sessioni si sono concluse con ciascun esito, mai quali sessioni ha eliminato.
- Un job `delete_all` elimina solo le sessioni create prima della tua richiesta. Le sessioni avviate mentre il job è in esecuzione non vengono eliminate.
- I campi relativi alla conservazione e alle istruzioni della tua richiesta si applicano a ogni sessione che il job elimina.
- Se un gruppo non può ancora essere eliminato, il job ritenta autonomamente.
- Un job `FAILED` spiega il motivo in `error`. Le sessioni che non aveva ancora raggiunto sono ancora presenti: ripeti la richiesta per eliminarle.## Esempi> [tab] Eliminazione per numero
>
> ```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] Eliminazione e conservazione dei modelli
>
> ```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] Cancellazione per motivi di privacy
>
> ```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] Elimina tutto e interroga il job
>
> ```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"
> ```## Migrazione dalle risposte 204Fino a questa release l'endpoint restituiva `204 No Content`. Ora restituisce `200 OK` con `results[]`, oppure `202 Accepted` con un job di eliminazione per più di 20 sessioni corrispondenti. Aggiorna i client che verificano il codice `204`. Il comportamento di eliminazione predefinito non cambia: le applicazioni esistenti restano su `delete_with_session` finché non modifichi esplicitamente il criterio.## Correlati- [Delete Session](https://docs.didit.me/it/sessions-api/delete-session.md)
- [Get Session Deletion Job](https://docs.didit.me/it/management-api/sessions/get-deletion-job.md)
- [Modelli biometrici](https://docs.didit.me/it/management-api/biometric-templates/overview.md)
- [Conservazione dei dati](https://docs.didit.me/it/console/data-retention.md)


## OpenAPI

````yaml it/openapi-25.json POST /v3/sessions/delete/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API di verifica dell'identità. Autenticati con l'intestazione x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/sessions/delete/:
    post:
      tags:
        - Sessions
      summary: Elimina sessioni KYC in blocco tramite session_number
      description: >-
        Elimina in blocco le sessioni di Verifica degli utenti (KYC) in base al
        loro `session_number` numerico, oppure tutte le sessioni KYC nella tua
        applicazione con `delete_all: true`.


        `session_number` è il contatore incrementale di facile lettura mostrato
        nell'elenco delle sessioni della Console e restituito come
        `session_number` dagli endpoint di creazione della sessione e di
        decisione; **non** è l'UUID `session_id`. Per eliminare una sessione
        tramite UUID, o per eliminare una sessione di Verifica aziendale (KYB),
        che questo endpoint non gestisce mai, utilizza invece `DELETE
        /v3/session/{sessionId}/delete/`.


        **Fino a 20 sessioni vengono eliminate nella richiesta; un numero
        superiore viene invece elaborato come job.** Il numero di sessioni
        corrispondenti determina la modalità di elaborazione, indipendentemente
        dal fatto che siano selezionate tramite `session_numbers` o con
        `delete_all`:

        - Fino a 20 sessioni corrispondenti: vengono eliminate prima della
        risposta, che è `200` con una voce per sessione in `results[]`.

        - Più di 20: la risposta è `202` con un job di eliminazione, e le
        sessioni vengono eliminate in background. Esegui il polling di `GET
        /v3/sessions/delete/{job_id}/` finché `status` non è `COMPLETED` o
        `FAILED`. Un job segnala i conteggi per esito, mai quali sessioni ha
        eliminato. Un job `delete_all` elimina solo le sessioni create prima
        della richiesta; le sessioni avviate durante la sua esecuzione non
        vengono eliminate.


        Ogni sessione eliminata riceve esattamente lo stesso trattamento
        dell'endpoint di eliminazione della singola sessione: la sessione, ogni
        tentativo di verifica in essa contenuto, la sua decisione e i dati
        estratti, i record delle funzionalità correlate (verifica dell'identità,
        volto, rilevamento della vitalità, confronto facciale e così via) e
        tutti i relativi file archiviati vengono eliminati, scompare da ogni
        endpoint di lettura e gli URL dei file multimediali precedentemente
        emessi smettono di risolversi. Le consegne dei webhook ancora in coda
        per una sessione eliminata, e i relativi nuovi tentativi, vengono
        ignorate; i webhook già consegnati non vengono modificati. Le voci della
        blocklist **non** vengono rimosse, i crediti già consumati **non**
        vengono rimborsati e le entità User padre **non** vengono eliminate
        (utilizza `POST /v3/users/delete/` per quelle); non viene emesso alcun
        webhook per l'eliminazione. L'eliminazione è permanente e irreversibile.


        **Semantica di selezione:**

        - Con `delete_all: true` puoi restringere la selezione con i filtri di
        `GET /v3/sessions/`, ciascuno preceduto da `filter_` (ad esempio
        `filter_status`, `filter_workflow_id`, `filter_date_from`). I filtri che
        accettano più valori in List Sessions (`status`, `workflow_id`,
        `country`, `region`, `document_type`, `document_name`, `session_type`,
        `warning`, `organization_name`) accettano una stringa separata da
        virgole o un array; gli altri accettano un solo valore. Un valore vuoto
        viene ignorato. I filtri si applicano solo insieme a `delete_all`, e un
        job di eliminazione applica gli stessi filtri.

        - Una chiave `filter_*` sconosciuta, o un valore di filtro illeggibile,
        rifiuta l'intera richiesta con `400` prima che venga eliminato qualcosa,
        garantendo che un filtro digitato male non estenda mai l'eliminazione a
        tutte le sessioni.

        - Le voci in `session_numbers` che non corrispondono a una sessione KYC
        attiva nella tua applicazione (numeri sconosciuti, sessioni già
        eliminate o sessioni di proprietà di un'altra applicazione) vengono
        **ignorate silenziosamente**: non compaiono in `results` e non vengono
        conteggiate nel `total` di un job.

        - Gli errori di validazione (una voce non numerica, un elenco vuoto, né
        `session_numbers` né `delete_all` forniti, o una conservazione dei
        modelli che l'applicazione non può rispettare) rifiutano l'**intera
        richiesta** con `400` e non eliminano nulla.

        - Le sessioni vengono eliminate in gruppi. Se un gruppo non può essere
        eliminato (ad esempio perché un servizio di archiviazione non è
        disponibile), ogni sessione di quel gruppo viene segnalata come
        `face_retention_outcome: failed_retryable` e rimane invariata; gli altri
        gruppi non sono interessati. Ripeti la richiesta per tali sessioni. Un
        job ritenta automaticamente tale gruppo.

        - Non esiste un limite documentato per la lunghezza dell'elenco; il
        limite di frequenza di scrittura condiviso (sotto) rappresenta il
        vincolo pratico.


        **Dati biometrici facciali:** i campi opzionali
        `retain_face_embeddings`, `face_retention_days`,
        `face_retention_deadline`, `deletion_instruction` e `instruction_id`
        hanno lo stesso significato che in `DELETE
        /v3/session/{sessionId}/delete/` e si applicano a ogni sessione
        corrispondente. Ciascun risultato segnala il proprio
        `face_retention_outcome`.


        **Risposta:** `200 OK` con `results[]` per un massimo di 20 sessioni
        corrispondenti, oppure `202 Accepted` con un job di eliminazione per un
        numero superiore. Ogni risultato conferma l'eliminazione tranne
        `face_retention_outcome: failed_retryable`, che segnala una sessione che
        NON è stata eliminata e per cui è necessario riprovare. Le versioni
        precedenti di questo endpoint restituivano `204 No Content`; aggiorna i
        client che verificano la presenza di `204`.


        **Idempotenza:** ripetere la stessa richiesta non elimina altro: i
        numeri che non corrispondono più a una sessione vengono ignorati.


        **`delete_all: true` (distruttivo):** elimina **ogni** sessione KYC
        rimanente nell'applicazione; `session_numbers` viene ignorato quando
        impostato. Non è previsto alcun passaggio di conferma né annullamento.


        **Autenticazione:** chiave API nell'intestazione `x-api-key`.
        Credenziali mancanti o non valide restituiscono `403` (`{"detail": "You
        do not have permission to perform this action."}`); questa API non
        restituisce mai `401`.


        **Limite di frequenza:** budget di scrittura condiviso di 300
        richieste/min per chiave API su tutti gli endpoint POST/PATCH/DELETE; il
        superamento restituisce `429`.


        Questo endpoint accetta solo chiavi API. I token Bearer degli utenti
        della Business Console vengono rifiutati con `403` (a differenza
        dell'eliminazione di una singola sessione, che accetta entrambi).


        **Report normativi inviati:** se i dati selezionati si trovano in un
        report normativo finalizzato, l'intera richiesta viene rifiutata con
        `409` e non viene eliminato nulla. Il corpo utilizza `code:
        in_filed_report` e specifica ciascun report con `uuid`, `report_number`,
        `report_type` e `case_uuid`. Elimina i report, quindi ripeti la
        richiesta.
      operationId: batch_delete_sessions
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                session_numbers:
                  type: array
                  description: >-
                    Valori numerici `session_number` delle sessioni KYC da
                    eliminare, sotto forma di stringhe di sole cifre (sono
                    accettati e convertiti anche i numeri JSON). Obbligatorio a
                    meno che `delete_all` non sia `true`; un elenco vuoto
                    restituisce `400`. Qualsiasi voce non composta da sole cifre
                    comporta il rifiuto dell'intera richiesta con `400` (a meno
                    che `delete_all` non sia `true`, nel qual caso la
                    validazione viene saltata e le voci ignorate). I numeri che
                    non corrispondono a una sessione attiva nella tua
                    applicazione vengono ignorati senza generare errori.
                  items:
                    type: string
                    pattern: ^[0-9]+$
                    example: '1001'
                  minItems: 1
                  example:
                    - '1001'
                    - '1002'
                    - '1003'
                delete_all:
                  type: boolean
                  description: >-
                    Quando è `true`, tutte le sessioni KYC rimanenti
                    nell'applicazione chiamante vengono eliminate e
                    `session_numbers` viene ignorato, a meno che tu non
                    restringa la selezione con le chiavi `filter_*`. Se ci sono
                    più di 20 sessioni corrispondenti, l'operazione viene
                    eseguita come processo di eliminazione (`202`) che copre
                    solo le sessioni create prima della richiesta. Il valore
                    predefinito è `false`. Azione irreversibile; non è previsto
                    alcun passaggio di conferma.
                  default: false
                  example: false
                retain_face_embeddings:
                  type: boolean
                  nullable: true
                  description: >-
                    Esegui l'override della `face_retention_policy`
                    dell'applicazione per questa eliminazione. `true` mantiene
                    un modello biometrico facciale privo di immagini associato
                    all'Utente della sessione dopo l'eliminazione della
                    sessione; `false` elimina l'embedding facciale insieme alla
                    sessione; ometti o imposta su `null` per seguire la politica
                    dell'applicazione. Ignorato per le sessioni KYB e per le
                    sessioni senza un embedding facciale.
                  example: true
                face_retention_days:
                  type: integer
                  minimum: 1
                  maximum: 3650
                  description: >-
                    Periodo di conservazione limitato, in giorni, per un modello
                    conservato. Obbligatorio quando un modello viene conservato,
                    a meno che l'applicazione non imposti già
                    `face_retention_days`. Il campo `expires_at` del modello
                    corrisponde al valore più anticipato tra questa durata, la
                    finestra generale di conservazione dei dati
                    dell'applicazione e `face_retention_deadline`.
                  example: 365
                face_retention_deadline:
                  type: string
                  format: date-time
                  description: >-
                    Scadenza definitiva opzionale per un modello conservato.
                    Deve essere nel futuro.
                  example: '2027-08-28T00:00:00Z'
                deletion_instruction:
                  type: string
                  enum:
                    - operational_session_delete
                    - privacy_erasure
                  default: operational_session_delete
                  description: >-
                    La classe di istruzione che stai fornendo.
                    `operational_session_delete` elimina la sessione e conserva
                    un modello solo quando la policy o `retain_face_embeddings`
                    lo prevede. `privacy_erasure` elimina definitivamente ogni
                    modello biometrico conservato e associato all'Utente della
                    sessione prima di eliminarla, non può essere sovrascritta
                    dalla policy dell'applicazione e non può essere combinata
                    con `retain_face_embeddings: true` (`400`).
                  example: operational_session_delete
                instruction_id:
                  type: string
                  maxLength: 255
                  description: >-
                    Il tuo riferimento permanente per questa istruzione di
                    eliminazione (ad esempio l'ID di un ticket di
                    cancellazione). Registrato nel registro di audit e su
                    qualsiasi modello conservato. Generato da Didit se omesso.
                  example: dsar-2026-0142
                filter_status:
                  description: >-
                    Limita `delete_all` alle sessioni che corrispondono al
                    filtro `status` di [List
                    Sessions](/it/sessions-api/list-sessions), con gli stessi
                    valori. Una stringa separata da virgole o un array. Ignorato
                    senza `delete_all`. Un valore vuoto viene ignorato e non
                    limita la selezione.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_vendor_data:
                  description: >-
                    Limita `delete_all` alle sessioni che corrispondono al
                    filtro `vendor_data` di [List
                    Sessions](/it/sessions-api/list-sessions), con lo stesso
                    valore. Un singolo valore, non un elenco: un array viene
                    unito in un unico testo separato da virgole, quindi più
                    valori non vengono confrontati come alternative. Ignorato
                    senza `delete_all`. Un valore vuoto viene ignorato e non
                    limita la selezione.
                  type: string
                filter_search:
                  description: >-
                    Limita `delete_all` alle sessioni che corrispondono al
                    filtro `search` di [List
                    Sessions](/it/sessions-api/list-sessions), con lo stesso
                    valore. Un singolo valore, non un elenco: un array viene
                    unito in un unico testo separato da virgole, quindi più
                    valori non vengono confrontati come alternative. Ignorato
                    senza `delete_all`. Un valore vuoto viene ignorato e non
                    limita la selezione.
                  type: string
                filter_workflow_id:
                  description: >-
                    Limita `delete_all` alle sessioni che corrispondono al
                    filtro `workflow_id` di [List
                    Sessions](/it/sessions-api/list-sessions), con gli stessi
                    valori. Una stringa separata da virgole o un array. Ignorato
                    senza `delete_all`. Un valore vuoto viene ignorato e non
                    limita la selezione.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_date_from:
                  description: >-
                    Limita `delete_all` alle sessioni che corrispondono al
                    filtro `date_from` di [Elenca
                    sessioni](/it/sessions-api/list-sessions), con lo stesso
                    valore. Un solo valore, non un elenco: un array viene unito
                    in un unico valore separato da virgole, pertanto più valori
                    vengono rifiutati con `400`. Ignorato senza `delete_all`. Un
                    valore vuoto viene ignorato e non limita la selezione.
                  type: string
                  format: date
                filter_date_to:
                  description: >-
                    Limita `delete_all` alle sessioni che corrispondono al
                    filtro `date_to` di [Elenca
                    sessioni](/it/sessions-api/list-sessions), con lo stesso
                    valore. Un solo valore, non un elenco: un array viene unito
                    in un unico valore separato da virgole, pertanto più valori
                    vengono rifiutati con `400`. Ignorato senza `delete_all`. Un
                    valore vuoto viene ignorato e non limita la selezione.
                  type: string
                  format: date
                filter_country:
                  description: >-
                    Limita `delete_all` alle sessioni che corrispondono al
                    filtro `country` di [Elenca
                    sessioni](/it/sessions-api/list-sessions), con gli stessi
                    valori. Una stringa separata da virgole o un array. Ignorato
                    senza `delete_all`. Un valore vuoto viene ignorato e non
                    limita la selezione.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_document_type:
                  description: >-
                    Limita `delete_all` alle sessioni che corrispondono al
                    filtro `document_type` di [Elenca
                    sessioni](/it/sessions-api/list-sessions), con gli stessi
                    valori. Una stringa separata da virgole o un array. Ignorato
                    senza `delete_all`. Un valore vuoto viene ignorato e non
                    limita la selezione.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_document_name:
                  description: >-
                    Limita `delete_all` alle sessioni che corrispondono al
                    filtro `document_name` di [Elenca
                    sessioni](/it/sessions-api/list-sessions), con gli stessi
                    valori. Una stringa separata da virgole o un array. Ignorato
                    senza `delete_all`. Un valore vuoto viene ignorato e non
                    limita la selezione.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_region:
                  description: >-
                    Limita `delete_all` alle sessioni che corrispondono al
                    filtro `region` di [List
                    Sessions](/it/sessions-api/list-sessions), con gli stessi
                    valori. Una stringa separata da virgole o un array. Ignorato
                    senza `delete_all`. Un valore vuoto viene ignorato e non
                    limita la selezione.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_didit_internal_id:
                  description: >-
                    Limita `delete_all` alle sessioni che corrispondono al
                    filtro `didit_internal_id` di [Elenca
                    sessioni](/it/sessions-api/list-sessions), con lo stesso
                    valore. Un solo valore, non un elenco: un array viene unito
                    in un unico valore separato da virgole, pertanto più valori
                    vengono rifiutati con `400`. Ignorato senza `delete_all`. Un
                    valore vuoto viene ignorato e non limita la selezione.
                  type: string
                  format: uuid
                filter_session_type:
                  description: >-
                    Limita `delete_all` alle sessioni che corrispondono al
                    filtro `session_type` di [List
                    Sessions](/it/sessions-api/list-sessions), con gli stessi
                    valori. Una stringa separata da virgole o un array. Ignorato
                    senza `delete_all`. Un valore vuoto viene ignorato e non
                    limita la selezione.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_api_service:
                  description: >-
                    Limita `delete_all` alle sessioni che corrispondono al
                    filtro `api_service` di [Elenca
                    sessioni](/it/sessions-api/list-sessions), con lo stesso
                    valore. Un solo valore, non un elenco: un array viene unito
                    in un unico valore separato da virgole, pertanto più valori
                    vengono rifiutati con `400`. Ignorato senza `delete_all`. Un
                    valore vuoto viene ignorato e non limita la selezione.
                  type: string
                filter_screened_full_name:
                  description: >-
                    Limita `delete_all` alle sessioni che corrispondono al
                    filtro `screened_full_name` di [List
                    Sessions](/it/sessions-api/list-sessions), con lo stesso
                    valore. Un singolo valore, non un elenco: un array viene
                    unito in un unico testo separato da virgole, quindi più
                    valori non vengono confrontati come alternative. Ignorato
                    senza `delete_all`. Un valore vuoto viene ignorato e non
                    limita la selezione.
                  type: string
                filter_warning:
                  description: >-
                    Limita `delete_all` alle sessioni che corrispondono al
                    filtro `warning` di [List
                    Sessions](/it/sessions-api/list-sessions), con gli stessi
                    valori. Una stringa separata da virgole o un array. Ignorato
                    senza `delete_all`. Un valore vuoto viene ignorato e non
                    limita la selezione.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
                filter_status_initialized_as_in_review:
                  description: >-
                    Limita `delete_all` alle sessioni che corrispondono al
                    filtro `status_initialized_as_in_review` di [List
                    Sessions](/it/sessions-api/list-sessions), con gli stessi
                    valori. Ignorato senza `delete_all`. Un valore vuoto viene
                    ignorato e non limita la selezione.
                  type: boolean
                filter_is_kyc_to_be_reviewed:
                  description: >-
                    Limita `delete_all` alle sessioni che corrispondono al
                    filtro `is_kyc_to_be_reviewed` di [Elenca
                    sessioni](/it/sessions-api/list-sessions), con gli stessi
                    valori. Ignorato senza `delete_all`. Un valore vuoto viene
                    ignorato e non limita la selezione.
                  type: boolean
                filter_euuid:
                  description: >-
                    Limita `delete_all` alle sessioni che corrispondono al
                    filtro `euuid` di [Elenca
                    sessioni](/it/sessions-api/list-sessions), con lo stesso
                    valore. Un solo valore, non un elenco: un array viene unito
                    in un unico valore separato da virgole, pertanto più valori
                    vengono rifiutati con `400`. Ignorato senza `delete_all`. Un
                    valore vuoto viene ignorato e non limita la selezione.
                  type: string
                  format: uuid
                filter_organization_name:
                  description: >-
                    Limita `delete_all` alle sessioni che corrispondono al
                    filtro `organization_name` di [List
                    Sessions](/it/sessions-api/list-sessions), con gli stessi
                    valori. Una stringa separata da virgole o un array. Con una
                    chiave API può corrispondere solo al nome della tua
                    organizzazione, quindi seleziona tutte le tue sessioni o
                    nessuna. Ignorato senza `delete_all`. Un valore vuoto viene
                    ignorato e non limita la selezione.
                  oneOf:
                    - type: string
                    - type: array
                      items:
                        type: string
            examples:
              Specific sessions:
                summary: Elimina sessioni specifiche in base al numero
                value:
                  session_numbers:
                    - '1001'
                    - '1002'
                    - '1003'
              All sessions:
                summary: Elimina ogni sessione KYC nell'applicazione
                value:
                  delete_all: true
              Delete and retain templates:
                summary: >-
                  Elimina le sessioni ma conserva i modelli biometrici privi di
                  immagini per 365 giorni
                value:
                  session_numbers:
                    - '1001'
                    - '1002'
                  retain_face_embeddings: true
                  face_retention_days: 365
                  instruction_id: post-approval-cleanup-2026-08
              Privacy erasure:
                summary: >-
                  Elimina le sessioni ed elimina definitivamente ogni modello
                  conservato per i relativi utenti
                value:
                  session_numbers:
                    - '1001'
                  deletion_instruction: privacy_erasure
                  instruction_id: dsar-2026-0142
              Filtered delete_all:
                summary: >-
                  Elimina ogni sessione rifiutata di un workflow creata a
                  settembre 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: >-
            Fino a 20 sessioni corrispondenti sono state elaborate nella
            richiesta. Un risultato per ogni sessione corrispondente; i numeri
            che non corrispondono a nulla (sconosciuti o già eliminati) vengono
            ignorati e non compaiono. Un risultato conferma l'eliminazione
            tranne quando `face_retention_outcome` è `failed_retryable`: tale
            sessione NON è stata eliminata e va ritentata.
          content:
            application/json:
              schema:
                type: object
                properties:
                  results:
                    type: array
                    items:
                      type: object
                      properties:
                        session_id:
                          type: string
                          format: uuid
                          description: La sessione eliminata.
                        session_number:
                          type: integer
                          nullable: true
                          description: Il numero della sessione eliminata.
                        face_retention_outcome:
                          type: string
                          enum:
                            - retained_with_user
                            - deleted
                            - none
                            - ineligible_no_vendor_user
                            - failed_retryable
                          description: >-
                            Cosa è successo ai dati biometrici facciali della
                            sessione. `deleted`: l'embedding facciale è stato
                            eliminato insieme alla sessione (impostazione
                            predefinita). `retained_with_user`: la sessione
                            viene eliminata e un modello biometrico senza
                            immagini rimane associato all'Utente; vedi
                            `biometric_template_uuid`. `none`: la sessione non
                            aveva alcun embedding facciale (ad esempio una
                            sessione KYC di soli documenti senza selfie per il
                            rilevamento della vitalità; le sessioni KYB non
                            vengono mai selezionate da questo endpoint).
                            `ineligible_no_vendor_user`: la conservazione era
                            stata richiesta ma la sessione non ha alcun Utente
                            collegato, quindi l'embedding è stato eliminato con
                            la sessione. `failed_retryable` (solo per l'endpoint
                            batch): non è stato possibile eliminare il gruppo
                            insieme al quale questa sessione è stata eliminata
                            (un servizio di archiviazione, uno store biometrico
                            o un fornitore di monitoraggio non era disponibile);
                            questa sessione è ancora presente, ripeti la
                            richiesta per essa.
                        biometric_template_uuid:
                          type: string
                          format: uuid
                          nullable: true
                          description: >-
                            ID del modello biometrico conservato quando
                            `face_retention_outcome` è `retained_with_user`;
                            `null` altrimenti. Gestiscilo tramite
                            `/v3/biometric-templates/{template_uuid}/`.
                        biometric_template_expires_at:
                          type: string
                          format: date-time
                          nullable: true
                          description: >-
                            Quando il modello biometrico conservato viene
                            eliminato, se `face_retention_outcome` è
                            `retained_with_user`; `null` quando nessun modello
                            viene conservato.
                        deleted_child_verifications:
                          type: integer
                          description: >-
                            Sempre `0` su questo endpoint, che elimina solo le
                            sessioni KYC. L'eliminazione di una sessione di
                            Verifica aziendale (KYB) con `DELETE
                            /v3/session/{sessionId}/delete/` segnala le
                            verifiche create che sono state eliminate insieme ad
                            essa.
              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: >-
            Più di 20 sessioni corrispondenti. Vengono eliminate in secondo
            piano; esegui il polling di `GET /v3/sessions/delete/{job_id}/`
            finché `status` non è `COMPLETED` o `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: >-
            Errore di validazione — non è stato eliminato nulla. I valori di
            errore sono array di stringhe di messaggio indicizzati per nome
            campo.
          content:
            application/json:
              schema:
                type: object
                properties:
                  session_numbers:
                    type: array
                    items:
                      type: string
                additionalProperties:
                  description: >-
                    Altre chiavi: una chiave `filter_*` che non è un filtro di
                    List Sessions (`"Unknown filter."`), oppure una chiave
                    `filter_*` il cui valore non può essere letto (indicizzata
                    da tale chiave `filter_*`, con un array di messaggi).
              examples:
                Missing selector:
                  summary: Né session_numbers né delete_all forniti
                  value:
                    session_numbers:
                      - This field is required unless delete_all is true.
                Empty list:
                  summary: session_numbers è un array vuoto
                  value:
                    session_numbers:
                      - This list may not be empty.
                Non-numeric entry:
                  summary: session_numbers contiene una stringa non numerica
                  value:
                    session_numbers:
                      - All session_numbers must be numeric.
                Privacy erasure cannot retain:
                  summary: >-
                    deletion_instruction privacy_erasure combinato con
                    retain_face_embeddings true
                  value:
                    retain_face_embeddings:
                      - Privacy erasure cannot retain biometric templates.
                No finite retention duration:
                  summary: >-
                    Conservazione richiesta senza face_retention_days nella
                    richiesta o nell'applicazione
                  value:
                    detail: >-
                      A finite biometric-template retention duration is
                      required.
                Unknown filter:
                  summary: Una chiave filter_* non presente in List Sessions
                  value:
                    filter_reviewer: Unknown filter.
                Unreadable filter value:
                  summary: Un valore di filtro illeggibile
                  value:
                    filter_date_from:
                      - Enter a valid date.
        '403':
          description: >-
            Chiave API mancante. L'assenza della chiave restituisce `403`; una
            chiave errata, revocata o scaduta restituisce `401`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              examples:
                Missing or invalid API key:
                  summary: >-
                    Nessuna intestazione x-api-key, oppure la chiave non è
                    valida
                  value:
                    detail: You do not have permission to perform this action.
        '409':
          description: >-
            Una sessione selezionata fa parte di un report normativo
            finalizzato. Non viene eliminato nulla.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InFiledReportError'
        '429':
          description: >-
            Limite di frequenza di scrittura condiviso superato (300 richieste
            POST/PATCH/DELETE al minuto per chiave API). Esamina `Retry-After` e
            le intestazioni di risposta `X-RateLimit-*` prima di effettuare un
            nuovo tentativo.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              examples:
                Rate limited:
                  summary: Budget di scrittura esaurito
                  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: >-
        Un'eliminazione massiva di sessioni in esecuzione in background:
        avanzamento e conteggi per esito, mai quali sessioni sono state
        eliminate.
      properties:
        job_id:
          type: string
          format: uuid
          description: >-
            Esegui il polling di `GET /v3/sessions/delete/{job_id}/` con questo
            id.
        status:
          type: string
          enum:
            - PENDING
            - PROCESSING
            - COMPLETED
            - FAILED
          description: >-
            `PENDING`: accettato, non ancora avviato. `PROCESSING`: eliminazione
            in corso; `processed` e `outcomes` si stanno aggiornando.
            `COMPLETED`: ogni sessione selezionata è stata gestita. `FAILED`: il
            job si è interrotto prima del completamento; vedi `error`.
        total:
          type: integer
          description: Sessioni selezionate al momento della richiesta di eliminazione.
        processed:
          type: integer
          description: Sessioni completate dal processo fino a questo momento.
        outcomes:
          type: object
          description: >-
            Quante sessioni si sono concluse con ciascun esito. Ogni chiave è
            sempre presente.
          properties:
            deleted:
              type: integer
              description: Sessioni eliminate insieme al rispettivo embedding facciale.
            none:
              type: integer
              description: Sessioni eliminate prive di embedding facciale.
            retained_with_user:
              type: integer
              description: >-
                Sessioni eliminate mantenendo un modello biometrico privo di
                immagini per il relativo utente, come indicato nella richiesta o
                previsto dalla policy dell'applicazione.
            ineligible_no_vendor_user:
              type: integer
              description: >-
                Sessioni eliminate, insieme al rispettivo embedding facciale,
                poiché era stata richiesta la conservazione dei dati ma non
                avevano alcun utente collegato.
            failed_retryable:
              type: integer
              description: >-
                Sessioni segnalate come non eliminate. Un processo effettua un
                nuovo tentativo per un gruppo che non è riuscito a eliminare
                autonomamente invece di conteggiarlo qui.
            already_deleted:
              type: integer
              description: >-
                Sessioni selezionate che erano già state eliminate, ad esempio
                da un'altra richiesta, nel momento in cui il job le ha
                raggiunte.
        deleted_child_verifications:
          type: integer
          description: >-
            Verifiche create dalle verifiche aziendali eliminate, eliminate
            insieme a esse. Sempre `0` per un processo avviato da `POST
            /v3/sessions/delete/`, che elimina solo sessioni KYC.
        error:
          type: string
          nullable: true
          description: >-
            `null` a meno che `status` non sia `FAILED`; in tal caso, indica il
            motivo per cui l'eliminazione si è interrotta. Le sessioni non
            ancora raggiunte dal processo rimangono invariate: ripeti la
            richiesta per eliminarle.
        created_at:
          type: string
          format: date-time
          description: Data e ora della richiesta di eliminazione.
        completed_at:
          type: string
          format: date-time
          nullable: true
          description: Quando il processo è terminato; `null` mentre è in esecuzione.
    InFiledReportError:
      type: object
      description: >-
        L'eliminazione è stata rifiutata perché i dati selezionati si trovano in
        un report normativo finalizzato. Non viene eliminato nulla. Elimina il
        report, quindi ripeti la richiesta.
      required:
        - detail
        - code
      properties:
        detail:
          type: string
        code:
          type: string
          enum:
            - in_filed_report
          description: >-
            Codice di errore stabile per un'eliminazione bloccata da un report
            normativo finalizzato.
        reports:
          type: array
          items:
            $ref: '#/components/schemas/FiledRegulatoryReport'
          description: >-
            Report che bloccano l'eliminazione di una persona, azienda, caso o
            sessione.
        transactions:
          type: array
          items:
            $ref: '#/components/schemas/FiledReportTransaction'
          description: >-
            Transazioni che bloccano l'eliminazione di una transazione, ciascuna
            con i report che la elencano.
    FiledRegulatoryReport:
      type: object
      description: Un report normativo finalizzato che impedisce l'eliminazione richiesta.
      required:
        - uuid
        - report_number
        - report_type
        - case_uuid
      properties:
        uuid:
          type: string
          format: uuid
          description: UUID del report.
        report_number:
          type: string
          description: Numero del report mostrato nella Console (ad esempio, SAR-0001).
        report_type:
          type: string
          enum:
            - SAR
            - STR
            - CTR
            - TTR
            - UTR
            - IFT
            - CBR
            - TFR
          description: Tipo di report normativo.
        case_uuid:
          type: string
          format: uuid
          description: Caso a cui appartiene il report.
    FiledReportTransaction:
      type: object
      description: >-
        Una transazione che non può essere eliminata perché inclusa in un report
        normativo finalizzato.
      required:
        - uuid
        - transaction_id
        - reports
      properties:
        uuid:
          type: string
          format: uuid
          description: UUID della transazione Didit.
        transaction_id:
          type: string
          description: >-
            L'identificatore della transazione fornito al momento della
            creazione della transazione.
        reports:
          type: array
          items:
            $ref: '#/components/schemas/FiledRegulatoryReport'
          description: Report finalizzati che includono questa transazione.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        La chiave API della tua applicazione, da Developers -> API keys nella
        Business Console. La chiave primaria ha accesso completo. Una chiave con
        nome può avere un ambito definito: nessuno, lettura o scrittura per
        risorsa, limitata ad alcuni workflow o a sessioni approvate, a un elenco
        di indirizzi IP e a una data di scadenza. 401 indica che la chiave è
        errata, revocata o scaduta; 403 indica che non è stata inviata alcuna
        chiave, che la chiave non ha accesso a questa risorsa o azione, oppure
        che la richiesta proviene da un indirizzo non incluso nel suo elenco IP;
        404 su una route di sessione indica che la sessione non rientra nei
        workflow o negli stati previsti dalla chiave. Una chiave senza accesso
        ai media riceve gli URL di immagini, video e PDF come null, e una chiave
        senza permessi di scrittura sulle sessioni riceve link e token di
        sessione come null. Consulta https://docs.didit.me/console/api-keys.

````

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