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

# Ambil Konfigurasi Webhook API

> Baca pengaturan webhook Didit: URL dan rahasia webhook lama, tujuan, event, kebijakan retensi, dan host pengembalian dompet.



Prompt API untuk Mendapatkan Konfigurasi Webhook
        Salin prompt ke papan klip



      
      

\<pre>

\`Read my Didit application's webhook configuration through the Management API.

Endpoint:
GET https://verification.didit.me/v3/webhook/

Authentication:
Use the x-api-key header with my Didit API key. A scoped API key needs webhooks: read.

Goal:
\- Get every setting that controls how Didit sends webhooks for my application, plus the data-retention policy and the Digital ID wallet return hosts, in one call. Use it to audit the setup or to show the current configuration in a back office.

Behavior:
\- Didit delivers webhooks to webhook destinations (/v3/webhook/destinations/). Each destination has its own url, webhook_version, secret_shared_key and subscribed_events.
\- webhook_url, webhook_version and secret_shared_key at the top level are the application-level (legacy) webhook. Didit uses them only while the application has no enabled destination, and then only for status.updated and data.updated.
\- Every create, update or delete of a destination sets webhook_url to the URL of the oldest enabled destination, or null when none is enabled.
\- API-key callers always receive the application secret and every destination secret in full.

Example call:
curl -X GET "https://verification.didit.me/v3/webhook/" \
-H "x-api-key: YOUR_API_KEY"

What to read from the response:
\- endpoints: every destination, oldest first, with uuid, label, url, enabled, webhook_version, secret_shared_key and subscribed_events. Verify each webhook with the secret of the destination it was sent to.
\- available_events: every event type you can subscribe a destination to ({ value, label }).
\- webhook_url, webhook_version, secret_shared_key: the legacy webhook, only relevant when no destination is enabled.
\- data_retention_months (null means no automatic deletion), face_retention_policy and face_retention_days: the retention policy.
\- allowed_return_hosts: hosts a Digital ID wallet verification may send the person back to.
\- allowed_domains: web origins the hosted verification flow may be embedded in and may send the user back to; empty means no restriction.
\- capture_method: MOBILE or MOBILE_AND_DESKTOP. A legacy setting with no effect; capture options are set per workflow.

Failure modes:
\- 401: { "detail": "This API key has expired." }
\- 403: { "detail": "You do not have permission to perform this action." } for a missing key (a wrong, revoked or expired key gets 401); { "detail": "This API key has no read access to webhooks." } for a scoped key without webhooks: read.
\- 429: more than 600 GET requests per minute with this key; wait for Retry-After.

Side effects: none. This is a pure read, and the response contains signing secrets: never log it.

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

\</pre>



      
      

Tempel ke

Endpoint ini mengembalikan webhook tingkat aplikasi dari sebelum tujuan webhook ada, beserta daftar tujuan webhook. Didit mengirimkan webhook ke [tujuan webhook](https://docs.didit.me/id/management-api/webhook/list-destinations.md) Anda, masing-masing ditandatangani dengan `secret_shared_key`-nya sendiri. `webhook_url`, `webhook_version` dan `secret_shared_key` di tingkat atas hanya digunakan selama tidak ada tujuan yang aktif, dan hanya untuk `status.updated` dan `data.updated`.> [!WARNING]
>
> Respons berisi setiap rahasia penandatanganan aplikasi Anda. Jauhkan respons ini dari log dan kode sisi klien.Untuk mengubah pengaturan ini, gunakan [Perbarui Konfigurasi Webhook](https://docs.didit.me/id/management-api/webhook/update-config.md). Untuk verifikasi tanda tangan dan payload, lihat [panduan webhook](https://docs.didit.me/id/integration/webhooks.md). Untuk kolom retensi, lihat [Retensi data](https://docs.didit.me/id/console/data-retention.md).


## OpenAPI

````yaml id/openapi-25.json GET /v3/webhook/
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/webhook/:
    get:
      tags:
        - Webhook
      summary: Dapatkan konfigurasi webhook
      description: >-
        Mengembalikan pengaturan webhook aplikasi dalam satu panggilan: setiap
        [tujuan
        webhook](https://docs.didit.me/id/management-api/webhook/list-destinations)
        beserta rahasia penandatanganannya, jenis event yang dapat dilanggani
        oleh tujuan tersebut, URL, versi, dan rahasia webhook tingkat aplikasi
        (lama), kebijakan retensi data dan templat biometrik, serta host
        pengembalian dompet Digital ID. Didit mengirimkan webhook ke tujuan,
        masing-masing ditandatangani dengan `secret_shared_key` miliknya
        sendiri; `webhook_url`, `webhook_version`, dan `secret_shared_key`
        tingkat atas hanya digunakan saat tidak ada tujuan yang diaktifkan, dan
        itu pun hanya untuk `status.updated` dan `data.updated`. Respons ini
        memuat rahasia penandatanganan, jadi jauhkan dari log dan kode sisi
        klien. Kunci API dengan cakupan memerlukan `webhooks: read`.
      operationId: get_webhook_config
      parameters: []
      responses:
        '200':
          description: Konfigurasi webhook.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookConfig'
              examples:
                One destination:
                  value:
                    webhook_url: https://yourapp.com/webhooks/didit
                    webhook_version: v3
                    secret_shared_key: dGhpcy1pcy10aGUtYXBwLWxldmVsLXNlY3JldC0wMDA
                    capture_method: MOBILE
                    data_retention_months: 24
                    face_retention_policy: delete_with_session
                    face_retention_days: null
                    biometric_consent_mode: auto
                    available_events:
                      - value: status.updated
                        label: Session status updated
                      - value: data.updated
                        label: Session data updated
                      - value: user.status.updated
                        label: User status updated
                      - value: user.data.updated
                        label: User data updated
                      - value: business.status.updated
                        label: Business status updated
                      - value: business.data.updated
                        label: Business data updated
                      - value: activity.created
                        label: Activity created
                      - value: transaction.created
                        label: Transaction created
                      - value: transaction.status.updated
                        label: Transaction status updated
                      - value: travel_rule.status.updated
                        label: Travel Rule Status Updated
                      - value: workflow.compliance_changed
                        label: Workflow Compliance Changed
                    allowed_return_hosts:
                      - shop.example.com
                    endpoints:
                      - uuid: 11111111-2222-3333-4444-555555555555
                        label: Production session webhooks
                        url: https://yourapp.com/webhooks/didit
                        enabled: true
                        webhook_version: v3
                        secret_shared_key: dGhpcy1pcy1hbi1leGFtcGxlLXNlY3JldC0wMDAwMDA
                        subscribed_events:
                          - status.updated
                          - data.updated
                        created_at: '2026-01-04T08:00:00.000000Z'
                        updated_at: '2026-04-22T14:09:11.523671Z'
        '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. `x-api-key` yang hilang, tidak valid,
            atau dicabut 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.`
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Pesan kesalahan yang mudah dibaca manusia.
              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.
                Outside the IP allowlist:
                  value:
                    detail: This API key can't be used from this IP address.
        '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/webhook/' \
              -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.retrieve_config()
            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.retrieveConfig();
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Webhooks.RetrieveConfig(ctx)\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().retrieveConfig();
            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->retrieveConfig();
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            result = didit.webhooks.retrieve_config
            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.RetrieveConfigAsync();
            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    WebhookConfig:
      type: object
      description: >-
        Konfigurasi webhook tingkat aplikasi, kebijakan retensi, dan host
        pengembalian dompet Digital ID, beserta setiap tujuan webhook.
      required:
        - webhook_url
        - webhook_version
        - secret_shared_key
        - capture_method
        - data_retention_months
        - face_retention_policy
        - face_retention_days
        - available_events
        - allowed_return_hosts
        - endpoints
      properties:
        webhook_url:
          type: string
          format: uri
          nullable: true
          description: >-
            URL webhook tingkat aplikasi (lama). Didit hanya mengirim ke URL
            tersebut selama aplikasi tidak memiliki tujuan yang diaktifkan, dan
            setelah itu hanya `status.updated` dan `data.updated`. Setiap
            pembuatan, pembaruan, atau penghapusan tujuan akan menyetelnya ke
            URL tujuan aktif yang paling dahulu diaktifkan, atau `null` jika
            tidak ada yang diaktifkan.
        webhook_version:
          type: string
          enum:
            - v1
            - v2
            - v3
          description: >-
            Versi payload dari `webhook_url` lama. Setiap tujuan memiliki
            `webhook_version` miliknya sendiri.
        secret_shared_key:
          type: string
          description: >-
            Rahasia penandatanganan tingkat aplikasi (token 43 karakter yang
            aman untuk URL). Ini hanya menandatangani pengiriman ke
            `webhook_url` lama; setiap tujuan menandatangani dengan
            `secret_shared_key` miliknya sendiri. Pemanggil yang menggunakan
            kunci API selalu menerimanya secara lengkap; pengguna Console tanpa
            `read:webhooks` menerima string kosong.
        capture_method:
          type: string
          enum:
            - MOBILE
            - MOBILE_AND_DESKTOP
          description: >-
            Pengaturan aplikasi lama. Alur verifikasi tidak membacanya: opsi
            pengambilan dikonfigurasi per alur kerja.
        data_retention_months:
          type: integer
          nullable: true
          minimum: 1
          maximum: 120
          description: >-
            Jendela penghapusan otomatis. Sesi verifikasi pengguna yang dibuat
            lebih dari sekian bulan lalu (satu bulan dihitung 30 hari) akan
            dihapus secara otomatis, dan penghapusan tersebut bersifat tidak
            dapat dibatalkan. `null` berarti sesi tidak pernah dihapus secara
            otomatis. Lihat [Retensi
            data](https://docs.didit.me/id/console/data-retention).
        face_retention_policy:
          type: string
          enum:
            - delete_with_session
            - retain_until_user_deleted
          description: >-
            Hal yang terjadi pada embedding wajah sesi saat sesi dihapus.
            `delete_with_session` (default) menghapusnya bersama sesi.
            `retain_until_user_deleted` merupakan opsi [retensi templat
            biometrik](https://docs.didit.me/id/console/data-retention#retensi-templat-biometrik)
            yang dipilih secara sukarela: templat biometrik bebas gambar yang
            ditautkan ke Pengguna dikelola secara terpisah hingga periode
            retensinya berakhir, Pengguna dihapus, atau Anda menghapusnya secara
            permanen.
        face_retention_days:
          type: integer
          nullable: true
          minimum: 1
          maximum: 3650
          description: >-
            Periode retensi data, dalam hari, untuk templat biometrik di bawah
            `retain_until_user_deleted`. Wajib diisi jika kebijakan tersebut
            diatur.
        biometric_consent_mode:
          type: string
          enum:
            - auto
            - always
            - never
          description: >-
            Kapan alur yang di-hosting dan SDK native meminta persetujuan
            biometrik eksplisit dari pengguna sebelum pengambilan wajah. `auto`
            (default) hanya meminta jika pemicu berlaku: negara bagian yang
            dinyatakan, IP pengguna, atau penerbit dokumen identitas berada di
            Illinois, Texas, atau Colorado, atau pengguna tampaknya berada di AS
            tanpa negara bagian yang diketahui. `always` meminta kepada setiap
            pengguna yang alur kerjanya mengambil gambar wajah. `never` tidak
            pernah menampilkan langkah tersebut, dan Anda mengumpulkan
            persetujuan sendiri sebelum swafoto. Setiap perubahan dicatat dalam
            log audit. Lihat [Persetujuan
            biometrik](https://docs.didit.me/id/getting-started/biometric-consent).
        available_events:
          type: array
          description: >-
            Setiap tipe event yang dapat dilanggan oleh tujuan, dengan label
            tampilan.
          items:
            type: object
            required:
              - value
              - label
            properties:
              value:
                $ref: '#/components/schemas/WebhookEvent'
              label:
                type: string
                description: Label tampilan, misalnya `Session status updated`.
        allowed_return_hosts:
          type: array
          maxItems: 20
          description: >-
            Nama host (kecocokan persis, hanya HTTPS) tempat verifikasi dompet
            Digital ID mandiri dapat mengarahkan pengguna kembali dengan
            `return_url`-nya. Domain White Label Anda juga selalu diizinkan.
            Lihat [Daftarkan tujuan pengembalian
            Anda](https://docs.didit.me/id/standalone-apis/digital-id-wallets#daftarkan-tujuan-pengembalian-anda).
          items:
            type: string
            maxLength: 253
        endpoints:
          type: array
          description: >-
            Setiap tujuan webhook dari aplikasi, yang terlama terlebih dahulu,
            masing-masing dengan rahasia penandatangannya. Hanya dapat dibaca di
            sini: kelola tujuan dengan endpoint `/v3/webhook/destinations/`.
          items:
            $ref: '#/components/schemas/WebhookConfigDestination'
        allowed_domains:
          type: array
          maxItems: 50
          items:
            type: string
            maxLength: 300
          description: >-
            Asal (misalnya `https://app.example.com`; `http` hanya untuk
            `localhost`) tempat alur verifikasi yang di-hosting dapat disematkan
            dan dapat mengarahkan pengguna kembali dengan callback sesi.
            Panggilan server-ke-server tidak terpengaruh. Daftar kosong berarti
            tidak ada batasan. Didit menyimpan setiap origin dalam huruf kecil
            tanpa port default. Entri yang tidak valid gagal dengan `400` pada
            `allowed_domains`.
          example:
            - https://app.example.com
    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
    WebhookConfigDestination:
      type: object
      description: >-
        Tujuan webhook sebagaimana tercantum dalam konfigurasi webhook, tanpa
        metrik pengiriman. `GET /v3/webhook/destinations/{destination_uuid}/`
        menambahkan ringkasan pengirimannya.
      required:
        - uuid
        - label
        - url
        - enabled
        - webhook_version
        - secret_shared_key
        - subscribed_events
        - created_at
        - updated_at
      properties:
        uuid:
          type: string
          format: uuid
          description: ID tujuan.
        label:
          type: string
          maxLength: 255
          description: Nama yang dapat dibaca manusia.
        url:
          type: string
          format: uri
          maxLength: 2000
          description: Endpoint HTTPS tempat Didit mengirimkan event.
        enabled:
          type: boolean
          description: '`false` menjeda pengiriman ke tujuan ini.'
        webhook_version:
          type: string
          enum:
            - v1
            - v2
            - v3
          description: Versi payload yang dikirim ke tujuan ini.
        secret_shared_key:
          type: string
          description: >-
            Rahasia penandatanganan tujuan ini (token 43 karakter yang aman
            untuk URL). Verifikasi setiap webhook dengan rahasia milik tujuan
            tempat webhook dikirimkan. Pemanggil dengan kunci API selalu
            menerimanya secara lengkap; pengguna Console tanpa `read:webhooks`
            akan menerima string kosong.
        subscribed_events:
          type: array
          uniqueItems: true
          description: >-
            Tipe event yang dikirimkan ke tujuan ini. Kosong jika tujuan dibuat
            tanpa event, yang dalam kasus ini tidak akan menerima apa pun.
          items:
            $ref: '#/components/schemas/WebhookEvent'
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
  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.