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

# استرداد تسليم webhook عبر API

> يتيح Didit قراءة محاولة تسليم webhook واحدة، مع رؤوس التوقيع الدقيقة وpayload بصيغة JSON الذي أرسله، ورمز الحالة الذي أعادته نقطة النهاية لديك.



موجّه واجهة API للحصول على تسليم وجهة webhook
        نسخ الموجّه إلى الحافظة



      
      

\<pre>

\`Read one delivery attempt made to a Didit webhook destination through the Management API.

Endpoint:
GET https://verification.didit.me/v3/webhook/destinations/{destination_uuid}/deliveries/{delivery_uuid}/

Authentication:
Use the x-api-key header with my Didit API key. A scoped API key needs webhooks: read and decisions: read. A key limited to some workflows or to approved sessions cannot use this endpoint.

Goal:
\- See exactly what Didit sent to my endpoint, to debug signature verification or payload handling.

Path parameters:
\- destination_uuid: the destination uuid from GET /v3/webhook/destinations/.
\- delivery_uuid: the uuid of an entry from GET /v3/webhook/destinations/{destination_uuid}/deliveries/.

Behavior:
\- Returns the delivery fields of the list (uuid, session_id, request_url, response_status, response_time_ms, status, webhook_type, created_at) plus request_header and request_body.
\- request_header and request_body are JSON text (strings). Parse them: request_header holds Content-Type, X-Signature, X-Signature-V2, X-Signature-Simple, X-Timestamp and User-Agent; request_body holds the event payload, including event_id.
\- A scoped key without media: read receives media URLs inside request_body as null; without sessions: write it receives session tokens and hosted verification links as null. A body changed that way is re-encoded and no longer matches the signatures.

Example call:
curl -X GET "https://verification.didit.me/v3/webhook/destinations/{destination_uuid}/deliveries/{delivery_uuid}/" \
-H "x-api-key: YOUR_API_KEY"

Failure modes:
\- 401: { "detail": "This API key has expired." }
\- 403: { "detail": "You do not have permission to perform this action." }, { "detail": "This API key has no read access to webhooks." }, { "detail": "This API key has no read access to decisions." }, or the limited-key message.
\- 404: { "detail": "Webhook destination not found." } or { "detail": "Webhook delivery not found." } (the delivery does not belong to this destination).
\- 429: more than 600 GET requests per minute with this key; wait for Retry-After.

Side effects: none. This is a pure read.

For the full integration shape, see /integration/integration-prompt.`

\</pre>



      
      

الصق في

لاختبار كود التحقق من التوقيع لديك مقابل تسليم فعلي، أعد حساب `X-Signature-V2` من `request_body` باستخدام `secret_shared_key` الخاص بالوجهة، كما هو موضح في [التحقق من التوقيع](https://docs.didit.me/ar/integration/webhooks.md#التحقق-من-التوقيع). استخدم مفتاحًا بصلاحيات كاملة لهذا الغرض، فالنص الذي تكون قيمه محجوبة لن يطابق توقيعاته.لإعادة إرسال التسليم، استدعِ [إعادة إرسال تسليم وجهة webhook](https://docs.didit.me/ar/management-api/webhook/resend-delivery.md).


## OpenAPI

````yaml ar/openapi-25.json GET /v3/webhook/destinations/{destination_uuid}/deliveries/{delivery_uuid}/
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/webhook/destinations/{destination_uuid}/deliveries/{delivery_uuid}/:
    get:
      tags:
        - Webhook
      summary: الحصول على تسليم وجهة webhook
      description: >-
        استرداد محاولة تسليم واحدة إلى وجهة webhook مع رؤوس الطلب الدقيقة ونص
        JSON اللذين أرسلتهما Didit، وحالة HTTP التي أرجعها endpoint الخاص بك
        ووقت الاستجابة. الحقلان `request_header` و`request_body` هما نص JSON: قم
        بتحليلهما لقراءة رؤوس التوقيع والـ payload، على سبيل المثال للتحقق من
        [التحقق من
        التوقيع](https://docs.didit.me/ar/integration/webhooks#التحقق-من-التوقيع)
        مقارنة بـ `secret_shared_key` الخاص بالوجهة. لا يحتوي التسليم مطلقاً على
        سر التوقيع، ولا تسجل Didit نص استجابة endpoint الخاص بك. يحتاج مفتاح API
        المخصص إلى `webhooks: read` و`decisions: read`؛ ولا يمكن لمفتاح مقتصر
        على بعض مهام سير العمل أو على الجلسات المقبولة استخدام هذا الـ endpoint.
      operationId: get_webhook_destination_delivery
      parameters:
        - name: destination_uuid
          in: path
          required: true
          description: معرّف UUID للوجهة التي تم إرسال عملية التسليم إليها.
          schema:
            type: string
            format: uuid
          example: 11111111-2222-3333-4444-555555555555
        - name: delivery_uuid
          in: path
          required: true
          description: >-
            معرّف UUID لعملية التسليم: وهو الـ `uuid` لمدخل تم إرجاعه بواسطة
            `GET /v3/webhook/destinations/{destination_uuid}/deliveries/`.
          schema:
            type: string
            format: uuid
          example: 66666666-7777-8888-9999-000000000001
      responses:
        '200':
          description: التسليم، مع رؤوس الطلب ونصه.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookDestinationDeliveryDetail'
              examples:
                Connection failure:
                  value:
                    uuid: 66666666-7777-8888-9999-000000000001
                    session_id: 22222222-3333-4444-5555-666666666666
                    request_url: https://yourapp.com/webhooks/didit
                    response_status: 503
                    response_time_ms: 412
                    status: In Progress
                    webhook_type: status.updated
                    created_at: '2026-10-15T09:21:18.412345Z'
                    request_header: >-
                      {"Content-Type": "application/json", "X-Signature":
                      "a5e02a03404e1337a0198e6be15d34abbd053c658a0e51e5d0e78554213ef29b",
                      "X-Signature-V2":
                      "927e7cb770c94ce745939bff73f04aa200015f3bc64795ba46c2aaf78a6cedc5",
                      "X-Signature-Simple":
                      "e37b0d4c716c72bb5ae7127b9cc455d28ab4686e9e22312b4ec2327409a73302",
                      "X-Timestamp": "1792056078", "User-Agent":
                      "DiditWebhook/2.0 +https://didit.me"}
                    request_body: >-
                      {"application_id":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee","created_at":1792056057,"environment":"live","event_id":"33333333-4444-5555-6666-777777777777","sandbox_scenario":null,"session_id":"22222222-3333-4444-5555-666666666666","status":"In
                      Progress","timestamp":1792056078,"vendor_data":"user-123","webhook_type":"status.updated","workflow_id":"44444444-5555-6666-7777-888888888888","workflow_version":3}
        '401':
          description: >-
            انتهت صلاحية مفتاح API: تم إنشاؤه مع تاريخ انتهاء قد مضى. يتلقى
            المفتاح الخاطئ أو الملغى أيضاً `401`؛ ويتلقى المفتاح المفقود `403`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: رسالة خطأ سهلة القراءة.
              examples:
                Expired key:
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            الطلب غير مسموح به. عند فقدان `x-api-key` أو عدم صلاحيته أو إلغائه،
            تتلقى `You do not have permission to perform this action.`. يحصل
            المفتاح ذو النطاق المحدود الذي يفتقر إلى الوصول الذي يتطلبه هذا
            endpoint على رسالة تذكر نوع الوصول المفقود، والمفتاح المستخدم من
            خارج قائمة العناوين المسموح بها الخاصة به يتلقى `This API key can't
            be used from this IP address.`. المفتاح المقتصر على بعض مسارات سير
            العمل أو على الجلسات المقبولة يتلقى `This API key only reaches
            sessions inside its workflow or status limits, so it can't use this
            endpoint.`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: رسالة خطأ سهلة القراءة.
              examples:
                Missing or invalid key:
                  value:
                    detail: You do not have permission to perform this action.
                Scoped key without webhooks read:
                  value:
                    detail: This API key has no read access to webhooks.
                Scoped key without decisions read:
                  value:
                    detail: This API key has no read access to decisions.
                Key limited to workflows or approved sessions:
                  value:
                    detail: >-
                      This API key only reaches sessions inside its workflow or
                      status limits, so it can't use this endpoint.
                Outside the IP allowlist:
                  value:
                    detail: This API key can't be used from this IP address.
        '404':
          description: >-
            الوجهة غير موجودة للتطبيق أو تم حذفها، أو التسليم غير موجود أو يتبع
            لوجهة أخرى أو لم يعد متاحًا.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: رسالة خطأ سهلة القراءة.
              examples:
                Destination not found:
                  value:
                    detail: Webhook destination not found.
                Delivery not found:
                  value:
                    detail: Webhook delivery not found.
        '429':
          description: >-
            تم تجاوز حد المعدل: أكثر من 600 طلب GET في نافذة الدقيقة الواحدة
            الحالية لمفتاح API هذا. انتظر لعدد الثواني المحدد في `Retry-After`
            قبل إعادة المحاولة.
          headers:
            Retry-After:
              description: عدد الثواني الواجب انتظارها قبل إعادة المحاولة.
              schema:
                type: integer
                minimum: 1
                example: 30
            X-RateLimit-Limit:
              description: الطلبات المسموح بها خلال نافذة الدقيقة الواحدة (600).
              schema:
                type: integer
                example: 600
            X-RateLimit-Remaining:
              description: الطلبات المتبقية في النافذة الحالية.
              schema:
                type: integer
                example: 0
            X-RateLimit-Reset:
              description: توقيت Unix (بالثواني) عند إعادة تعيين النافذة الحالية.
              schema:
                type: integer
                example: 1792056120
            X-RateLimit-Scope:
              description: اسم الميزانية التي تم تجاوزها.
              schema:
                type: string
                example: generic-get
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: رسالة خطأ سهلة القراءة.
              examples:
                Throttled:
                  value:
                    detail: >-
                      GET request rate limit exceeded. You can make up to 600
                      requests per minute.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X GET
            'https://verification.didit.me/v3/webhook/destinations/11111111-2222-3333-4444-555555555555/deliveries/66666666-7777-8888-9999-000000000001/'
            \
              -H 'x-api-key: YOUR_API_KEY'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.webhooks.destinations.retrieve_delivery(
                "11111111-2222-3333-4444-555555555555",
                "66666666-7777-8888-9999-000000000001",
            )
            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.webhooks.destinations.retrieveDelivery(
              "11111111-2222-3333-4444-555555555555",
              "66666666-7777-8888-9999-000000000001",
            );
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Webhooks.Destinations.RetrieveDelivery(ctx, \"11111111-2222-3333-4444-555555555555\", \"66666666-7777-8888-9999-000000000001\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import me.didit.Didit;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.webhooks().destinations().retrieveDelivery("11111111-2222-3333-4444-555555555555",
            "66666666-7777-8888-9999-000000000001");

            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->webhooks->destinations->retrieveDelivery('11111111-2222-3333-4444-555555555555',
            '66666666-7777-8888-9999-000000000001');

            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            result = didit.webhooks.destinations.retrieve_delivery(
              "11111111-2222-3333-4444-555555555555",
              "66666666-7777-8888-9999-000000000001"
            )
            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.Webhooks.Destinations.RetrieveDeliveryAsync("11111111-2222-3333-4444-555555555555",
            "66666666-7777-8888-9999-000000000001");

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    WebhookDestinationDeliveryDetail:
      type: object
      description: >-
        محاولة تسليم واحدة إلى وجهة webhook، مع رؤوس وجسم الطلب الفعليين اللذين
        أرسلتهما Didit تماماً.
      required:
        - uuid
        - session_id
        - request_url
        - response_status
        - response_time_ms
        - status
        - webhook_type
        - created_at
        - request_header
        - request_body
      properties:
        uuid:
          type: string
          format: uuid
          description: معرّف التسليم، لطلبات التفاصيل وإعادة الإرسال.
        session_id:
          type: string
          format: uuid
          nullable: true
          description: >-
            جلسة التحقق من المستخدمين التي يتعلق بها الحدث. `null` لأحداث جلسة
            الشركة، والمستخدم، والشركة، والمعاملة، وTravel Rule، وسير العمل.
        request_url:
          type: string
          format: uri
          nullable: true
          description: >-
            رابط URL الذي أُرسل إليه التسليم: رابط URL الخاص بالوجهة عند إنشاء
            الحدث.
        response_status:
          type: integer
          nullable: true
          description: >-
            حالة HTTP التي أرجعها الـ endpoint الخاص بك. `null` طالما أن التسليم
            في قائمة الانتظار ولم تتم محاولته بعد. عندما لا يتم تلقي أي استجابة
            HTTP، تسجل Didit حالة خاصة بها: `504` عندما لم يُجب الـ endpoint
            الخاص بك في غضون 5 ثوانٍ، و`503` لفشل الاتصال، و`400` عندما تم رفض
            عنوان URL لعدم أمانه (على سبيل المثال عنوان خاص أو داخلي)، و`404`
            لأي خطأ آخر في الطلب. يُعتبر الرمز `400` أو أعلى تسليمًا فاشلاً.
        response_time_ms:
          type: integer
          nullable: true
          minimum: 0
          description: >-
            الوقت الذي استغرقته المحاولة بالمللي ثانية. يكون `null` عندما يكون
            التسليم في قائمة الانتظار.
        status:
          type: string
          nullable: true
          description: >-
            الحالة التي أبلغ عنها الحدث عند إنشائه: حالة الجلسة لأحداث الجلسة
            (على سبيل المثال `Approved` أو `In Review`)، وحالة الشخص أو الشركة
            لأحداث المستخدم والشركة، وحالة المعاملة لأحداث المعاملات. وتكون
            `null` للأحداث التي لا تحمل أي حالة.
        webhook_type:
          $ref: '#/components/schemas/WebhookEvent'
        created_at:
          type: string
          format: date-time
          description: وقت إنشاء التسليم.
        request_header:
          type: string
          description: >-
            نص JSON (سلسلة نصية) لرؤوس الطلب التي أرسلتها Didit: وهي
            `Content-Type` و`X-Signature` و`X-Signature-V2`
            و`X-Signature-Simple` و`X-Timestamp` و`User-Agent`. قم بتحليله
            باستخدام محلل JSON. يحتوي على التوقيعات، ولا يحتوي أبداً على سر
            التوقيع.
        request_body:
          type: string
          description: >-
            نص JSON (سلسلة نصية) للـ payload الدقيق الذي أرسلته Didit، مع فرز
            المفاتيح، بما في ذلك `event_id` و`timestamp`. قم بتحليله باستخدام
            محلل JSON؛ راجع [شكل الـ
            Payload](https://docs.didit.me/ar/integration/webhooks#بنية-الحمولة).
            بالنسبة لمفتاح محدد النطاق بدون `media: read`، تكون عناوين URL
            للوسائط بداخله `null`؛ وبدون `sessions: write`، تكون رموز الجلسات
            وروابط التحقق المستضافة `null`. محتوى الطلب الذي تم تغييره بهذه
            الطريقة لا يعود مطابقاً لتوقيعاته. لا تسجل Didit محتوى الاستجابة
            الذي أرجعه الـ endpoint الخاص بك.
    WebhookEvent:
      type: string
      description: >-
        اسم حدث webhook المدعوم. استخدم هذه النصوص بدقة في `subscribed_events`؛
        حيث يتم رفض القيم غير المدعومة.
      enum:
        - status.updated
        - data.updated
        - user.status.updated
        - user.data.updated
        - business.status.updated
        - business.data.updated
        - activity.created
        - transaction.created
        - transaction.status.updated
        - travel_rule.status.updated
        - workflow.compliance_changed
        - transaction_rule_suggestions.created
        - auth.signup
        - auth.login
        - auth.login_failed
        - auth.password_reset_requested
        - auth.password_reset_completed
        - auth.mfa_changed
        - auth.new_device
        - auth.account_locked
        - investigator.report.ready
        - investigator.decision.automated
        - investigator.decision.overridden
        - investigator.decision.contested
        - investigator.question.raised
        - investigator.automation.paused
        - investigator.rfi.answered
        - investigator.rfi.overdue
        - investigator.drift.detected
        - investigator.sla.breached
        - investigator.qa.failed
        - investigator.external.report.ready
  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.