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

# حذف القوالب البيومترية بالجملة عبر واجهة برمجة التطبيقات

> يحذف Didit قوالب الوجه البيومترية المحفوظة بحسب قائمة المعرّفات أو وفق فلتر. POST /v3/biometric-templates/delete/ — idempotency لكل قالب.

يحذف عدة قوالب بيومترية دفعة واحدة في استدعاء واحد. وفّر إما قائمة معرّفات صريحة، أو `delete_all: true`، ويمكنك اختيارياً تضييق النتائج بالمرشحات نفسها المستخدمة في [عرض القوالب البيومترية](https://docs.didit.me/ar/management-api/biometric-templates/list.md).

## نص الطلب

| الحقل | النوع | الوصف |
| - | - | - |
| `template_uuids` | UUID\[] | القوالب المراد حذفها نهائياً. هذا الحقل مطلوب ما لم تكن قيمة `delete_all` هي `true`. المعرّفات التي حُذفت نهائياً من قبل تُبلَّغ بالحالة `already_purged`. |
| `delete_all` | boolean | عند القيمة `true`، يُحذف نهائياً كل قالب يطابق المرشحات أدناه (جميع قوالب التطبيق عند عدم تحديد أي مرشح). يُتجاهل الحقل `template_uuids`. |
| `vendor_data` | string | فقط مع `delete_all`: مطابقة غير حساسة لحالة الأحرف لسلسلة فرعية من قيمة `vendor_data` الخاصة بالمستخدم المالك |
| `vendor_user_uuid` | UUID | فقط مع `delete_all`: مطابقة تامة للمستخدم المالك |
| `status` | enum | فقط مع `delete_all`: `pending`، `active`، `expired`، `held_out_of_use`، `purge_pending`، `purge_failed` |
| `source_type` | enum | فقط مع `delete_all`: `session_delete`، `automatic_retention`، `backfill` |
| `retained_from`، `retained_to` | datetime | فقط مع `delete_all`: نطاق تاريخ الاحتفاظ |

> [!WARNING]
>
> `delete_all: true` بدون مرشحات يحذف نهائياً كل قالب بيومتري في التطبيق، ولا يمكن التراجع عن ذلك. شغّل [عدّ القوالب البيومترية](https://docs.didit.me/ar/management-api/biometric-templates/count.md) بالمرشحات نفسها أولاً للتأكد مما سيُحذف.

## أمثلة

> [tab] حسب المعرّف
>
> ```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] كل القوالب لمستخدم واحد
>
> ```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] كل القوالب في التطبيق
>
> ```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" }
  ]
}
```

تُحذف القوالب واحداً تلو الآخر، وتُبلَّغ نتيجة كل قالب بالحالة `purged` أو `already_purged`. إذا كان أحد المخازن البيومترية غير متاح، يعيد الاستدعاء الرمز `503` عند أول قالب يفشل. تبقى القوالب التي حُذفت نهائياً في وقت سابق من الطلب نفسه محذوفة، وينتقل القالب الذي فشل إلى `purge_failed` (وهو مستبعد من المطابقة بالفعل). إعادة الطلب تُكمل المهمة.

## الأخطاء

| الحالة | متى تحدث | النص |
| - | - | - |
| `400` | لم يُوفَّر أي من `template_uuids` أو `delete_all: true` | `{"template_uuids": ["This field is required unless delete_all is true."]}` |
| `400` | قيمة مرشح غير صالحة، أو `retained_to` أقدم من `retained_from` | أخطاء التحقق المرتبطة بالحقول |
| `403` | رمز مستخدم من لوحة التحكم، أو أن مفتاح API غير مسموح له بهذا الإجراء | `{"detail": "You do not have permission to perform this action."}` |
| `503` | تعذّر الوصول إلى أحد المخازن البيومترية؛ أعد الطلب | `{"detail": "The biometric-template operation could not finish because an external store is unavailable. The operation is retryable."}` |


## OpenAPI

````yaml ar/openapi-25.json POST /v3/biometric-templates/delete/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API التحقق من الهوية. قم بالمصادقة باستخدام الرأس x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/biometric-templates/delete/:
    post:
      tags:
        - Biometric Templates
      summary: تطهير مجمّع للقوالب البيومترية المحفوظة
      description: >-
        يحتفظ التطبيق المشترك بقالب بيومتري واحد للوجه يُدار بشكل منفصل وخالٍ من
        الصور مرتبطاً بالمستخدم عند حذف الجلسة (راجع `DELETE
        /v3/session/{sessionId}/delete/`). القوالب هي بيانات بيومترية ذات
        `expires_at` محدود؛ ولا تحتوي أبداً على صور أو بيانات جلسة أو حقول هوية،
        ويتم حذفها نهائياً عند حذف المستخدم أو محو بيانات الخصوصية أو انتهاء
        الصلاحية أو الحذف النهائي الصريح. تقبل هذه الـ endpoints مفاتيح API
        الخاصة بالتطبيق (`x-api-key`) فقط؛ ويتم رفض رموز مستخدمي Business
        Console بـ `403`.


        يقوم بحذف العديد من القوالب نهائياً في استدعاء واحد، إما عبر قائمة id
        صريحة أو باستخدام `delete_all: true` مع تقييدها اختياريًا بنفس عوامل
        التصفية الخاصة بـ endpoint القائمة. يتم حذف القوالب نهائياً واحداً تلو
        الآخر ويُبلغ كل ناتج عن `purged` أو `already_purged`. إذا كان مخزن
        البيانات البيومترية غير متاح، يُرجع الاستدعاء `503` عند أول قالب يفشل:
        تظل القوالب التي تم حذفها نهائياً في وقت سابق من الطلب محذوفة، وينتقل
        القالب الفاشل إلى `purge_failed` (المستبعد بالفعل من المطابقة)، وتؤدي
        إعادة تكرار الطلب إلى إنهاء المهمة.


        **يؤدي `delete_all: true` بدون عوامل تصفية إلى حذف كل قالب بيومتري في
        التطبيق نهائياً ولا يمكن التراجع عن ذلك.** قم بتشغيل endpoint العدّ بنفس
        عوامل التصفية أولاً.
      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: >-
                    القوالب المراد حذفها نهائيًا. مطلوب ما لم تكن قيمة
                    `delete_all` هي `true`. يتم الإبلاغ عن المعرّفات التي حُذفت
                    نهائيًا بالفعل كـ `already_purged`.
                delete_all:
                  type: boolean
                  default: false
                  description: >-
                    عندما تكون `true`، يتم مسح كل قالب يطابق عوامل التصفية أدناه
                    (جميع قوالب التطبيق في حال عدم تحديد أي عامل تصفية). يتم
                    تجاهل `template_uuids`. لا يمكن التراجع عن هذا الإجراء.
                vendor_data:
                  type: string
                  description: >-
                    فقط مع `delete_all`: مطابقة لسلسلة نصية فرعية غير حساسة
                    لحالة الأحرف في `vendor_data` للمستخدم المالك.
                vendor_user_uuid:
                  type: string
                  format: uuid
                  description: 'فقط مع `delete_all`: مطابقة تامة للمستخدم المالك.'
                status:
                  type: string
                  enum:
                    - pending
                    - active
                    - expired
                    - held_out_of_use
                    - purge_pending
                    - purge_failed
                  description: فقط مع `delete_all`.
                source_type:
                  type: string
                  enum:
                    - session_delete
                    - automatic_retention
                    - backfill
                  description: فقط مع `delete_all`.
                retained_from:
                  type: string
                  format: date-time
                  description: فقط مع `delete_all`.
                retained_to:
                  type: string
                  format: date-time
                  description: فقط مع `delete_all`. يجب ألا يكون أقدم من `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: نتائج التطهير لكل قالب.
          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: خطأ في التحقق من الصحة — لم يتم مسح أي شيء.
          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 مستخدم Console، أو مفتاح API غير مسموح به. تقبل هذه endpoints
            مفاتيح API الخاصة بالتطبيق فقط.
          content:
            application/json:
              examples:
                Forbidden:
                  value:
                    detail: You do not have permission to perform this action.
        '503':
          description: >-
            كان مخزن البيانات البيومترية غير متاح أثناء الاحتفاظ بالقالب
            البيومتري أو مسحه. لم يُحذف أي شيء؛ كرر نفس الطلب. عمليات إعادة
            المحاولة تمتاز بخاصية idempotency وتلتقي عند قالب واحد.
          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: >-
        مفتاح API الخاص بتطبيقك، من Developers -> API keys في Business Console.
        يمتلك المفتاح الأساسي وصولاً كاملاً. يمكن تحديد نطاق المفتاح المسمى: لا
        شيء، أو قراءة، أو كتابة لكل مورد، ومحدوداً ببعض مسارات العمل أو بالجلسات
        المقبولة، وبقائمة من عناوين IP، وبتاريخ انتهاء الصلاحية. يشير 401 إلى أن
        المفتاح غير صحيح أو ملغى أو منتهي الصلاحية؛ ويشير 403 إلى أنه لم يتم
        إرسال أي مفتاح، أو أن المفتاح ليس لديه حق الوصول إلى هذا المورد أو
        الإجراء، أو أن الطلب جاء من عنوان خارج قائمة عناوين IP الخاصة به؛ ويشير
        404 في مسار جلسة إلى أن الجلسة خارج مسارات العمل أو الحالات الخاصة
        بالمفتاح. يتلقى المفتاح الذي لا يمتلك حق الوصول إلى الوسائط عناوين URL
        للصور ومقاطع الفيديو وملفات PDF كـ null، ويتلقى المفتاح الذي لا يمتلك
        إذن كتابة للجلسات روابط الجلسة وtoken كـ null. راجع
        https://docs.didit.me/console/api-keys.

````

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