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

# Daftar Pengiriman Webhook Sesi API

> Lihat semua webhook yang dikirim Didit untuk sesi verifikasi, beserta URL, respons endpoint Anda, serta header dan payload persisnya.



Prompt API Daftar Pengiriman Webhook Sesi
        Salin prompt ke papan klip



      
      

\<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>



      
      

Tempel ke

Setiap percobaan dicatat, termasuk [coba lagi otomatis](https://docs.didit.me/id/integration/webhooks.md#kebijakan-coba-lagi) yang dilakukan Didit setelah respons `5xx` atau `404`. Dengan demikian, pengiriman yang gagal lalu berhasil setelah dicoba ulang akan muncul sebagai dua entri dengan `event_id` yang sama di dalam `request_body`.Untuk memeriksa satu pengiriman, gunakan [Ambil pengiriman webhook sesi](https://docs.didit.me/id/management-api/sessions/get-webhook.md). Untuk mengirim ulang setelah Anda memperbaiki endpoint, gunakan [Kirim ulang pengiriman webhook sesi](https://docs.didit.me/id/management-api/sessions/resend-webhook.md).


## OpenAPI

````yaml id/openapi-25.json GET /v3/session/{sessionId}/webhooks/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API Verifikasi Identitas. Lakukan autentikasi dengan header x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/session/{sessionId}/webhooks/:
    get:
      tags:
        - Sessions
      summary: Mencantumkan daftar pengiriman webhook sesi
      description: >-
        Daftar setiap pengiriman webhook yang dicatat Didit untuk satu sesi
        verifikasi, pengguna (KYC) atau bisnis (KYB), terbaru lebih dahulu,
        sebagai array JSON biasa (tanpa paginasi). Setiap entri mewakili satu
        upaya ke satu tujuan: pengiriman pertama, setiap [percobaan
        ulang](https://docs.didit.me/id/integration/webhooks#kebijakan-coba-lagi)
        otomatis, dan setiap pengiriman ulang merupakan entri terpisah dengan
        `uuid` masing-masing, serta percobaan ulang dan pengiriman ulang tetap
        mempertahankan `event_id` payload. `request_header` dan `request_body`
        adalah teks JSON; uraikan keduanya untuk membaca tanda tangan dan
        payload. Catatan pengiriman tersedia selama sekitar 30 hari, sehingga
        array kosong berarti belum ada webhook yang dikirim untuk sesi tersebut
        atau semua pengiriman lebih lama dari rentang waktu itu. Kunci API
        dengan cakupan khusus memerlukan `sessions: read` dan `decisions: read`.
      operationId: get_v3_session_webhooks
      parameters:
        - name: sessionId
          in: path
          required: true
          description: >-
            UUID sesi verifikasi, pengguna (KYC) atau bisnis (KYB): `session_id`
            yang dikembalikan oleh `POST /v3/session/`. Server mencari ID
            tersebut di kedua jenis sesi.


            **Harus berupa UUID yang valid.** Rute ini hanya cocok dengan UUID
            yang terbentuk dengan benar, sehingga nilai yang salah format akan
            ditolak oleh router URL sebelum kode aplikasi apa pun berjalan dan
            responsnya berupa halaman **HTML** `404`, bukan envelope JSON
            `{"detail": ...}` yang ditunjukkan di bawah.
          schema:
            type: string
            format: uuid
          example: 22222222-3333-4444-5555-666666666666
      responses:
        '200':
          description: >-
            Setiap pengiriman yang tercatat untuk sesi ini, yang terbaru
            terlebih dahulu.
          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: >-
            Kunci API telah kedaluwarsa: kunci ini dibuat dengan tanggal
            kedaluwarsa yang telah lewat. Kunci yang salah atau dicabut juga
            menghasilkan `401`; kunci yang tidak ada menghasilkan `403`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Pesan kesalahan yang mudah dibaca manusia.
              examples:
                Expired key:
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            Permintaan tidak diizinkan. Tidak adanya `x-api-key`, atau kunci
            yang tidak valid atau dicabut, akan menghasilkan `Authentication
            credentials were not provided or are invalid.` Kunci dari aplikasi
            lain akan menghasilkan `You do not have permission to perform this
            action.` Kunci dengan cakupan terbatas tanpa akses yang dibutuhkan
            endpoint ini akan menghasilkan pesan yang menyebutkan akses yang
            hilang, dan kunci yang digunakan dari luar daftar izin IP-nya akan
            menghasilkan `This API key can't be used from this IP address.`
            `sessionId` yang tidak dikenal akan mengembalikan `404` sebelum
            kredensial diperiksa.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Pesan kesalahan yang mudah dibaca manusia.
              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: >-
            Sesi tidak ada atau telah dihapus (`Not found.`, dikembalikan
            sebelum kredensial diperiksa), atau berada di luar batas alur kerja
            atau status dari kunci dengan cakupan terbatas (`Session not
            found.`).
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Pesan kesalahan yang mudah dibaca manusia.
              examples:
                Unknown session:
                  value:
                    detail: Not found.
                Outside the key's limits:
                  value:
                    detail: Session not found.
        '429':
          description: >-
            Batas laju terlampaui: lebih dari 600 permintaan GET dalam jendela
            satu menit saat ini untuk kunci API ini. Tunggu `Retry-After` detik
            sebelum mencoba lagi.
          headers:
            Retry-After:
              description: Detik untuk menunggu sebelum mencoba lagi.
              schema:
                type: integer
                minimum: 1
                example: 30
            X-RateLimit-Limit:
              description: Permintaan yang diizinkan dalam jendela satu menit (600).
              schema:
                type: integer
                example: 600
            X-RateLimit-Remaining:
              description: Permintaan tersisa dalam jendela saat ini.
              schema:
                type: integer
                example: 0
            X-RateLimit-Reset:
              description: Waktu Unix (detik) saat jendela saat ini direset.
              schema:
                type: integer
                example: 1792056120
            X-RateLimit-Scope:
              description: Nama anggaran yang terlampaui.
              schema:
                type: string
                example: generic-get
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Pesan kesalahan yang mudah dibaca manusia.
              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: >-
        Satu upaya pengiriman webhook yang dicatat untuk suatu sesi verifikasi,
        dengan header dan body permintaan yang persis dikirimkan oleh 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: >-
            ID pengiriman. Gunakan sebagai `{webhook_uuid}` untuk mengambil atau
            mengirim ulang pengiriman ini.
        session_id:
          type: string
          format: uuid
          description: Sesi tempat pengiriman tersebut berada (sesi dalam jalur).
        request_url:
          type: string
          format: uri
          nullable: true
          description: URL tujuan pengiriman.
        response_status:
          type: integer
          nullable: true
          description: >-
            Status HTTP yang dikembalikan endpoint Anda. `null` saat pengiriman
            berada dalam antrean dan belum dicoba. Ketika tidak ada jawaban HTTP
            yang diterima, Didit mencatat statusnya sendiri: `504` ketika
            endpoint Anda tidak menjawab dalam 5 detik, `503` untuk kegagalan
            koneksi, `400` ketika URL ditolak karena tidak aman (misalnya alamat
            privat atau internal), dan `404` untuk kesalahan permintaan lainnya.
            `400` ke atas dihitung sebagai pengiriman gagal.
        status:
          type: string
          nullable: true
          description: >-
            Status sesi saat event dibuat, misalnya `In Progress`, `Approved`,
            atau `Declined`.
        webhook_type:
          $ref: '#/components/schemas/WebhookEvent'
        request_header:
          type: string
          description: >-
            Teks JSON (string) dari header permintaan yang dikirim Didit:
            `Content-Type`, `X-Signature`, `X-Signature-V2`,
            `X-Signature-Simple`, `X-Timestamp`, dan `User-Agent`. Parse teks
            ini dengan parser JSON. Teks ini memuat tanda tangan, tidak pernah
            rahasia penandatanganan.
        request_body:
          type: string
          description: >-
            Teks JSON (string) dari payload persis yang dikirim Didit, kunci
            diurutkan, termasuk `event_id` dan `timestamp`. Parse teks ini
            dengan parser JSON; lihat [Bentuk
            payload](https://docs.didit.me/id/integration/webhooks#struktur-payload).
            Untuk kunci dengan cakupan tanpa `media: read`, URL media di
            dalamnya bernilai `null`; tanpa `sessions: write`, token sesi dan
            tautan verifikasi yang di-hosting bernilai `null`. Body yang diubah
            dengan cara tersebut tidak lagi cocok dengan tanda tangannya. Didit
            tidak merekam body respons yang dikembalikan endpoint Anda.
        created_at:
          type: string
          format: date-time
          description: Waktu ketika pengiriman dibuat.
    WebhookEvent:
      type: string
      description: >-
        Nama event webhook yang didukung. Gunakan string persis ini di
        `subscribed_events`; nilai yang tidak didukung akan ditolak.
      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: >-
        Kunci API aplikasi Anda, dari Developers -> API keys di Business
        Console. Kunci utama memiliki akses penuh. Kunci bernama dapat diberi
        cakupan: none, read, atau write per sumber daya, dibatasi pada beberapa
        alur kerja atau pada sesi yang disetujui, pada daftar alamat IP, dan
        pada tanggal kedaluwarsa. 401 berarti kuncinya salah, dicabut, atau
        kedaluwarsa; 403 berarti tidak ada kunci yang dikirimkan, kunci tidak
        memiliki akses ke sumber daya atau tindakan ini, atau permintaan datang
        dari alamat di luar daftar IP-nya; 404 pada rute sesi berarti sesi
        berada di luar alur kerja atau status kunci tersebut. Kunci tanpa akses
        media menerima URL gambar, video, dan PDF sebagai null, dan kunci tanpa
        izin tulis sesi menerima tautan sesi dan token sebagai null. Lihat
        https://docs.didit.me/console/api-keys.

````

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