> ## 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 أرسلته لجلسة تحقق، مع عنوان URL واستجابة endpoint الخاص بك، والرؤوس والـ payload بالضبط كما أُرسلت.



عرض طلب واجهة برمجة التطبيقات لتسليمات webhook للجلسة
        نسخ الموجّه إلى الحافظة



      
      

\<pre>

\`List every webhook delivery Didit recorded for one verification session through the API.

Endpoint:
GET https://verification.didit.me/v3/session/{session_id}/webhooks/

Authentication:
Send my Didit API key in the x-api-key header. A scoped key needs sessions: read and decisions: read.

Goal:
\- See which webhooks Didit sent for a session, to which URL, and what my endpoint answered. Use it to debug a missing or rejected webhook, or to reconcile my records with Didit's.

Behavior:
\- Works for user (KYC) and business (KYB) session IDs.
\- Returns a JSON array, newest first. It is not paginated. An empty array means no webhook was sent for the session yet.
\- Each entry is one delivery attempt to one destination. The first delivery, each automatic retry and each manual resend are separate entries with their own uuid; retries and resends keep the payload's event_id.
\- request_header and request_body are JSON-encoded strings. Parse them with a JSON parser to read the headers and the payload.
\- A scoped key without media: read receives media URLs inside request_body as null; without sessions: write it receives session links and tokens as null. A redacted body no longer matches the recorded signatures.

Example call:
curl -X GET "https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/webhooks/" \
-H "x-api-key: YOUR_API_KEY"

What to read from the response:
\- uuid: the delivery id. Use it as {webhook_uuid} to get or resend one delivery.
\- webhook_type: status.updated or data.updated for session deliveries.
\- status: the session status when the event was generated.
\- response_status: the HTTP status my endpoint returned. null while the delivery is queued; 504 means a timeout (5 seconds), 503 a connection failure, 400 a URL refused as unsafe.
\- request_url and created_at: where and when it was sent.

Failure modes:
\- 401: the API key has expired.
\- 403: missing key (a wrong, revoked or expired key gets 401) ({ "detail": "Authentication credentials were not provided or are invalid." }), a key of another application, a scoped key without the permissions above, or a request from outside the key's IP allowlist.
\- 404: the session does not exist or was deleted ({ "detail": "Not found." }), or is outside a scoped key's workflow or status limits ({ "detail": "Session not found." }).
\- 429: more than 600 reads per minute for this API key; honor Retry-After.

Side effects: none. This is a pure read.

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

\</pre>



      
      

الصق في

تُسجَّل كل محاولة، بما في ذلك [إعادات المحاولة التلقائية](https://docs.didit.me/ar/integration/webhooks.md#سياسة-إعادة-المحاولة) التي يجريها Didit بعد استجابة `5xx` أو `404`، لذلك يظهر التسليم الفاشل المتبوع بمحاولة ناجحة على شكل إدخالين بالقيمة `event_id` نفسها داخل `request_body`.لفحص تسليم واحد، استخدم [الحصول على تسليم webhook للجلسة](https://docs.didit.me/ar/management-api/sessions/get-webhook.md). لإعادة إرساله بعد إصلاح endpoint، استخدم [إعادة إرسال تسليم webhook للجلسة](https://docs.didit.me/ar/management-api/sessions/resend-webhook.md).


## OpenAPI

````yaml ar/openapi-25.json GET /v3/session/{sessionId}/webhooks/
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/session/{sessionId}/webhooks/:
    get:
      tags:
        - Sessions
      summary: عرض عمليات تسليم webhook للجلسة
      description: >-
        سرد كل عمليات تسليم webhook التي سجلها Didit لجلسة تحقق واحدة، سواء
        للمستخدمين (KYC) أو الشركات (KYB)، الأحدث أولاً، كمصفوفة JSON عادية (غير
        مقسّمة إلى صفحات). يمثل كل إدخال محاولة واحدة لوجهة معينة: الإرسال
        الأول، وكل [إعادة
        محاولة](https://docs.didit.me/ar/integration/webhooks#سياسة-إعادة-المحاولة)
        تلقائية، وكل إعادة إرسال هي إدخالات منفصلة لها معرّف `uuid` خاص بها،
        وتحتفظ إعادات المحاولة وإعادات الإرسال بقيمة `event_id` الخاصة بـ
        payload. حقلا `request_header` و`request_body` هما نصوص بتنسيق JSON؛
        يمكنك تحليلهما لقراءة التوقيعات وpayload. تتوفر سجلات التسليم لمدة 30
        يوماً تقريباً، لذا فإن المصفوفة الفارغة تعني أنه لم يتم إرسال أي webhook
        للجلسة بعد أو أن جميع عمليات التسليم أقدم من تلك المدة. يتطلب مفتاح API
        محدد النطاق إذنَي `sessions: read` و`decisions: read`.
      operationId: get_v3_session_webhooks
      parameters:
        - name: sessionId
          in: path
          required: true
          description: >-
            معرّف UUID لجلسة التحقق، للمستخدمين (KYC) أو للشركات (KYB):
            `session_id` الذي تم إرجاعه بواسطة `POST /v3/session/`. يطابق الخادم
            المعرّف عبر كلا نوعي الجلسات.


            **يجب أن يكون UUID صالحًا.** يطابق المسار قيم UUID صالحة البنية فقط،
            لذا يتم رفض أي قيمة غير صالحة البنية بواسطة موجه URL قبل تشغيل أي
            كود برمجي للتطبيق وتكون الاستجابة صفحة **HTML** برمز `404` بدلاً من
            تنسيق JSON لـ `{"detail": ...}` الموضح أدناه.
          schema:
            type: string
            format: uuid
          example: 22222222-3333-4444-5555-666666666666
      responses:
        '200':
          description: كل عملية تسليم مسجلة للجلسة، الأحدث أولاً.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SessionWebhookDelivery'
              examples:
                Failed delivery and its successful retry:
                  value:
                    - uuid: 66666666-7777-8888-9999-000000000002
                      session_id: 22222222-3333-4444-5555-666666666666
                      request_url: https://yourapp.com/webhooks/didit
                      response_status: 200
                      status: In Progress
                      webhook_type: status.updated
                      request_header: >-
                        {"Content-Type": "application/json", "X-Signature":
                        "9188851d160b5b3aacfc946e4dde1f061b7e568662518942c927ddaf507f533d",
                        "X-Signature-V2":
                        "381236af514d3fb538579365ac5a24f2464ce1b8224c6e770c60d8201c43ecc5",
                        "X-Signature-Simple":
                        "4740131dc38f29e78a8508371979be74967d5307464494bd3148a03b4d6c8716",
                        "X-Timestamp": "1792056139", "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":1792056139,"vendor_data":"user-123","webhook_type":"status.updated","workflow_id":"44444444-5555-6666-7777-888888888888","workflow_version":3}
                      created_at: '2026-10-15T09:22:19.104233Z'
                    - uuid: 66666666-7777-8888-9999-000000000001
                      session_id: 22222222-3333-4444-5555-666666666666
                      request_url: https://yourapp.com/webhooks/didit
                      response_status: 503
                      status: In Progress
                      webhook_type: status.updated
                      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}
                      created_at: '2026-10-15T09:21:18.412345Z'
                No webhook sent yet:
                  value: []
        '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`، أو استخدام مفتاح غير
            صالح أو ملغى، إلى تلقي `Authentication credentials were not provided
            or are invalid.`. يتلقى مفتاح تطبيق آخر `You do not have permission
            to perform this action.`. يحصل المفتاح ذو النطاق المحدود الذي يفتقر
            إلى الوصول الذي يتطلبه هذا الـ endpoint على رسالة تذكر نوع الوصول
            المفقود، والمفتاح المستخدم من خارج قائمة العناوين المسموح بها الخاصة
            به يتلقى `This API key can't be used from this IP address.`. يؤدي
            وجود `sessionId` غير معروف إلى إرجاع `404` قبل التحقق من بيانات
            الاعتماد.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: رسالة خطأ سهلة القراءة.
              examples:
                Missing or invalid key:
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Key of another application:
                  value:
                    detail: You do not have permission to perform this action.
                Scoped key without sessions read:
                  value:
                    detail: This API key has no read access to sessions.
                Scoped key without decisions read:
                  value:
                    detail: This API key has no read access to decisions.
                Outside the IP allowlist:
                  value:
                    detail: This API key can't be used from this IP address.
        '404':
          description: >-
            الجلسة غير موجودة أو تم حذفها (`Not found.`، تُعاد قبل التحقق من
            بيانات الاعتماد)، أو أنها خارج حدود سير العمل أو حدود الحالة الخاصة
            بمفتاح ذي نطاق محدد (`Session not found.`).
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: رسالة خطأ سهلة القراءة.
              examples:
                Unknown session:
                  value:
                    detail: Not found.
                Outside the key's limits:
                  value:
                    detail: Session 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/session/22222222-3333-4444-5555-666666666666/webhooks/'
            \
              -H 'x-api-key: YOUR_API_KEY'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.sessions.webhooks.list(
                "22222222-3333-4444-5555-666666666666",
            )
            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.sessions.webhooks.list("22222222-3333-4444-5555-666666666666");

            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.Webhooks.List(ctx, \"22222222-3333-4444-5555-666666666666\")\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.sessions().webhooks().list("22222222-3333-4444-5555-666666666666");

            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->sessions->webhooks->list('22222222-3333-4444-5555-666666666666');

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


            # Reads DIDIT_API_KEY.

            didit = Didit::Client.new


            didit.sessions.webhooks.list("22222222-3333-4444-5555-666666666666").each
            do |item|
              puts item.to_h
            end
        - 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.Sessions.Webhooks.ListAsync("22222222-3333-4444-5555-666666666666");

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    SessionWebhookDelivery:
      type: object
      description: >-
        محاولة تسليم webhook واحدة مسجلة لجلسة تحقق، مع رؤوس الطلب ومتنه الدقيقة
        التي أرسلتها Didit.
      required:
        - uuid
        - session_id
        - request_url
        - response_status
        - status
        - webhook_type
        - request_header
        - request_body
        - created_at
      properties:
        uuid:
          type: string
          format: uuid
          description: >-
            معرّف التسليم. استخدمه كـ `{webhook_uuid}` للحصول على عملية التسليم
            هذه أو إعادة إرسالها.
        session_id:
          type: string
          format: uuid
          description: الجلسة التي تنتمي إليها عملية التسليم (الجلسة الموجودة في المسار).
        request_url:
          type: string
          format: uri
          nullable: true
          description: رابط URL الذي أُرسل إليه التسليم.
        response_status:
          type: integer
          nullable: true
          description: >-
            حالة HTTP التي أرجعها الـ endpoint الخاص بك. `null` طالما أن التسليم
            في قائمة الانتظار ولم تتم محاولته بعد. عندما لا يتم تلقي أي استجابة
            HTTP، تسجل Didit حالة خاصة بها: `504` عندما لم يُجب الـ endpoint
            الخاص بك في غضون 5 ثوانٍ، و`503` لفشل الاتصال، و`400` عندما تم رفض
            عنوان URL لعدم أمانه (على سبيل المثال عنوان خاص أو داخلي)، و`404`
            لأي خطأ آخر في الطلب. يُعتبر الرمز `400` أو أعلى تسليمًا فاشلاً.
        status:
          type: string
          nullable: true
          description: >-
            حالة الجلسة عند إنشاء الحدث، على سبيل المثال `In Progress` أو
            `Approved` أو `Declined`.
        webhook_type:
          $ref: '#/components/schemas/WebhookEvent'
        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 الخاص بك.
        created_at:
          type: string
          format: date-time
          description: وقت إنشاء التسليم.
    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.