> ## 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 Hapus Massal Templat Biometrik

> Didit: POST /v3/biometric-templates/delete/ menghapus templat wajah tersimpan per daftar id atau filter. Idempoten per templat.

Menghapus permanen banyak templat dalam satu panggilan. Berikan daftar ID eksplisit atau `delete_all: true`, dan opsional dipersempit dengan filter yang sama seperti pada [Daftar Templat Biometrik](https://docs.didit.me/id/management-api/biometric-templates/list.md).

## Isi permintaan

| Kolom | Tipe | Deskripsi |
| - | - | - |
| `template_uuids` | UUID\[] | Templat yang akan dihapus permanen. Wajib kecuali `delete_all` bernilai `true`. ID yang sudah dihapus permanen dilaporkan sebagai `already_purged`. |
| `delete_all` | boolean | Jika `true`, menghapus permanen setiap templat yang cocok dengan filter di bawah (semua templat aplikasi jika tidak ada filter). `template_uuids` diabaikan. |
| `vendor_data` | string | Hanya dengan `delete_all`: pencocokan substring yang tidak peka huruf besar-kecil terhadap `vendor_data` milik Pengguna pemilik |
| `vendor_user_uuid` | UUID | Hanya dengan `delete_all`: pencocokan persis terhadap Pengguna pemilik |
| `status` | enum | Hanya dengan `delete_all`: `pending`, `active`, `expired`, `held_out_of_use`, `purge_pending`, `purge_failed` |
| `source_type` | enum | Hanya dengan `delete_all`: `session_delete`, `automatic_retention`, `backfill` |
| `retained_from`, `retained_to` | datetime | Hanya dengan `delete_all`: rentang tanggal retensi |

> [!WARNING]
>
> `delete_all: true` tanpa filter menghapus permanen setiap templat biometrik di aplikasi dan tidak dapat dibatalkan. Jalankan [Hitung Templat Biometrik](https://docs.didit.me/id/management-api/biometric-templates/count.md) dengan filter yang sama terlebih dahulu untuk memastikan apa yang akan dihapus permanen.

## Contoh

> [tab] Berdasarkan ID
>
> ```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] Semua templat milik satu Pengguna
>
> ```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] Semua templat di aplikasi
>
> ```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" }
  ]
}
```

Templat dihapus permanen satu per satu; setiap hasil melaporkan `purged` atau `already_purged`. Jika penyimpanan biometrik tidak tersedia, panggilan mengembalikan `503` pada templat pertama yang gagal. Templat yang sudah dihapus permanen sebelumnya dalam permintaan yang sama tetap dihapus permanen, templat yang gagal berpindah ke `purge_failed` (sudah dikecualikan dari pencocokan), dan mengulangi permintaan akan menyelesaikan prosesnya.

## Error

| Status | Kondisi | Isi |
| - | - | - |
| `400` | Tidak ada `template_uuids` maupun `delete_all: true` yang diberikan | `{"template_uuids": ["This field is required unless delete_all is true."]}` |
| `400` | Nilai filter tidak valid, atau `retained_to` lebih awal dari `retained_from` | Error validasi berdasarkan kolom |
| `403` | Token pengguna Console, atau kunci API tidak diizinkan | `{"detail": "You do not have permission to perform this action."}` |
| `503` | Penyimpanan biometrik tidak tersedia; ulangi permintaan | `{"detail": "The biometric-template operation could not finish because an external store is unavailable. The operation is retryable."}` |


## OpenAPI

````yaml id/openapi-25.json POST /v3/biometric-templates/delete/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API Verifikasi Identitas. Lakukan autentikasi dengan header x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/biometric-templates/delete/:
    post:
      tags:
        - Biometric Templates
      summary: Pembersihan massal templat biometrik yang disimpan
      description: >-
        Aplikasi yang mengaktifkan opsi ini menyimpan satu templat biometrik
        wajah tanpa gambar yang dikelola secara terpisah dan ditautkan ke
        Pengguna saat sesi dihapus (lihat `DELETE
        /v3/session/{sessionId}/delete/`). Templat adalah data biometrik dengan
        `expires_at` yang terbatas; templat tidak pernah berisi gambar, data
        sesi, atau kolom identitas, dan templat akan dibersihkan saat
        penghapusan Pengguna, penghapusan privasi, kedaluwarsa, atau pembersihan
        eksplisit. Endpoint ini hanya menerima kunci API aplikasi (`x-api-key`);
        token pengguna Business Console ditolak dengan `403`.


        Membersihkan banyak templat dalam satu panggilan, melalui daftar id
        eksplisit atau dengan `delete_all: true` yang secara opsional
        dipersempit oleh filter yang sama seperti endpoint daftar. Templat
        dibersihkan satu per satu dan setiap hasil melaporkan `purged` atau
        `already_purged`. Jika penyimpanan biometrik tidak tersedia, panggilan
        mengembalikan `503` pada templat pertama yang gagal: templat yang
        dibersihkan lebih awal dalam permintaan tetap dibersihkan, templat yang
        gagal berpindah ke `purge_failed` (sudah dikecualikan dari pencocokan),
        dan mengulangi permintaan akan menyelesaikan prosesnya.


        **`delete_all: true` tanpa filter membersihkan setiap templat biometrik
        di aplikasi dan tidak dapat dibatalkan.** Jalankan endpoint penghitungan
        dengan filter yang sama terlebih dahulu.
      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: >-
                    Templat yang akan dihapus. Diperlukan kecuali `delete_all`
                    bernilai `true`. ID yang sudah dihapus dilaporkan sebagai
                    `already_purged`.
                delete_all:
                  type: boolean
                  default: false
                  description: >-
                    Jika `true`, menghapus permanen setiap templat yang cocok
                    dengan filter di bawah ini (semua templat aplikasi jika
                    tidak ada filter yang diberikan). `template_uuids`
                    diabaikan. Tidak dapat dibatalkan.
                vendor_data:
                  type: string
                  description: >-
                    Hanya dengan `delete_all`: pencocokan substring tanpa
                    membedakan huruf besar/kecil pada `vendor_data` Pengguna
                    pemilik.
                vendor_user_uuid:
                  type: string
                  format: uuid
                  description: >-
                    Hanya dengan `delete_all`: pencocokan persis pada Pengguna
                    pemilik.
                status:
                  type: string
                  enum:
                    - pending
                    - active
                    - expired
                    - held_out_of_use
                    - purge_pending
                    - purge_failed
                  description: Hanya dengan `delete_all`.
                source_type:
                  type: string
                  enum:
                    - session_delete
                    - automatic_retention
                    - backfill
                  description: Hanya dengan `delete_all`.
                retained_from:
                  type: string
                  format: date-time
                  description: Hanya dengan `delete_all`.
                retained_to:
                  type: string
                  format: date-time
                  description: >-
                    Hanya dengan `delete_all`. Tidak boleh lebih awal dari
                    `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: Hasil pembersihan per templat.
          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: Kesalahan validasi — tidak ada yang dihapus menyeluruh.
          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 pengguna konsol, atau kunci API tidak diizinkan. Endpoint ini
            hanya menerima kunci API aplikasi.
          content:
            application/json:
              examples:
                Forbidden:
                  value:
                    detail: You do not have permission to perform this action.
        '503':
          description: >-
            Penyimpanan biometrik tidak tersedia saat mempertahankan atau
            menghapus total templat biometrik. Tidak ada yang dihapus; ulangi
            permintaan yang sama. Coba lagi bersifat idempoten dan mengarah pada
            satu templat tunggal.
          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: >-
        Kunci API aplikasi Anda, dari Developers -> API keys di Business
        Console. Kunci utama memiliki akses penuh. Kunci bernama dapat diberi
        cakupan: none, read, atau write per sumber daya, dibatasi pada beberapa
        alur kerja atau pada sesi yang disetujui, pada daftar alamat IP, dan
        pada tanggal kedaluwarsa. 401 berarti kuncinya salah, dicabut, atau
        kedaluwarsa; 403 berarti tidak ada kunci yang dikirimkan, kunci tidak
        memiliki akses ke sumber daya atau tindakan ini, atau permintaan datang
        dari alamat di luar daftar IP-nya; 404 pada rute sesi berarti sesi
        berada di luar alur kerja atau status kunci tersebut. Kunci tanpa akses
        media menerima URL gambar, video, dan PDF sebagai null, dan kunci tanpa
        izin tulis sesi menerima tautan sesi dan token sebagai null. Lihat
        https://docs.didit.me/console/api-keys.

````

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