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

# تفعيل وإيقاف مراقبة AML للشركات عبر API

> فعّل مراقبة AML المستمرة للشركات أو أوقفها لعدد كبير منها بطلب واحد، مع تقدير للتكلفة قبل التنفيذ ومهمة قابلة للاستعلام ونتيجة لكل شركة. من Didit.



موجّه تبديل مراقبة AML للشركات
        نسخ الموجّه إلى الحافظة



      
      

\<pre>

\`Goal: Enable or disable ongoing AML monitoring for one or many Didit Business (KYB) entities in a single call, with the same semantics as the Business Console. Preview the cost first with estimate_only, then run the change and read the per-business outcome.

Endpoint: POST https://verification.didit.me/v3/businesses/aml-monitoring/
Auth header: x-api-key: <DIDIT_API_KEY>
Content-Type: application/json

Request body:
\- is_enabled: boolean (required) - true to enable monitoring, false to disable it.
\- estimate_only: boolean (default false) - when true, returns the cost preview and performs NO writes: no screening, no billing, no job.
\- vendor_data_list: string[] - your own identifiers, matched exactly as sent.
\- didit_internal_id_list: string[] (UUIDs) - the didit_internal_id returned by the create, get and list endpoints.
Provide at least one list; the two are OR'd. At most 1000 identifiers per request across both lists - split larger selections into several calls.

Semantics:
\- One monitored screening per business: a company that verified several times is monitored and billed once. Disabling turns monitoring off across all of the business's screenings.
\- Businesses without any AML screening are screened first (billed as a regular AML screening) using their legal name (or display name) and country; a business with no name is reported as skipped_no_identity_data.
\- Sandbox applications never create screenings (skipped_sandbox).
\- Enabling is refused with 403 when the organization balance does not cover the estimate; the response carries the estimate.

curl (estimate first):
curl -X POST 'https://verification.didit.me/v3/businesses/aml-monitoring/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"is_enabled": true, "estimate_only": true, "vendor_data_list": ["company-123", "company-456"]}'

Response 200 (estimate_only):
\{
"users_total": 2, "already_enabled": 0, "with_existing_aml": 1, "needing_screening": 1,
"skipped_no_identity_data": 0, "skipped_blocked": 0,
"estimated_screening_cost_usd": 0.2, "estimated_annual_monitoring_cost_usd": 0.14,
"balance_sufficient": true, "unmatched": []
}
(users_total counts the selected businesses; the estimate shape is shared with the users endpoint.)

curl (enable):
curl -X POST 'https://verification.didit.me/v3/businesses/aml-monitoring/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"is_enabled": true, "vendor_data_list": ["company-123", "company-456"]}'

Response 200 (20 businesses or fewer - processed inline, already COMPLETED) or 202 (more than 20 - running in the background):
\{
"job_id": "<uuid>", "status": "COMPLETED", "is_enabled": true, "target_type": "business",
"total": 2, "processed": 2,
"outcomes": {"enabled": 1, "screened_and_enabled": 1, "already_enabled": 0, "disabled": 0, "skipped_no_identity_data": 0, "skipped_blocked": 0, "skipped_sandbox": 0, "failed_provider": 0, "failed_insufficient_balance": 0},
"results": [
\{"didit_internal_id": "<uuid>", "vendor_data": "company-123", "outcome": "enabled"},
\{"didit_internal_id": "<uuid>", "vendor_data": "company-456", "outcome": "screened_and_enabled"}
],
"estimate": { ...same shape as above, without unmatched... },
"unmatched": [],
"error": null,                     // generic message when status is FAILED
"created_at": "<datetime>", "completed_at": "<datetime>"
}
On 202, poll GET /v3/aml-monitoring/jobs/{job_id}/ every couple of seconds until status is COMPLETED or FAILED; results fills in as businesses are processed.

Per-business outcome values: enabled, screened_and_enabled, already_enabled, disabled, skipped_no_identity_data, skipped_sandbox, failed_provider, failed_insufficient_balance (skipped_blocked is always 0 for businesses).

Failure modes:
\- 400 - is_enabled missing, no selector, or more than 1000 identifiers across both lists.
A selection that matches nothing is NOT an error: the job completes with total 0 and every identifier is listed under unmatched (same convention as the batch delete endpoints).
\- 401 - missing/invalid x-api-key.
\- 403 - insufficient balance to enable monitoring for this selection (body: error + estimate).

Idempotency: re-sending an enable returns already_enabled for businesses that are already monitored, with no second screening and no second bill. Disabling an unmonitored business returns disabled and changes nothing.

For end-to-end Didit integration, paste in the full prompt at /integration/integration-prompt.`

\</pre>



      
      

الصق في

## نظرة عامةيفعّل أو يعطّل [مراقبة AML المستمرة](https://docs.didit.me/ar/core-technology/aml-screening/continuous-monitoring-aml-screening.md) للـ[كيانات الشركات](https://docs.didit.me/ar/entities/businesses/overview.md) المحددة، تماماً كما يفعل إجراء **مراقبة AML المستمرة** في Business Console. وتشغّل Business Console ونقطة النهاية هذه العملية الأساسية نفسها، لذا فالقواعد والفوترة والنتائج متطابقة.أرسل `estimate_only: true` أولاً لمعرفة عدد الشركات المحددة، وعدد الشركات التي تحتاج إلى فحص AML جديد، وتكلفة الفحص لمرة واحدة، وتكلفة المراقبة السنوية. لا يُكتب أي شيء في وضع التشغيل التجريبي. يستخدم التقدير أسماء الحقول نفسها المستخدمة في endpoint المستخدمين، لذا فإن `users_total` هو عدد الشركات المحددة.## كيفية معالجة الاختيار- **فحص واحد خاضع للمراقبة لكل شركة.** تُراقَب الشركة التي خضعت للتحقق عدة مرات وتُفوَّتر مرة واحدة. يؤدي التعطيل إلى إيقاف المراقبة عبر جميع فحوص الشركة.
- **تُفحص الشركات التي لا تملك فحص AML أولاً.** تنشئ Didit فحص AML جديداً لها (يظهر في تبويب **التحققات** الخاص بالشركة)، وتُفوَّتر تكلفته كتكلفة فحص AML عادي، ثم تُفعَّل المراقبة عليه. يستخدم الفحص الاسم القانوني للشركة (أو اسم العرض) وبلدها. والشركة التي لا تملك أي اسم تُبلَّغ بالحالة `skipped_no_identity_data` بدلاً من أن تُستبعد بصمت.
- **لا تنشئ تطبيقات البيئة التجريبية فحوصات أبداً** (`skipped_sandbox`).
- **يُفحص الرصيد مسبقاً.** يُرفض التفعيل برمز `403` عندما لا يغطي رصيدك التقدير، وتتضمن الاستجابة التقدير حتى تعرف مقدار ما تحتاج إلى شحنه.
- **التجديد السنوي.** تُحتسب على الشركة المُراقَبة حديثاً قيمة المراقبة السنوية عند تاريخ تجديدها التالي، وهو التاريخ نفسه الذي تعرضه Console في عمود **المراقبة المستمرة**. يوقف التعطيل التجديد، ولا يسترد فترةً سبق احتسابها.## الاختيار وحجم الدفعةاختر الشركات باستخدام `vendor_data_list` أو `didit_internal_id_list` أو كليهما؛ والقائمتان تُجمعان بمنطق OR. يقبل الطلب **1000 معرّف** كحد أقصى عبر القائمتين معاً. تُعاد المعرّفات التي لا تطابق أي شركة في تطبيقك ضمن `unmatched` كما أُرسلت تماماً، ولا تُفشل الطلبَ أبداً: الاختيار الذي لا يطابق شيئاً يكتمل كمهمة فارغة (`total: 0`) مع إدراج كل المعرّفات، وذلك وفق الأسلوب نفسه المتبع في endpoints الحذف الدفعي.## التنفيذ المباشر أو في الخلفيةتُعالَج الاختيارات التي تضم **20 شركة أو أقل** مباشرة، ويعيد الاستدعاء `200` مع المهمة المكتملة. أما الاختيارات الأكبر فتعيد `202` مع مهمة بحالة `PENDING`؛ استعلم عن [الحصول على مهمة مراقبة AML](https://docs.didit.me/ar/management-api/aml-monitoring/get-job.md) حتى تصبح `status` بالقيمة `COMPLETED` أو `FAILED`. وفي الحالتين تحمل المهمة إدخالاً واحداً في `results` لكل شركة مع `outcome` الخاص به.| `outcome` | المعنى |
| - | - |
| `enabled` | تم تفعيل المراقبة على فحص AML موجود. |
| `screened_and_enabled` | أُنشئ فحص AML جديد (وتُفوَّتر تكلفته) وفُعّلت المراقبة عليه. |
| `already_enabled` | كانت المراقبة مفعّلة بالفعل؛ لم يتغير شيء ولم تُفوَّتر أي تكلفة. |
| `disabled` | أُوقفت المراقبة عبر كل فحوص الشركة. |
| `skipped_no_identity_data` | ليس للشركة اسم قانوني ولا اسم عرض لفحصه. |
| `skipped_sandbox` | تطبيق بيئة تجريبية؛ لا يُنشأ أي فحص. |
| `failed_provider` | تعذّر إكمال الفحص. أعد المحاولة لاحقاً. |
| `failed_insufficient_balance` | نفد الرصيد أثناء تشغيل المهمة. |## webhookلا يُصدر تبديل المراقبة أي webhook خاص به. وبمجرد تفعيل المراقبة، تستمر عمليات إعادة الفحص في إطلاق الأحداث المعتادة `status.updated` و`data.updated` الموضحة في [مراقبة AML المستمرة](https://docs.didit.me/ar/core-technology/aml-screening/continuous-monitoring-aml-screening.md).## الأذوناتيمكن لأي مفتاح API نشط للتطبيق استدعاء نقطة النهاية هذه. مفاتيح Didit API **مرتبطة بالتطبيق وليست بالأدوار**. أما [الأدوار والأذونات](https://docs.didit.me/ar/console/roles-permissions.md) في Console فتحدد ما يمكن *للشخص* فعله داخل Console، ولا تُطبَّق على حركة Management API.## ذات صلة- [الحصول على مهمة مراقبة AML](https://docs.didit.me/ar/management-api/aml-monitoring/get-job.md)
- [تبديل مراقبة AML للمستخدمين](https://docs.didit.me/ar/management-api/aml-monitoring/toggle-users.md)
- [مراقبة AML المستمرة](https://docs.didit.me/ar/core-technology/aml-screening/continuous-monitoring-aml-screening.md)
- [فحص AML للشركات](https://docs.didit.me/ar/business-verification/aml.md)
- [عرض الشركات](https://docs.didit.me/ar/management-api/businesses/list.md)


## OpenAPI

````yaml ar/openapi-25.json POST /v3/businesses/aml-monitoring/
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/businesses/aml-monitoring/:
    post:
      tags:
        - AML Ongoing Monitoring
      summary: تمكين مراقبة AML المستمرة أو تعطيلها للشركات
      description: >-
        تقوم بتشغيل مراقبة AML المستمرة أو إيقافها للشركات المحددة، بالدلالات
        نفسها المتبعة في Business Console. يتم الاحتفاظ بفحص AML مراقب واحد
        بالضبط لكل شركة، وبالتالي فإن الملف التعريفي الذي تم التحقق منه عدة مرات
        تجري مراقبته وتتم فوترته مرة واحدة فقط؛ يؤدي التعطيل إلى إيقاف المراقبة
        عبر جميع فحوصات الملف التعريفي. أما الشركات التي ليس لديها أي فحص AML
        فيتم فحصها أولاً (وتتم الفوترة كفحص AML عادي) متى توفر لديها الاسم
        القانوني أو الاسم المعروض المطلوب؛ وإلا فسيتم الإبلاغ عنها على أنها
        `skipped_no_identity_data`.


        اضبط `estimate_only: true` لمعاينة الأعداد والتكاليف دون كتابة أي شيء.
        تكتمل عمليات التحديد لـ 20 ملفاً تعريفياً أو أقل مباشرة وتعيد الرمز
        `200` مع المهمة المكتملة؛ بينما تعيد التحديدات الأكبر الرمز `202` وتعمل
        في الخلفية - استعلم دورياً عبر [Get AML monitoring
        job](#get-/v3/aml-monitoring/jobs/-job_id-/) باستخدام `job_id` المُعاد.
        يُرفض التفعيل بالرمز `403` عندما لا يغطي رصيد المؤسسة التكلفة التقديرية.
        تُدرج المعرّفات التي لا تطابق أي شيء في `unmatched` ولا تتسبب أبداً في
        فشل الطلب: يكتمل التحديد الذي لا يطابق أي شيء كمهمة فارغة (`total` بقيمة
        0)، وهي نفس القاعدة المعمول بها في endpoints الخاصة بالحذف الجماعي.
      operationId: toggle_businesses_aml_monitoring
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - is_enabled
              description: >-
                حدد الشركات باستخدام `vendor_data_list` أو
                `didit_internal_id_list` أو كليهما (يتم الجمع بين القائمتين
                باستخدام المعامل OR). بحد أقصى 1000 معرّف لكل طلب عبر كلتا
                القائمتين.
              properties:
                is_enabled:
                  type: boolean
                  description: true لتفعيل المراقبة، وfalse لتعطيلها.
                estimate_only:
                  type: boolean
                  default: false
                  description: >-
                    عند التعيين على true، يُرجع تقدير التكلفة ولا ينفذ أي عمليات
                    كتابة - لا فحص، ولا فوترة، ولا مهمة.
                vendor_data_list:
                  type: array
                  items:
                    type: string
                  description: >-
                    المعرّفات الخاصة بك للشركات المراد تبديل حالتها، وتتم
                    مطابقتها تماماً كما أُرسلت.
                didit_internal_id_list:
                  type: array
                  items:
                    type: string
                    format: uuid
                  description: >-
                    المعرّفات الداخلية لـ Didit للشركات المراد تبديل حالتها -
                    وهي معرّفات `didit_internal_id` التي تُرجعها endpoints
                    الخاصة بالإنشاء والجلب والقائمة.
            examples:
              Estimate first:
                summary: معاينة التكلفة دون إجراء عمليات كتابة
                value:
                  is_enabled: true
                  estimate_only: true
                  vendor_data_list:
                    - company-123
                    - company-456
              Enable:
                summary: تمكين المراقبة لشركتين
                value:
                  is_enabled: true
                  vendor_data_list:
                    - company-123
                    - company-456
              Disable:
                summary: تعطيل المراقبة باستخدام معرّف Didit الداخلي
                value:
                  is_enabled: false
                  didit_internal_id_list:
                    - 3f1c0d3e-8f0a-4c2e-9a3d-9b1f5f4a2c11
      responses:
        '200':
          description: >-
            التقدير (عندما يكون `estimate_only` صحيحاً) أو المهمة المكتملة
            لاختيار تمت معالجته بشكل مضمّن.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AMLMonitoringToggleResult'
        '202':
          description: >-
            يتم تشغيل التحديدات الأكبر في الخلفية. استعلم دورياً من endpoint
            الخاصة بالمهمة باستخدام `job_id`؛ يتم ملء `results` مع معالجة
            الملفات التعريفية.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AMLMonitoringJob'
        '400':
          description: >-
            خطأ في التحقق: `is_enabled` مفقود، أو لا يوجد محدد، أو يوجد أكثر من
            1000 معرّف عبر كلتا القائمتين.
        '401':
          description: مفتاح API مفقود أو غير صالح.
        '403':
          description: >-
            الرصيد غير كافٍ لتمكين المراقبة لهذا التحديد. تتضمن الاستجابة
            `estimate` حتى تتمكن من شحن الرصيد بالمبلغ المناسب.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  estimate:
                    type: object
                    description: >-
                      معاينة التكلفة. يتم إرجاعها مباشرة عندما يكون
                      estimate_only صحيحاً (لا يتم كتابة أي شيء).
                    properties:
                      users_total:
                        type: integer
                        description: الملفات الشخصية المطابقة للتحديد.
                      already_enabled:
                        type: integer
                        description: >-
                          الملفات الشخصية الخاضعة للمراقبة بالفعل (لا يلزم اتخاذ
                          أي إجراء عند التفعيل؛ هذه هي الملفات التي يتم إيقافها
                          عند التعطيل).
                      with_existing_aml:
                        type: integer
                        description: >-
                          الملفات الشخصية التي سيتم تحويل فحص AML الحالي الخاص
                          بها إلى قيد المراقبة (دون إجراء فحص جديد).
                      needing_screening:
                        type: integer
                        description: >-
                          الملفات الشخصية التي لا تخضع لأي فحص AML وسيُجرى فحصها
                          أولاً (تتم فوترتها كفحص AML عادي).
                      skipped_no_identity_data:
                        type: integer
                        description: >-
                          الملفات الشخصية التي لا يمكن فحصها بسبب نقص بيانات
                          الهوية.
                      skipped_blocked:
                        type: integer
                        description: >-
                          المستخدمون المحظورون الذين سيتم تخطيهم (تكون دائماً 0
                          للشركات).
                      estimated_screening_cost_usd:
                        type: number
                        example: 0.2
                        description: التكلفة لمرة واحدة لعمليات الفحص الجديدة.
                      estimated_annual_monitoring_cost_usd:
                        type: number
                        example: 0.07
                        description: >-
                          تكلفة المراقبة السنوية للملفات الشخصية التي ستصبح
                          خاضعة للمراقبة.
                      balance_sufficient:
                        type: boolean
                        description: >-
                          ما إذا كان رصيد المؤسسة يغطي الفحص بالإضافة إلى السنة
                          الأولى من المراقبة.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X POST
            'https://verification.didit.me/v3/businesses/aml-monitoring/' \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{"is_enabled": true, "vendor_data_list": ["company-123", "company-456"]}'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.businesses.set_aml_monitoring(
                is_enabled=True,
                estimate_only=True,
                vendor_data_list=["company-123", "company-456"],
            )
            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.businesses.setAmlMonitoring({
              is_enabled: true,
              estimate_only: true,
              vendor_data_list: ["company-123", "company-456"],
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Businesses.SetAMLMonitoring(ctx, didit.BusinessesSetAMLMonitoringParams{\n\tIsEnabled:      true,\n\tEstimateOnly:   didit.Bool(true),\n\tVendorDataList: didit.Some([]string{\"company-123\", \"company-456\"}),\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.BusinessesSetAmlMonitoringParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.businesses().setAmlMonitoring(BusinessesSetAmlMonitoringParams.builder()
                    .isEnabled(true)
                    .estimateOnly(true)
                    .vendorDataList(List.of("company-123", "company-456"))
                    .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->businesses->setAmlMonitoring([
                'is_enabled' => true,
                'estimate_only' => true,
                'vendor_data_list' => ['company-123', 'company-456'],
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

            # Reads DIDIT_API_KEY.
            didit = Didit::Client.new

            result = didit.businesses.set_aml_monitoring(
              is_enabled: true,
              estimate_only: true,
              vendor_data_list: ["company-123", "company-456"]
            )
            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.Businesses.SetAmlMonitoringAsync(new
            BusinessesSetAmlMonitoringParams

            {
                IsEnabled = true,
                EstimateOnly = true,
                VendorDataList = new string[] { "company-123", "company-456" },
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    AMLMonitoringToggleResult:
      oneOf:
        - type: object
          required:
            - users_total
            - already_enabled
            - with_existing_aml
            - needing_screening
            - skipped_no_identity_data
            - skipped_blocked
            - estimated_screening_cost_usd
            - estimated_annual_monitoring_cost_usd
            - balance_sufficient
            - unmatched
          description: >-
            معاينة التكلفة. يتم إرجاعها مباشرة عندما يكون estimate_only صحيحاً
            (لا يتم كتابة أي شيء).
          properties:
            users_total:
              type: integer
              description: الملفات الشخصية المطابقة للتحديد.
            already_enabled:
              type: integer
              description: >-
                الملفات الشخصية الخاضعة للمراقبة بالفعل (لا يلزم اتخاذ أي إجراء
                عند التفعيل؛ هذه هي الملفات التي يتم إيقافها عند التعطيل).
            with_existing_aml:
              type: integer
              description: >-
                الملفات الشخصية التي سيتم تحويل فحص AML الحالي الخاص بها إلى قيد
                المراقبة (دون إجراء فحص جديد).
            needing_screening:
              type: integer
              description: >-
                الملفات الشخصية التي لا تخضع لأي فحص AML وسيُجرى فحصها أولاً
                (تتم فوترتها كفحص AML عادي).
            skipped_no_identity_data:
              type: integer
              description: الملفات الشخصية التي لا يمكن فحصها بسبب نقص بيانات الهوية.
            skipped_blocked:
              type: integer
              description: المستخدمون المحظورون الذين سيتم تخطيهم (تكون دائماً 0 للشركات).
            estimated_screening_cost_usd:
              type: number
              example: 0.2
              description: التكلفة لمرة واحدة لعمليات الفحص الجديدة.
            estimated_annual_monitoring_cost_usd:
              type: number
              example: 0.07
              description: >-
                تكلفة المراقبة السنوية للملفات الشخصية التي ستصبح خاضعة
                للمراقبة.
            balance_sufficient:
              type: boolean
              description: >-
                ما إذا كان رصيد المؤسسة يغطي الفحص بالإضافة إلى السنة الأولى من
                المراقبة.
            unmatched:
              type: array
              items:
                type: string
              description: >-
                معرّفات الطلب التي لم تطابق أي ملف تعريف في هذا التطبيق، تماماً
                كما أُرسلت.
        - type: object
          required:
            - job_id
            - status
            - is_enabled
            - target_type
            - total
            - processed
            - outcomes
            - results
            - error
            - created_at
            - completed_at
            - estimate
            - unmatched
          properties:
            job_id:
              type: string
              format: uuid
            status:
              type: string
              enum:
                - PENDING
                - PROCESSING
                - COMPLETED
                - FAILED
            is_enabled:
              type: boolean
              description: true عندما تفعّل المهمة المراقبة، وfalse عندما تعطلها.
            target_type:
              type: string
              enum:
                - user
                - business
              description: أي عائلة ملفات تعريف تبدّلها المهمة.
            total:
              type: integer
              description: الملفات الشخصية التي تعالجها المهمة.
            processed:
              type: integer
              description: الملفات الشخصية التي تمت معالجتها حتى الآن.
            outcomes:
              type: object
              description: >-
                عدادات النتائج لكل سجل. يُحل كل ملف تعريفي محدد إلى عداد واحد
                بالضبط؛ لا يتم تخطي أي شيء بصمت.
              properties:
                enabled:
                  type: integer
                  description: تم تمكين المراقبة على فحص AML حالي.
                screened_and_enabled:
                  type: integer
                  description: تم إنشاء فحص AML جديد (تمت فوترته) وتم تفعيل المراقبة عليه.
                already_enabled:
                  type: integer
                  description: >-
                    كانت المراقبة نشطة بالفعل؛ لم يتغير شيء ولم تتم فوترة أي
                    شيء.
                disabled:
                  type: integer
                  description: تم إيقاف تشغيل المراقبة في جميع فحوصات AML للملف التعريفي.
                skipped_no_identity_data:
                  type: integer
                  description: >-
                    تم التخطي: يفتقر الملف التعريفي إلى الاسم الكامل وتاريخ
                    الميلاد والدولة (للمستخدمين) أو الاسم (للشركات) المطلوبة
                    لإجراء الفحص.
                skipped_blocked:
                  type: integer
                  description: 'تم التخطي: تم حظر المستخدم.'
                skipped_sandbox:
                  type: integer
                  description: 'تم التخطي: تطبيق في البيئة التجريبية، لم يتم إنشاء أي فحص.'
                failed_provider:
                  type: integer
                  description: تعذر إكمال الفحص؛ أعد المحاولة لاحقاً.
                failed_insufficient_balance:
                  type: integer
                  description: نفد الرصيد أثناء تشغيل المهمة.
            results:
              type: array
              description: >-
                إدخال واحد لكل ملف شخصي تمت معالجته، وفق ترتيب المعالجة. تتزايد
                الإدخالات أثناء تشغيل المهمة؛ وتكتمل بمجرد أن تصبح الحالة
                COMPLETED. يُسجل للوظائف التي بدأت عبر API.
              items:
                type: object
                properties:
                  didit_internal_id:
                    type: string
                    format: uuid
                    description: المعرّف الداخلي لـ Didit للملف التعريفي.
                  vendor_data:
                    type: string
                    nullable: true
                    description: المعرّف الخاص بك للملف الشخصي.
                  outcome:
                    type: string
                    enum:
                      - enabled
                      - screened_and_enabled
                      - already_enabled
                      - disabled
                      - skipped_no_identity_data
                      - skipped_blocked
                      - skipped_sandbox
                      - failed_provider
                      - failed_insufficient_balance
            error:
              type: string
              nullable: true
              description: >-
                رسالة فشل عامة عندما تكون الحالة FAILED؛ يتم الاحتفاظ بالسبب
                التفصيلي من جهة المنصة.
            created_at:
              type: string
              format: date-time
            completed_at:
              type: string
              format: date-time
              nullable: true
            estimate:
              type: object
              description: >-
                معاينة التكلفة. يتم إرجاعها مباشرة عندما يكون estimate_only
                صحيحاً (لا يتم كتابة أي شيء).
              properties:
                users_total:
                  type: integer
                  description: الملفات الشخصية المطابقة للتحديد.
                already_enabled:
                  type: integer
                  description: >-
                    الملفات الشخصية الخاضعة للمراقبة بالفعل (لا يلزم اتخاذ أي
                    إجراء عند التفعيل؛ هذه هي الملفات التي يتم إيقافها عند
                    التعطيل).
                with_existing_aml:
                  type: integer
                  description: >-
                    الملفات الشخصية التي سيتم تحويل فحص AML الحالي الخاص بها إلى
                    قيد المراقبة (دون إجراء فحص جديد).
                needing_screening:
                  type: integer
                  description: >-
                    الملفات الشخصية التي لا تخضع لأي فحص AML وسيُجرى فحصها أولاً
                    (تتم فوترتها كفحص AML عادي).
                skipped_no_identity_data:
                  type: integer
                  description: الملفات الشخصية التي لا يمكن فحصها بسبب نقص بيانات الهوية.
                skipped_blocked:
                  type: integer
                  description: >-
                    المستخدمون المحظورون الذين سيتم تخطيهم (تكون دائماً 0
                    للشركات).
                estimated_screening_cost_usd:
                  type: number
                  example: 0.2
                  description: التكلفة لمرة واحدة لعمليات الفحص الجديدة.
                estimated_annual_monitoring_cost_usd:
                  type: number
                  example: 0.07
                  description: >-
                    تكلفة المراقبة السنوية للملفات الشخصية التي ستصبح خاضعة
                    للمراقبة.
                balance_sufficient:
                  type: boolean
                  description: >-
                    ما إذا كان رصيد المؤسسة يغطي الفحص بالإضافة إلى السنة الأولى
                    من المراقبة.
            unmatched:
              type: array
              items:
                type: string
              description: >-
                معرّفات الطلب التي لم تطابق أي ملف تعريف في هذا التطبيق، تماماً
                كما أُرسلت. وهي ليست جزءاً من المهمة.
    AMLMonitoringJob:
      type: object
      properties:
        job_id:
          type: string
          format: uuid
        status:
          type: string
          enum:
            - PENDING
            - PROCESSING
            - COMPLETED
            - FAILED
        is_enabled:
          type: boolean
          description: true عندما تفعّل المهمة المراقبة، وfalse عندما تعطلها.
        target_type:
          type: string
          enum:
            - user
            - business
          description: أي عائلة ملفات تعريف تبدّلها المهمة.
        total:
          type: integer
          description: الملفات الشخصية التي تعالجها المهمة.
        processed:
          type: integer
          description: الملفات الشخصية التي تمت معالجتها حتى الآن.
        outcomes:
          type: object
          description: >-
            عدادات النتائج لكل سجل. يُحل كل ملف تعريفي محدد إلى عداد واحد
            بالضبط؛ لا يتم تخطي أي شيء بصمت.
          properties:
            enabled:
              type: integer
              description: تم تمكين المراقبة على فحص AML حالي.
            screened_and_enabled:
              type: integer
              description: تم إنشاء فحص AML جديد (تمت فوترته) وتم تفعيل المراقبة عليه.
            already_enabled:
              type: integer
              description: كانت المراقبة نشطة بالفعل؛ لم يتغير شيء ولم تتم فوترة أي شيء.
            disabled:
              type: integer
              description: تم إيقاف تشغيل المراقبة في جميع فحوصات AML للملف التعريفي.
            skipped_no_identity_data:
              type: integer
              description: >-
                تم التخطي: يفتقر الملف التعريفي إلى الاسم الكامل وتاريخ الميلاد
                والدولة (للمستخدمين) أو الاسم (للشركات) المطلوبة لإجراء الفحص.
            skipped_blocked:
              type: integer
              description: 'تم التخطي: تم حظر المستخدم.'
            skipped_sandbox:
              type: integer
              description: 'تم التخطي: تطبيق في البيئة التجريبية، لم يتم إنشاء أي فحص.'
            failed_provider:
              type: integer
              description: تعذر إكمال الفحص؛ أعد المحاولة لاحقاً.
            failed_insufficient_balance:
              type: integer
              description: نفد الرصيد أثناء تشغيل المهمة.
        results:
          type: array
          description: >-
            إدخال واحد لكل ملف شخصي تمت معالجته، وفق ترتيب المعالجة. تتزايد
            الإدخالات أثناء تشغيل المهمة؛ وتكتمل بمجرد أن تصبح الحالة COMPLETED.
            يُسجل للوظائف التي بدأت عبر API.
          items:
            type: object
            properties:
              didit_internal_id:
                type: string
                format: uuid
                description: المعرّف الداخلي لـ Didit للملف التعريفي.
              vendor_data:
                type: string
                nullable: true
                description: المعرّف الخاص بك للملف الشخصي.
              outcome:
                type: string
                enum:
                  - enabled
                  - screened_and_enabled
                  - already_enabled
                  - disabled
                  - skipped_no_identity_data
                  - skipped_blocked
                  - skipped_sandbox
                  - failed_provider
                  - failed_insufficient_balance
        error:
          type: string
          nullable: true
          description: >-
            رسالة فشل عامة عندما تكون الحالة FAILED؛ يتم الاحتفاظ بالسبب
            التفصيلي من جهة المنصة.
        created_at:
          type: string
          format: date-time
        completed_at:
          type: string
          format: date-time
          nullable: true
        estimate:
          type: object
          description: >-
            معاينة التكلفة. يتم إرجاعها مباشرة عندما يكون estimate_only صحيحاً
            (لا يتم كتابة أي شيء).
          properties:
            users_total:
              type: integer
              description: الملفات الشخصية المطابقة للتحديد.
            already_enabled:
              type: integer
              description: >-
                الملفات الشخصية الخاضعة للمراقبة بالفعل (لا يلزم اتخاذ أي إجراء
                عند التفعيل؛ هذه هي الملفات التي يتم إيقافها عند التعطيل).
            with_existing_aml:
              type: integer
              description: >-
                الملفات الشخصية التي سيتم تحويل فحص AML الحالي الخاص بها إلى قيد
                المراقبة (دون إجراء فحص جديد).
            needing_screening:
              type: integer
              description: >-
                الملفات الشخصية التي لا تخضع لأي فحص AML وسيُجرى فحصها أولاً
                (تتم فوترتها كفحص AML عادي).
            skipped_no_identity_data:
              type: integer
              description: الملفات الشخصية التي لا يمكن فحصها بسبب نقص بيانات الهوية.
            skipped_blocked:
              type: integer
              description: المستخدمون المحظورون الذين سيتم تخطيهم (تكون دائماً 0 للشركات).
            estimated_screening_cost_usd:
              type: number
              example: 0.2
              description: التكلفة لمرة واحدة لعمليات الفحص الجديدة.
            estimated_annual_monitoring_cost_usd:
              type: number
              example: 0.07
              description: >-
                تكلفة المراقبة السنوية للملفات الشخصية التي ستصبح خاضعة
                للمراقبة.
            balance_sufficient:
              type: boolean
              description: >-
                ما إذا كان رصيد المؤسسة يغطي الفحص بالإضافة إلى السنة الأولى من
                المراقبة.
        unmatched:
          type: array
          items:
            type: string
          description: >-
            معرّفات الطلب التي لم تطابق أي ملف تعريف في هذا التطبيق، تماماً كما
            أُرسلت. وهي ليست جزءاً من المهمة.
  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.