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

# واجهة برمجة تطبيقات تقرير PDF لفحص المحافظ

> حوّل نتيجة فحص المحفظة إلى تقرير PDF بعلامة Didit عبر إعادة إرسال JSON الخاص بنقطة فحص المحفظة. بلا حالة، ولا استدعاء لمزوّد، ولا رسوم إضافية.



الموجّه الخاص بملف PDF لفحص المحفظة
        نسخ الموجّه إلى الحافظة



      
      

\<pre>

\`Render a previously returned on-demand wallet-screening result as a Didit-branded PDF, through the Didit Management API.

Endpoint:
POST https://verification.didit.me/v3/wallet-screening/pdf/

Authentication:
Use the x-api-key header with my Didit API key.

Goal:
\- Turn a wallet-screening JSON result into a downloadable PDF report. This is stateless: nothing is persisted, no provider is called again, and there is no additional billing.

Prerequisites:
\- You must already have the exact JSON body that POST /v3/wallet-screening/ returned, including its report_signature field. This endpoint does not accept a hand-built or edited payload.

Request body (application/json):
\- The full, unmodified response body from POST /v3/wallet-screening/ (or its console equivalent), including report_signature.

Example call:
curl -X POST "https://verification.didit.me/v3/wallet-screening/pdf/" \
-H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d "$RESULT" \
-o wallet_screening_report.pdf

Response:
\- Body is binary (application/pdf). DO NOT parse as JSON.
\- Content-Type: application/pdf
\- Content-Disposition: attachment; filename=wallet_screening_<address>.pdf

Failure modes:
\- 400 - the body is not a JSON object matching the wallet-screening result shape, or report_signature is missing or invalid (the result was edited, truncated, or hand-built instead of reposted verbatim).
\- 401 - missing or invalid x-api-key.

For the underlying screening call, see /management-api/transactions/screen-wallet.`

\</pre>



      
      

الصق في

## لماذا هو عديم الحالةلا يكتب فحص المحافظ المستقل أي شيء في جدول المعاملات، لذلك لا يوجد سجل محفوظ تعرض منه endpoint هذه النتيجة. بدلًا من ذلك، تعيد إرسال نص JSON الدقيق الذي أعادته لك `POST /v3/wallet-screening/`، فيحوّل Didit هذه الحمولة إلى ملف PDF دون استدعاء مزوّد الخدمة مرة أخرى.## حقل `report_signature`تتضمن كل استجابة من `POST /v3/wallet-screening/` الآن حقل `report_signature`، وهو توقيع مبهم مرتبط بتطبيقك. تتحقق endpoint هذه من التوقيع قبل العرض، لذلك لا يستطيع المستدعي تعديل `risk_score` أو `severity` أو `sanctions_hit` أو أي حقل آخر والحصول على ملف PDF يحمل علامة Didit ويبدو سليمًا لنتيجة لم ينتجها Didit.أعد دائمًا إرسال نص الاستجابة الكامل **دون تعديل**، بما في ذلك `report_signature`. ترتيب المفاتيح مقبول، أما تغيير أي قيمة موقّعة فغير مقبول.```bash theme={null}
# 1. Run the screening and save the full response
RESULT=$(curl -s -X POST https://verification.didit.me/v3/wallet-screening/ \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"wallet_address": "0x28c6c06298d514db089934071355e5743bf21d60", "blockchain": "ETH"}')

# 2. Repost it verbatim to render the PDF
curl -X POST https://verification.didit.me/v3/wallet-screening/pdf/ \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d "$RESULT" \
  -o wallet_screening_report.pdf
```## الفوترةلا يتم أي استدعاء لمزوّد الخدمة ولا يُحتسب أي مبلغ. هذا الـ endpoint يعيد عرض نتيجة دفعت ثمنها بالفعل عند استدعاء `POST /v3/wallet-screening/`.## الأخطاء| الحالة | المعنى |
| - | - |
| `400` | النص ليس كائن JSON يطابق بنية نتيجة فحص المحافظ، أو أن `report_signature` مفقود أو لا يطابق الحقول المعاد إرسالها. |
| `401` | `x-api-key` مفقود أو غير صالح. |## الخطوات التالية> [card] [فحص المحفظة](https://docs.didit.me/ar/management-api/transactions/screen-wallet.md)
>
> نفّذ فحص المحفظة عند الطلب الذي تقوم عليه endpoint هذه، واحصل على نتيجة JSON لإعادة إرسالها هنا.> [card] [فحص المحافظ عند الطلب](https://docs.didit.me/ar/transaction-monitoring/wallet-screening.md)
>
> نظرة عامة على endpoint فحص المحافظ المستقل ونموذج النتيجة.


## OpenAPI

````yaml ar/openapi-25.json POST /v3/wallet-screening/pdf/
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/wallet-screening/pdf/:
    post:
      tags:
        - Transactions
      summary: عرض نتيجة فحص المحفظة كملف PDF
      description: >-
        مكمّل عديم الحالة لـ `POST /v3/wallet-screening/`: أعد إرسال نص JSON
        الدقيق الذي أرجعه ذلك الـ endpoint — بما في ذلك `report_signature` الذي
        أضافه — واحصل على ملف PDF يحمل علامة Didit لنفس النتيجة. لا يتم استدعاء
        أي مزود، ولا تتم فوترة أي شيء ولا حفظ أي بيانات؛ يقتصر هذا فقط على إعادة
        عرض نتيجة أنشأتها Didit بالفعل. يربط التوقيع ملف PDF بنتيجة غير معدلة:
        يؤدي تعديل `risk_score` أو `severity` أو `sanctions_hit` أو أي حقل موقّع
        آخر قبل إعادة الإرسال إلى الفشل بالرمز `400`.
      operationId: screenWalletPdf
      requestBody:
        required: true
        description: >-
          كائن JSON غير المعدل الذي تم إرجاعه بواسطة `POST
          /v3/wallet-screening/`، بما في ذلك `report_signature`.
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/WalletScreeningResult'
              required:
                - report_signature
              description: >-
                الشكل نفسه لاستجابة `POST /v3/wallet-screening/` — قم بتمرير نص
                الاستجابة هذا حرفياً، بما في ذلك `report_signature`.
      responses:
        '200':
          description: >-
            مستند PDF المُصيَّر، يتم إرجاعه مباشرة كملف ثنائي `application/pdf`
            — لا يوجد غلاف JSON.
          headers:
            Content-Disposition:
              description: >-
                `attachment; filename=wallet_screening_{address}.pdf`، المشتق من
                `wallet_address` (أو `transaction_hash`) في النتيجة المعاد
                نشرها.
              schema:
                type: string
                example: >-
                  attachment;
                  filename=wallet_screening_0x28c6c06298d514db0899.pdf
          content:
            application/pdf:
              schema:
                type: string
                format: binary
        '400':
          description: >-
            نص الطلب ليس كائن JSON يطابق بنية نتيجة فحص المحافظ، أو أن
            `report_signature` مفقود أو لا يطابق الحقول المُعاد إرسالها (تم
            تعديله أو اقتطاعه قبل إعادة الإرسال).
          content:
            application/json:
              schema:
                type: object
              examples:
                Not an object:
                  value:
                    non_field_errors:
                      - >-
                        Expected a JSON object matching a wallet-screening
                        result.
                Missing or invalid signature:
                  value:
                    report_signature:
                      - >-
                        This wallet-screening result is missing or fails its
                        report signature - repost the exact JSON returned by the
                        wallet-screening endpoint, unmodified.
        '401':
          description: '`x-api-key` مفقود أو غير صالح.'
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            # $RESULT is the saved JSON body from POST /v3/wallet-screening/

            curl -X POST
            'https://verification.didit.me/v3/wallet-screening/pdf/' \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d "$RESULT" \
              -o wallet_screening_report.pdf
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            content = client.wallet_screening.screen_pdf(
                provider="your-provider",
                screening_type="WALLET_SCREENING",
                risk_score=1,
                severity="UNKNOWN",
                status="SCREENED",
                summary="your-summary",
                wallet_address="your-wallet-address",
                blockchain="your-blockchain",
                source_of_funds=[{}],
                destination_of_funds=[{}],
                counterparty_connections=[{}],
                sanctions_hit=True,
                dominant_risk_category="your-dominant-risk-category",
                report_signature="your-report-signature",
            )
            with open("download.pdf", "wb") as file:
                file.write(content)
        - lang: javascript
          label: Node.js
          source: >-
            import { writeFile } from "node:fs/promises";

            import Didit from "@didit-protocol/sdk-node";


            // Reads DIDIT_API_KEY.

            const didit = new Didit();


            const content = await didit.walletScreening.screenPdf({
              provider: "your-provider",
              screening_type: "WALLET_SCREENING",
              risk_score: 1,
              severity: "UNKNOWN",
              status: "SCREENED",
              summary: "your-summary",
              wallet_address: "your-wallet-address",
              blockchain: "your-blockchain",
              source_of_funds: [{}],
              destination_of_funds: [{}],
              counterparty_connections: [{}],
              sanctions_hit: true,
              dominant_risk_category: "your-dominant-risk-category",
              report_signature: "your-report-signature",
            });

            await writeFile("download.pdf", Buffer.from(await
            content.arrayBuffer()));
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresp, err := client.WalletScreening.ScreenPDF(ctx, didit.WalletScreeningResultParam{\n\tProvider:                \"your-provider\",\n\tScreeningType:           \"WALLET_SCREENING\",\n\tRiskScore:               1,\n\tSeverity:                \"UNKNOWN\",\n\tStatus:                  \"SCREENED\",\n\tSummary:                 \"your-summary\",\n\tWalletAddress:           \"your-wallet-address\",\n\tBlockchain:              \"your-blockchain\",\n\tSourceOfFunds:           []didit.WalletScreeningResultParamSourceOfFunds{{}},\n\tDestinationOfFunds:      []didit.WalletScreeningResultParamDestinationOfFunds{{}},\n\tCounterpartyConnections: []didit.WalletScreeningResultParamCounterpartyConnections{{}},\n\tSanctionsHit:            true,\n\tDominantRiskCategory:    didit.String(\"your-dominant-risk-category\"),\n\tReportSignature:         \"your-report-signature\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer resp.Body.Close()\nfile, err := os.Create(\"download.pdf\")\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer file.Close()\nif _, err := io.Copy(file, resp.Body); err != nil {\n\tlog.Fatal(err)\n}"
        - lang: java
          label: Java
          source: |-
            import java.nio.file.Path;
            import java.util.List;
            import me.didit.Didit;
            import me.didit.types.WalletScreeningResult;

            // Reads DIDIT_API_KEY.
            Didit client = new Didit();

            client.walletScreening().screenPdf(WalletScreeningResult.builder()
                    .provider("your-provider")
                    .screeningType(WalletScreeningResult.ScreeningType.of("WALLET_SCREENING"))
                    .riskScore(1L)
                    .severity(WalletScreeningResult.Severity.of("UNKNOWN"))
                    .status(WalletScreeningResult.Status.of("SCREENED"))
                    .summary("your-summary")
                    .walletAddress("your-wallet-address")
                    .blockchain("your-blockchain")
                    .sourceOfFunds(List.of(WalletScreeningResult.SourceOfFunds.builder()
                            .build()))
                    .destinationOfFunds(List.of(WalletScreeningResult.DestinationOfFunds.builder()
                            .build()))
                    .counterpartyConnections(List.of(WalletScreeningResult.CounterpartyConnections.builder()
                            .build()))
                    .sanctionsHit(true)
                    .dominantRiskCategory("your-dominant-risk-category")
                    .reportSignature("your-report-signature")
                    .build())
                    .writeTo(Path.of("download.pdf"));
        - lang: php
          label: PHP
          source: |-
            <?php

            require 'vendor/autoload.php';

            use Didit\DiditClient;

            // Reads DIDIT_API_KEY.
            $didit = new DiditClient();

            $content = $didit->walletScreening->screenPdf([
                'provider' => 'your-provider',
                'screening_type' => 'WALLET_SCREENING',
                'risk_score' => 1,
                'severity' => 'UNKNOWN',
                'status' => 'SCREENED',
                'summary' => 'your-summary',
                'wallet_address' => 'your-wallet-address',
                'blockchain' => 'your-blockchain',
                'source_of_funds' => [[]],
                'destination_of_funds' => [[]],
                'counterparty_connections' => [[]],
                'sanctions_hit' => true,
                'dominant_risk_category' => 'your-dominant-risk-category',
                'report_signature' => 'your-report-signature',
            ]);
            $content->saveTo('download.pdf');
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            content = didit.wallet_screening.screen_pdf(
              provider: "your-provider",
              screening_type: "WALLET_SCREENING",
              risk_score: 1,
              severity: "UNKNOWN",
              status: "SCREENED",
              summary: "your-summary",
              wallet_address: "your-wallet-address",
              blockchain: "your-blockchain",
              source_of_funds: [{}],
              destination_of_funds: [{}],
              counterparty_connections: [{}],
              sanctions_hit: true,
              dominant_risk_category: "your-dominant-risk-category",
              report_signature: "your-report-signature"
            )
            File.binwrite("download.pdf", content)
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            var content = await client.WalletScreening.ScreenPdfAsync(new
            WalletScreeningResult

            {
                Provider = "your-provider",
                ScreeningType = "WALLET_SCREENING",
                RiskScore = 1,
                Severity = "UNKNOWN",
                Status = "SCREENED",
                Summary = "your-summary",
                WalletAddress = "your-wallet-address",
                Blockchain = "your-blockchain",
                SourceOfFunds = new WalletScreeningResultSourceOfFunds[] { new() },
                DestinationOfFunds = new WalletScreeningResultDestinationOfFunds[] { new() },
                CounterpartyConnections = new WalletScreeningResultCounterpartyConnections[] { new() },
                SanctionsHit = true,
                DominantRiskCategory = "your-dominant-risk-category",
                ReportSignature = "your-report-signature",
            });

            await content.SaveToAsync("download.pdf");
components:
  schemas:
    WalletScreeningResult:
      type: object
      properties:
        provider:
          type: string
          description: المزود الذي أجرى الفحص (مثل `merklescience`، `crystal`).
        screening_type:
          type: string
          enum:
            - WALLET_SCREENING
          description: دائماً `WALLET_SCREENING` لهذا الـ endpoint.
        risk_score:
          type: integer
          description: >-
            درجة مخاطر معيارية من 0 إلى 100. تعني القيمة الأعلى تعرضاً أكبر
            للجهات عالية المخاطر. تقيّم Merkle Science العنوان من 0 إلى 5، وهو
            ما يقابل 0 أو 15 أو 35 أو 55 أو 75 أو 95.
        severity:
          type: string
          enum:
            - UNKNOWN
            - LOW
            - MEDIUM
            - HIGH
            - CRITICAL
          description: >-
            فئة المخاطر المشتقة من `risk_score`: النطاق `0-9` هو UNKNOWN،
            و`10-39` هو LOW، و`40-69` هو MEDIUM، و`70-89` هو HIGH، و`90-100` هو
            CRITICAL. النطاق `UNKNOWN` هو أدنى فئة، وليس حالة مستقلة لعدم توفر
            البيانات: تعني قيمة `risk_score` البالغة 0 (الحالة الشائعة لعنوان
            سليم) عدم وجود تقييم سلبي، بينما تُعد الدرجة غير الصفرية في النطاق
            1-9 إشارة حقيقية ولكنها أقل من مستوى LOW - اقرأ `risk_score`، وليس
            الفئة فقط. لا تعامل `UNKNOWN` أبداً على أنها تصنيف مؤكد لمخاطر
            منخفضة أو حالة خالية من المخاطر؛ ولا تعرضها كحالة اجتياز.
        status:
          type: string
          enum:
            - SCREENED
            - PENDING
            - ERROR
          description: حالة نتيجة الفحص.
        summary:
          type: string
          description: ملخص مقروء للبشر لنتيجة الفحص.
        wallet_address:
          type: string
          description: العنوان الذي تم فحصه، مع إعادته كما هو.
        transaction_hash:
          type: string
          nullable: true
          description: >-
            حقل فحص المعاملات، مشترك مع هيكل النتيجة. دائماً ما يكون `null` في
            نتيجة فحص المحافظ.
        blockchain:
          type: string
          description: البلوكتشين التي تم فحصها.
        block_timestamp:
          type: string
          nullable: true
          description: >-
            حقل فحص المعاملات، مشترك مع هيكل النتيجة. دائماً ما يكون `null` في
            نتيجة فحص المحافظ.
        total_value_usd:
          type: number
          nullable: true
          description: >-
            حقل فحص المعاملات، مشترك مع هيكل النتيجة. دائماً ما يكون `null` في
            نتيجة فحص المحافظ.
        fee_usd:
          type: number
          nullable: true
          description: >-
            حقل فحص المعاملات، مشترك مع هيكل النتيجة. دائماً ما يكون `null` في
            نتيجة فحص المحافظ.
        sender_rows:
          type: array
          items:
            type: object
          description: >-
            حقل فحص المعاملات، مشترك مع هيكل النتيجة. دائماً ما يكون فارغاً في
            نتيجة فحص المحافظ.
        receiver_rows:
          type: array
          items:
            type: object
          description: >-
            حقل فحص المعاملات، مشترك مع هيكل النتيجة. دائماً ما يكون فارغاً في
            نتيجة فحص المحافظ.
        transaction_flows:
          type: array
          items:
            type: object
          description: >-
            حقل فحص المعاملات، مشترك مع هيكل النتيجة. دائماً ما يكون فارغاً في
            نتيجة فحص المحافظ.
        transaction_flows_status:
          type: string
          nullable: true
          description: >-
            حقل فحص المعاملات، مشترك مع هيكل النتيجة. دائماً ما يكون `null` في
            نتيجة فحص المحافظ.
        transaction_flows_error:
          type: string
          nullable: true
          description: >-
            حقل فحص المعاملات، مشترك مع هيكل النتيجة. دائماً ما يكون `null` في
            نتيجة فحص المحافظ.
        source_of_funds:
          type: array
          description: >-
            الجهة التي استلم منها العنوان الأموال، منسوبة بحسب الكيان. كل إدخال
            يمثل تفصيلاً للتعرّض.
          items:
            type: object
            properties:
              category:
                type: string
                description: >-
                  فئة مخاطر معيارية، مثل `exchange_licensed` أو `dex` أو `defi`
                  أو `payment_processor` أو `mixer` أو `darknet_market` أو
                  `sanctioned` أو `stolen_funds` أو `high_risk_exchange`.
              percentage:
                type: number
                description: حصة التعرض الإجمالي للاتجاه، 0-100.
              amount_usd:
                type: number
                nullable: true
                description: القيمة بالدولار الأمريكي المنسوبة إلى هذا الكيان.
              entity_name:
                type: string
                nullable: true
                description: >-
                  اسم الكيان المنسوب، على سبيل المثال منصة تداول أو خدمة خلط
                  معاملات (mixer) أو مجموعة خاضعة للعقوبات.
              entity_type:
                type: string
                nullable: true
                description: >-
                  نوع كيان المزود (مثل `Exchange`، `DeFi`، `Sanctions`،
                  `Theft`).
              entity_subtype:
                type: string
                nullable: true
                description: >-
                  نوع فرعي أكثر تفصيلاً (مثل `Mandatory KYC and AML` و `OFAC` و
                  `Yield Aggregator`).
              hops:
                type: integer
                nullable: true
                description: >-
                  عدد القفزات إلى الكيان (1 للطرف المقابل المباشر)، عندما يبلغ
                  المزود عنها. دائماً `null` لـ Merkle Science، التي تبلغ فقط
                  عما إذا كان التعرض مباشراً أو غير مباشر: استخدم
                  `exposure_type`.
              description:
                type: string
                nullable: true
                description: '`entity_type / entity_subtype`، كما يسمّي المزود الكيان.'
              is_direct:
                type: boolean
                description: تكون القيمة True عندما يكون `exposure_type` هو `direct`.
              exposure_direction:
                type: string
                enum:
                  - incoming
                  - outgoing
                  - connected
                description: >-
                  ما إذا كانت الأموال واردة من (`incoming`) هذا الكيان أو صادرة
                  إليه (`outgoing`).
              exposure_type:
                type: string
                enum:
                  - direct
                  - indirect
                description: التعرّض `direct` (وثبة واحدة) أو `indirect` (متعدد الوثبات).
              provider_entity_id:
                type: string
                nullable: true
                description: المعرّف الخاص بالمزود للكيان.
              provider_entity_type_id:
                type: string
                nullable: true
                description: المعرّف الخاص بالمزود لـ `entity_type`.
              provider_entity_subtype_id:
                type: string
                nullable: true
                description: المعرّف الخاص بالمزود لـ `entity_subtype`.
              country:
                type: string
                nullable: true
                description: >-
                  الدولة الأساسية للكيان وفقاً لرمز ISO 3166-1 alpha-2. تكون
                  فارغة أو `null` عندما لا يعرفها المزود.
              raw_amount:
                type: number
                nullable: true
                description: المبلغ بالوحدة الخاصة بالأصل، عندما يبلغ المزود عنه.
              raw_currency:
                type: string
                nullable: true
                description: وحدة `raw_amount`، عندما يبلغ عنها المزود.
        destination_of_funds:
          type: array
          description: >-
            الجهة التي أرسل إليها العنوان الأموال، منسوبة بحسب الكيان. نفس هيكل
            عناصر `source_of_funds` مع `exposure_direction` = `outgoing`.
          items:
            type: object
            properties:
              category:
                type: string
                description: >-
                  فئة مخاطر معيارية، مثل `exchange_licensed` أو `dex` أو `defi`
                  أو `payment_processor` أو `mixer` أو `darknet_market` أو
                  `sanctioned` أو `stolen_funds` أو `high_risk_exchange`.
              percentage:
                type: number
                description: حصة التعرض الإجمالي للاتجاه، 0-100.
              amount_usd:
                type: number
                nullable: true
                description: القيمة بالدولار الأمريكي المنسوبة إلى هذا الكيان.
              entity_name:
                type: string
                nullable: true
                description: >-
                  اسم الكيان المنسوب، على سبيل المثال منصة تداول أو خدمة خلط
                  معاملات (mixer) أو مجموعة خاضعة للعقوبات.
              entity_type:
                type: string
                nullable: true
                description: >-
                  نوع كيان المزود (مثل `Exchange`، `DeFi`، `Sanctions`،
                  `Theft`).
              entity_subtype:
                type: string
                nullable: true
                description: >-
                  نوع فرعي أكثر تفصيلاً (مثل `Mandatory KYC and AML` و `OFAC` و
                  `Yield Aggregator`).
              hops:
                type: integer
                nullable: true
                description: >-
                  عدد القفزات إلى الكيان (1 للطرف المقابل المباشر)، عندما يبلغ
                  المزود عنها. دائماً `null` لـ Merkle Science، التي تبلغ فقط
                  عما إذا كان التعرض مباشراً أو غير مباشر: استخدم
                  `exposure_type`.
              description:
                type: string
                nullable: true
                description: '`entity_type / entity_subtype`، كما يسمّي المزود الكيان.'
              is_direct:
                type: boolean
                description: تكون القيمة True عندما يكون `exposure_type` هو `direct`.
              exposure_direction:
                type: string
                enum:
                  - incoming
                  - outgoing
                  - connected
                description: >-
                  ما إذا كانت الأموال واردة من (`incoming`) هذا الكيان أو صادرة
                  إليه (`outgoing`).
              exposure_type:
                type: string
                enum:
                  - direct
                  - indirect
                description: التعرّض `direct` (وثبة واحدة) أو `indirect` (متعدد الوثبات).
              provider_entity_id:
                type: string
                nullable: true
                description: المعرّف الخاص بالمزود للكيان.
              provider_entity_type_id:
                type: string
                nullable: true
                description: المعرّف الخاص بالمزود لـ `entity_type`.
              provider_entity_subtype_id:
                type: string
                nullable: true
                description: المعرّف الخاص بالمزود لـ `entity_subtype`.
              country:
                type: string
                nullable: true
                description: >-
                  الدولة الأساسية للكيان وفقاً لرمز ISO 3166-1 alpha-2. تكون
                  فارغة أو `null` عندما لا يعرفها المزود.
              raw_amount:
                type: number
                nullable: true
                description: المبلغ بالوحدة الخاصة بالأصل، عندما يبلغ المزود عنه.
              raw_currency:
                type: string
                nullable: true
                description: وحدة `raw_amount`، عندما يبلغ عنها المزود.
        counterparty_connections:
          type: array
          description: >-
            الكيانات التي ينسب إليها المزود العنوان المفحوص. بالنسبة لـ Merkle
            Science، تأتي هذه من علامات المالك والمستخدم الخاصة بالعنوان نفسه،
            لذا يمكن أن يظهر الكيان نفسه مرتين، ولا تحمل تدفقات أموال: الحقول
            `received_usd` و`sent_usd` و`received_hops` و`sent_hops` تكون `null`
            والنسبة `percentage` تكون 0. لا تعتمد في التوجيه على `risk_level` أو
            `is_direct` هنا: استخدم `sanctions_hit` و`dominant_risk_category`
            و`risk_factors[].is_high_risk` للقرار، واستخدم `exposure_type` في
            `source_of_funds`/`destination_of_funds` لمعرفة مدى المباشرة.
          items:
            type: object
            properties:
              entity_name:
                type: string
                nullable: true
                description: اسم الكيان المنسوب.
              entity_type:
                type: string
                nullable: true
                description: نوع كيان المزود.
              entity_subtype:
                type: string
                nullable: true
                description: النوع الفرعي لكيان المزود.
              risk_level:
                type: string
                description: >-
                  بأحرف صغيرة وتعتمد على المزود. بالنسبة لـ Merkle Science، فهي
                  درجة المخاطر الخاصة بالعنوان نفسه من 0 إلى 5 (`no_risk`،
                  `low`، `medium_low`، `medium`، `high`، `critical`)، والتي يتم
                  رفعها إلى `high` عندما تكون فئة الكيان عالية المخاطر؛ وليست
                  درجة منفصلة للكيان.
              categories:
                type: array
                items:
                  type: string
                description: فئات المخاطر المعيارية للكيان.
              received_usd:
                type: number
                nullable: true
                description: >-
                  المبلغ بالدولار الأمريكي المستلم من الكيان، عندما يبلغ المزود
                  عنه.
              sent_usd:
                type: number
                nullable: true
                description: >-
                  المبلغ بالدولار الأمريكي المرسل إلى الكيان، عندما يبلغ المزود
                  عنه.
              received_hops:
                type: integer
                nullable: true
                description: القفزات إلى الكيان في جانب الاستلام، عندما يبلغ عنها المزود.
              sent_hops:
                type: integer
                nullable: true
                description: القفزات إلى الكيان في جانب الإرسال، عندما يبلغ عنها المزود.
              percentage:
                type: number
                description: حصة تعرض العنوان، عندما يُبلغ عنها المزود؛ وإلا تكون 0.
              is_direct:
                type: boolean
                description: >-
                  دائماً `true` لـ Merkle Science، التي تُعد روابطها إسنادات
                  وليست أطرافاً مقابلة.
              country:
                type: string
                nullable: true
                description: دولة الكيان، عندما تكون معروفة.
              provider_entity_id:
                type: string
                nullable: true
                description: المعرّف الخاص بالمزود للكيان.
        network_nodes:
          type: array
          items:
            type: object
          description: عقد مخطط التعرض لفحص المعاملات. تكون فارغة في نتيجة فحص المحافظ.
        network_edges:
          type: array
          items:
            type: object
          description: حواف مخطط التعرض لفحص المعاملات. تكون فارغة في نتيجة فحص المحافظ.
        sanctions_hit:
          type: boolean
          description: >-
            تكون القيمة True إذا كان العنوان مرتبطاً بتعرّض مباشر أو غير مباشر
            للعقوبات.
        pep_counterparty:
          type: boolean
          description: >-
            التعرض لشخص معرض سياسياً. تكون `null` عندما لا تتوفر أي نتيجة متعلقة
            بـ PEP، وهي كل النتائج اليوم لعدم وجود أي مزود يبلغ عن ذلك؛ وتكون
            `false` فقط عند وجود نتيجة فحص سلبية صريحة. لا تعتبر `null` بمثابة
            فحص PEP مكتمل.
          nullable: true
        dominant_risk_category:
          type: string
          nullable: true
          description: >-
            فئة المخاطر العالية ذات الوزن الأعلى، أو `null` عند عدم وجود فئة
            مهيمنة (مثل `sanctioned` أو `mixer` أو `stolen_funds`).
        risk_factors:
          type: array
          description: >-
            تفسير مرتب لـ `risk_score`: ما أدى إلى هذا القرار. يقيّم المزودون
            العنوان بناءً على نموذجهم الخاص ويُرجعون قراراً فقط (تُرجع Merkle
            Science عدداً صحيحاً من 0 إلى 5)، وبالتالي فإن الدرجة وحدها لا تكفي
            لاتخاذ إجراء. مرتبة حسب مستوى المخاطر، بدءاً بالمخاطر الأعلى، ثم حسب
            القيمة المنقولة عبر كل محرك، بحد أقصى أقوى خمسة محركات؛ يحتوي كل من
            `source_of_funds` و`destination_of_funds` دائماً على التفصيل الكامل.
            يعني وجود `risk_score` مرتفع دون إدخال `is_high_risk` أن المزود لم
            يُبلغ عن أي عقوبات أو تطابق مع كيان منسوب، وقام بتقييم العنوان
            بالكامل بناءً على نموذج التعرض الخاص به - يوضح `summary` ذلك صراحةً.
          items:
            type: object
            properties:
              source:
                type: string
                enum:
                  - attribution
                  - exposure
                description: >-
                  `attribution` هو ما يحدده المزود بشأن ماهية العنوان نفسه (وسمه
                  أو تجمعه الخاص)؛ بينما `exposure` هو المكان الذي تحركت إليه
                  أمواله بالفعل.
              category:
                type: string
                description: فئة مخاطر معيارية، بنفس المفردات المستخدمة في تفصيل التعرض.
              label:
                type: string
                description: >-
                  الصياغة الخاصة بالمزود للعامل (مثل `Gambling / Crypto only`)،
                  وهي ما ستراه أيضاً في لوحة تحكم المزود.
              entity_name:
                type: string
                nullable: true
                description: >-
                  الكيان المنسوب الذي يقف وراء العامل الدافع، على سبيل المثال
                  موقع مقامرة أو منصة تداول.
              direction:
                type: string
                enum:
                  - incoming
                  - outgoing
                  - connected
                  - unknown
                  - attribution
                description: >-
                  اتجاه تدفق الأموال، ويكون `attribution` عندما يكون المحرك هو
                  الوسم الخاص بالعنوان نفسه، أو `unknown` عندما لا يبلغ المزود
                  عن اتجاه.
              exposure_type:
                type: string
                enum:
                  - direct
                  - indirect
                  - unknown
                  - attribution
                description: >-
                  `direct` (وثبة واحدة) أو `indirect` (متعدد الوثبات)، أو
                  `attribution` للعلامة الخاصة بالعنوان نفسه، أو `unknown` عندما
                  لا يحدد المزود عدد الوثبات التي يبعدها الطرف المقابل. تعامل مع
                  `unknown` على أنها غير مصنفة وليست `direct`.
              amount_usd:
                type: number
                format: float
                nullable: true
                description: القيمة بالدولار الأمريكي المنسوبة إلى هذا العامل.
              percentage:
                type: number
                format: float
                description: >-
                  حصة الحجم الإجمالي المفحوص للعنوان، لكلا الاتجاهين معاً - على
                  عكس `percentage` داخل
                  `source_of_funds`/`destination_of_funds`، والتي يتم توحيد
                  معيارها لكل اتجاه. قابلة للمقارنة والجمع عبر القائمة بأكملها.
              is_high_risk:
                type: boolean
                description: >-
                  ما إذا كانت الفئة ضمن الفئات التي تعاملها Didit على أنها عالية
                  المخاطر (`sanctioned`، `mixer`، `stolen_funds`، `ransomware`،
                  `scam`، `darknet_market`، `terrorist_financing`،
                  `child_exploitation`، `hacked_exchange`، `high_risk_exchange`،
                  `seized_funds`).
              description:
                type: string
                description: >-
                  عرض في سطر واحد للعامل المؤثر، على سبيل المثال `9.01% indirect
                  outgoing exposure to Gambling / Crypto only (Example
                  Gambling)`.
        raw_response:
          type: object
          additionalProperties: true
          description: >-
            الـ payload الخاص بالمزود نفسه. بنيته خاصة بالمزود ويمكن أن تتغير
            دون إشعار مسبق: اقرأ الحقول الموحدة بدلاً من تحليله برمجياً.
        report_signature:
          type: string
          description: >-
            توقيع HMAC-SHA256 مبهم لهذه النتيجة بالذات، ونطاقه محدد لتطبيقك. ليس
            له معنى بمفرده — أعد إرسال جسم الاستجابة بالكامل، دون تعديل وبما
            يشمل هذا الحقل، إلى `POST /v3/wallet-screening/pdf/` لعرضه كملف PDF.
            يرفض الـ endpoint الخاص بـ PDF الطلب برمز `400` إذا كان
            `report_signature` مفقوداً أو إذا تم تعديل أي حقل موقّع (مثل
            `risk_score`، `severity`، `sanctions_hit`) قبل إعادة الإرسال.
      required:
        - provider
        - screening_type
        - risk_score
        - severity
        - status
        - summary
        - wallet_address
        - blockchain
        - sanctions_hit
        - dominant_risk_category
        - source_of_funds
        - destination_of_funds
        - counterparty_connections
        - report_signature
  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.