> ## 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 purge en masse des gabarits biométriques

> POST /v3/biometric-templates/delete/ : purgez les gabarits faciaux conservés par liste d'ID ou par filtre. Idempotent par gabarit. Didit.

Purge de nombreux gabarits en un seul appel. Fournissez soit une liste explicite d'identifiants, soit `delete_all: true`, éventuellement restreinte par les mêmes filtres que [Lister les gabarits biométriques](https://docs.didit.me/fr/management-api/biometric-templates/list.md).

## Corps de la requête

| Champ | Type | Description |
| - | - | - |
| `template_uuids` | UUID\[] | Gabarits à purger. Obligatoire sauf si `delete_all` vaut `true`. Les identifiants déjà purgés sont signalés avec `already_purged`. |
| `delete_all` | boolean | Lorsque `true`, purge tous les gabarits qui correspondent aux filtres ci-dessous (tous les gabarits de l'application si aucun filtre n'est fourni). `template_uuids` est ignoré. |
| `vendor_data` | string | Uniquement avec `delete_all` : correspondance partielle insensible à la casse sur `vendor_data` de l'utilisateur propriétaire |
| `vendor_user_uuid` | UUID | Uniquement avec `delete_all` : correspondance exacte sur l'utilisateur propriétaire |
| `status` | enum | Uniquement avec `delete_all` : `pending`, `active`, `expired`, `held_out_of_use`, `purge_pending`, `purge_failed` |
| `source_type` | enum | Uniquement avec `delete_all` : `session_delete`, `automatic_retention`, `backfill` |
| `retained_from`, `retained_to` | datetime | Uniquement avec `delete_all` : plage de dates de conservation |

> [!WARNING]
>
> `delete_all: true` sans filtre purge chaque gabarit biométrique de l'application, et cette action est irréversible. Exécutez d'abord [Compter les gabarits biométriques](https://docs.didit.me/fr/management-api/biometric-templates/count.md) avec les mêmes filtres pour vérifier ce qui sera purgé.

## Exemples

> [tab] Par identifiant
>
> ```bash theme={null}
> curl -X POST https://verification.didit.me/v3/biometric-templates/delete/ \
>   -H "x-api-key: YOUR_API_KEY" \
>   -H "Content-Type: application/json" \
>   -d '{"template_uuids": ["9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b", "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d"]}'
> ```

> [tab] Tous les gabarits d'un utilisateur
>
> ```bash theme={null}
> curl -X POST https://verification.didit.me/v3/biometric-templates/delete/ \
>   -H "x-api-key: YOUR_API_KEY" \
>   -H "Content-Type: application/json" \
>   -d '{"delete_all": true, "vendor_user_uuid": "2f7c1a9e-8b4d-4c6a-9e1f-3d5b7a9c1e2f"}'
> ```

> [tab] Tous les gabarits de l'application
>
> ```bash theme={null}
> curl -X POST https://verification.didit.me/v3/biometric-templates/delete/ \
>   -H "x-api-key: YOUR_API_KEY" \
>   -H "Content-Type: application/json" \
>   -d '{"delete_all": true}'
> ```

```json theme={null}
{
  "results": [
    { "uuid": "9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b", "outcome": "purged" },
    { "uuid": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d", "outcome": "already_purged" }
  ]
}
```

Les gabarits sont purgés un par un ; chaque résultat indique `purged` ou `already_purged`. Si un service de stockage biométrique est indisponible, l'appel renvoie `503` au premier gabarit en échec ; les gabarits purgés plus tôt dans la même requête restent purgés, le gabarit en échec passe à `purge_failed` (déjà exclu de la correspondance), et répéter la requête termine le travail.

## Erreurs

| Statut | Cas | Corps |
| - | - | - |
| `400` | Ni `template_uuids` ni `delete_all: true` n'est fourni | `{"template_uuids": ["This field is required unless delete_all is true."]}` |
| `400` | Valeur de filtre invalide, ou `retained_to` antérieur à `retained_from` | Erreurs de validation indexées par champ |
| `403` | Jeton d'utilisateur de la console, ou clé API non autorisée | `{"detail": "You do not have permission to perform this action."}` |
| `503` | Un service de stockage biométrique était indisponible ; répétez la requête | `{"detail": "The biometric-template operation could not finish because an external store is unavailable. The operation is retryable."}` |


## OpenAPI

````yaml fr/openapi-25.json POST /v3/biometric-templates/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/biometric-templates/delete/:
    post:
      tags:
        - Biometric Templates
      summary: Purger en masse les gabarits biométriques conservés
      description: >-
        Une application ayant activé l'option conserve un gabarit biométrique
        facial sans image, géré séparément et rattaché à l'utilisateur
        lorsqu'une session est supprimée (voir `DELETE
        /v3/session/{sessionId}/delete/`). Les gabarits sont des données
        biométriques avec un `expires_at` défini ; ils ne contiennent jamais
        d'images, de données de session ou de champs d'identité, et ils sont
        purgés lors de la suppression de l'utilisateur, de l'effacement au titre
        de la confidentialité, de l'expiration ou d'une purge explicite. Ces
        endpoints acceptent uniquement des clés API d'application (`x-api-key`)
        ; les tokens d'utilisateur de la Business Console sont rejetés avec
        `403`.


        Purge plusieurs gabarits en un seul appel, par une liste explicite
        d'identifiants ou avec `delete_all: true` éventuellement restreint par
        les mêmes filtres que l'endpoint de liste. Les gabarits sont purgés un
        par un et chaque résultat indique `purged` ou `already_purged`. Si un
        magasin biométrique est indisponible, l'appel renvoie `503` au premier
        gabarit en échec : les gabarits purgés plus tôt dans la requête restent
        purgés, celui en échec passe à `purge_failed` (déjà exclu des
        correspondances), et renouveler la requête permet de terminer
        l'opération.


        **`delete_all: true` sans filtre purge tous les gabarits biométriques de
        l'application et ne peut pas être annulé.** Exécutez d'abord l'endpoint
        de comptage avec les mêmes filtres.
      operationId: bulk_purge_biometric_templates
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                template_uuids:
                  type: array
                  items:
                    type: string
                    format: uuid
                  minItems: 1
                  description: >-
                    Modèles à purger. Obligatoire sauf si `delete_all` est
                    `true`. Les identifiants déjà purgés sont signalés comme
                    `already_purged`.
                delete_all:
                  type: boolean
                  default: false
                  description: >-
                    Lorsque la valeur est `true`, purge chaque modèle
                    correspondant aux filtres ci-dessous (tous les modèles de
                    l'application si aucun filtre n'est fourni).
                    `template_uuids` est ignoré. Irréversible.
                vendor_data:
                  type: string
                  description: "Uniquement avec `delete_all`\_: correspondance de sous-chaîne insensible à la casse sur le `vendor_data` de l'utilisateur propriétaire."
                vendor_user_uuid:
                  type: string
                  format: uuid
                  description: "Uniquement avec `delete_all`\_: correspondance exacte sur l'utilisateur propriétaire."
                status:
                  type: string
                  enum:
                    - pending
                    - active
                    - expired
                    - held_out_of_use
                    - purge_pending
                    - purge_failed
                  description: Uniquement avec `delete_all`.
                source_type:
                  type: string
                  enum:
                    - session_delete
                    - automatic_retention
                    - backfill
                  description: Uniquement avec `delete_all`.
                retained_from:
                  type: string
                  format: date-time
                  description: Uniquement avec `delete_all`.
                retained_to:
                  type: string
                  format: date-time
                  description: >-
                    Uniquement avec `delete_all`. Ne doit pas être antérieur à
                    `retained_from`.
            examples:
              By id:
                value:
                  template_uuids:
                    - 9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b
                    - 1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d
              Every template of one User:
                value:
                  delete_all: true
                  vendor_user_uuid: 2f7c1a9e-8b4d-4c6a-9e1f-3d5b7a9c1e2f
              Every template in the application:
                value:
                  delete_all: true
      responses:
        '200':
          description: Résultats de purge par modèle.
          content:
            application/json:
              schema:
                type: object
                properties:
                  results:
                    type: array
                    items:
                      type: object
                      properties:
                        uuid:
                          type: string
                          format: uuid
                        outcome:
                          type: string
                          enum:
                            - purged
                            - already_purged
              examples:
                Mixed:
                  value:
                    results:
                      - uuid: 9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b
                        outcome: purged
                      - uuid: 1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d
                        outcome: already_purged
        '400':
          description: Erreur de validation — rien n'est purgé.
          content:
            application/json:
              examples:
                Missing selector:
                  value:
                    template_uuids:
                      - This field is required unless delete_all is true.
                Bad range:
                  value:
                    retained_to:
                      - Must be on or after retained_from.
        '403':
          description: >-
            Token de l'utilisateur de la Console, ou clé API non autorisée. Ces
            endpoints acceptent uniquement les clés API d'application.
          content:
            application/json:
              examples:
                Forbidden:
                  value:
                    detail: You do not have permission to perform this action.
        '503':
          description: "Un service de stockage biométrique était indisponible lors de la conservation ou de la suppression définitive d'un gabarit biométrique. Rien n'est supprimé\_; réitérez la même requête. Les nouvelles tentatives sont idempotentes et convergent vers un seul gabarit."
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              examples:
                Retryable:
                  value:
                    detail: >-
                      The biometric-template operation could not finish because
                      an external store is unavailable. The operation is
                      retryable.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X POST
            https://verification.didit.me/v3/biometric-templates/delete/ \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{"delete_all": true, "vendor_user_uuid": "2f7c1a9e-8b4d-4c6a-9e1f-3d5b7a9c1e2f"}'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.biometric_templates.batch_delete(
                template_uuids=["9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b", "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d"],
            )
            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.biometricTemplates.batchDelete({
              template_uuids: ["9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b", "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d"],
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.BiometricTemplates.BatchDelete(ctx, didit.BiometricTemplatesBatchDeleteParams{\n\tTemplateUUIDs: didit.Some([]string{\"9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b\", \"1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d\"}),\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.BiometricTemplatesBatchDeleteParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.biometricTemplates().batchDelete(BiometricTemplatesBatchDeleteParams.builder()
                    .templateUuids(List.of("9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b", "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d"))
                    .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->biometricTemplates->batchDelete([
                'template_uuids' => ['9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b', '1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d'],
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: >-
            require "didit"


            # Reads DIDIT_API_KEY.

            didit = Didit::Client.new


            result = didit.biometric_templates.batch_delete(template_uuids:
            ["9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b",
            "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d"])

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

            {
                TemplateUuids = new string[] { "9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b", "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d" },
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  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.