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

# API Update Konfigurasi Webhook

> Ubah webhook tingkat aplikasi di Didit, rotasi rahasianya, atur retensi data dan templat biometrik, serta daftarkan host pengembalian dompet Digital ID.



Prompt API untuk Memperbarui Konfigurasi Webhook
        Salin prompt ke papan klip



      
      

\<pre>

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

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

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

Goal:
\- Change application-level settings: the legacy webhook URL and version, the application secret, the data-retention and biometric-template retention policy, the Digital ID wallet return hosts, or the allowed origins of the hosted flow.

Behavior:
\- Partial update: send only the fields to change. The response is the full configuration, the same shape as GET /v3/webhook/.
\- webhook_url and webhook_version change the application-level (legacy) webhook only. Didit uses it only while the application has no enabled destination, and only for status.updated and data.updated. It does not create a destination, and the next create, update or delete of a destination replaces webhook_url. To receive webhooks, create a destination with POST /v3/webhook/destinations/ instead.
\- rotate_secret_key: true replaces the application-level secret_shared_key immediately. Destination secrets are not changed. Each call generates a new secret, so it is not idempotent.
\- data_retention_months (1 to 120, or null for no automatic deletion): user verification sessions older than this many 30-day months are deleted automatically. Business verification sessions are not affected.
\- face_retention_policy (delete_with_session or retain_until_user_deleted) and face_retention_days (1 to 3650). retain_until_user_deleted needs face_retention_days in the same request or already set.
\- allowed_return_hosts replaces the registered list: up to 20 bare hostnames such as app.example.com (no scheme, port, path or wildcard). Send [] to clear it.
\- allowed_domains replaces the list of web origins (for example https://app.example.com; http only for localhost) that the hosted verification flow may be embedded in and may send the user back to with a session callback: up to 50 entries of at most 300 characters. Send [] to remove the restriction. Server-to-server calls are not affected. An invalid entry returns 400 on allowed_domains.
\- Manage destinations with the /v3/webhook/destinations/ endpoints, not here. Never send an endpoints field to this call: it is not part of this contract.

Example call:
curl -X PATCH "https://verification.didit.me/v3/webhook/" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"face_retention_policy": "retain_until_user_deleted", "face_retention_days": 365}'

What to read from the response:
\- The updated fields, and secret_shared_key when you rotated it: store the new value before you discard the response.

Failure modes:
\- 400: field errors, each field mapped to a list of messages, for example { "face_retention_days": ["A finite retention duration is required when face retention is enabled."] }. Nothing is changed.
\- 401: { "detail": "This API key has expired." }
\- 403: { "detail": "You do not have permission to perform this action." } or { "detail": "This API key has no write access to webhooks." }
\- 429: more than 300 write requests per minute with this key; wait for Retry-After.

Side effects:
\- Rotating the secret changes how deliveries to the legacy webhook_url are signed from then on, retries included.
\- A data_retention_months change applies to existing sessions too: every session older than the new window is deleted automatically, and that deletion is irreversible.
\- A face_retention_policy change applies to session deletions from then on; it creates or purges no existing biometric template.

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

\</pre>



      
      

Tempel ke

> [!NOTE]
>
> `rotate_secret_key` hanya merotasi rahasia tingkat aplikasi, yang menandatangani pengiriman ke `webhook_url` lama. Setiap [tujuan webhook](https://docs.didit.me/id/management-api/webhook/list-destinations.md) menandatangani dengan `secret_shared_key`-nya sendiri, dan panggilan ini tidak mengubahnya.Kolom retensi mengikuti kebijakan yang sama dengan yang Anda atur di **Business Console → App Settings → Data retention**. Baca [Retensi data](https://docs.didit.me/id/console/data-retention.md) sebelum mengubahnya, terutama [retensi templat biometrik](https://docs.didit.me/id/console/data-retention.md#retensi-templat-biometrik). `allowed_return_hosts` dijelaskan di [Daftarkan tujuan pengembalian Anda](https://docs.didit.me/id/standalone-apis/digital-id-wallets.md#daftarkan-tujuan-pengembalian-anda).`biometric_consent_mode` (`auto`, `always` atau `never`) menentukan kapan alur verifikasi meminta persetujuan biometrik eksplisit sebelum pengambilan wajah. Lihat [Persetujuan biometrik](https://docs.didit.me/id/getting-started/biometric-consent.md).Untuk membaca nilai saat ini terlebih dahulu, panggil [Dapatkan Konfigurasi Webhook](https://docs.didit.me/id/management-api/webhook/get-config.md).


## OpenAPI

````yaml id/openapi-25.json PATCH /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/:
    patch:
      tags:
        - Webhook
      summary: Perbarui konfigurasi webhook
      description: >-
        Perbarui pengaturan tingkat aplikasi secara parsial: URL, versi, dan
        rahasia webhook lawas, kebijakan retensi data dan templat biometrik,
        serta host pengembalian dompet Digital ID. Kirim hanya kolom yang ingin
        diubah; respons berupa konfigurasi lengkap dengan bentuk yang sama
        seperti `GET /v3/webhook/`. Tujuan tidak dikelola di sini: buat,
        perbarui, dan hapus tujuan melalui endpoint `/v3/webhook/destinations/`,
        dan jangan kirim kolom `endpoints` ke endpoint ini. Perubahan
        `data_retention_months` juga berlaku untuk sesi yang sudah ada, dan sesi
        yang dihapus tidak dapat dipulihkan; baca [Retensi
        data](https://docs.didit.me/id/console/data-retention) terlebih dahulu.
        Kunci API dengan pembatasan cakupan memerlukan `webhooks: write`.
      operationId: update_webhook_config
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              description: >-
                Kirim hanya kolom yang akan diubah. Tujuan tidak dikelola di
                sini.
              properties:
                webhook_url:
                  type: string
                  format: uri
                  nullable: true
                  maxLength: 2000
                  description: >-
                    URL webhook tingkat aplikasi lama. Didit menggunakannya
                    hanya saat aplikasi tidak memiliki tujuan yang aktif, dan
                    kemudian hanya untuk `status.updated` dan `data.updated`.
                    Ini tidak membuat tujuan, dan pembuatan, pembaruan, atau
                    penghapusan tujuan berikutnya akan menggantikannya. Untuk
                    menerima webhook, buat tujuan dengan `POST
                    /v3/webhook/destinations/` sebagai gantinya.
                webhook_version:
                  type: string
                  enum:
                    - v1
                    - v2
                    - v3
                  description: Versi payload dari `webhook_url` lama.
                rotate_secret_key:
                  type: boolean
                  default: false
                  description: >-
                    `true` mengganti `secret_shared_key` tingkat aplikasi dengan
                    nilai acak baru secara langsung; nilai baru disertakan dalam
                    respons. Rahasia tujuan tidak diubah. Setiap panggilan
                    dengan `true` menghasilkan rahasia baru, sehingga tidak
                    bersifat idempoten.
                capture_method:
                  type: string
                  enum:
                    - MOBILE
                    - MOBILE_AND_DESKTOP
                  description: Pengaturan aplikasi lama. Alur verifikasi tidak membacanya.
                data_retention_months:
                  type: integer
                  nullable: true
                  minimum: 1
                  maximum: 120
                  description: >-
                    Jendela penghapusan otomatis dalam bulan (satu bulan
                    dihitung sebagai 30 hari), atau `null` untuk tanpa
                    penghapusan otomatis. Perubahan juga berlaku untuk sesi yang
                    ada: setiap sesi verifikasi pengguna yang lebih lama dari
                    jendela baru akan dihapus secara otomatis, dan penghapusan
                    tersebut tidak dapat dibatalkan.
                face_retention_policy:
                  type: string
                  enum:
                    - delete_with_session
                    - retain_until_user_deleted
                  description: >-
                    Hal yang terjadi pada embedding wajah sesi saat sesi
                    dihapus. `retain_until_user_deleted` memerlukan
                    `face_retention_days` dalam permintaan yang sama atau yang
                    sudah diatur sebelumnya. Perubahan berlaku untuk penghapusan
                    sesi setelahnya; perubahan ini tidak membuat atau menghapus
                    secara permanen templat biometrik yang sudah ada.
                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`.
                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).
                allowed_return_hosts:
                  type: array
                  maxItems: 20
                  description: >-
                    Mengganti seluruh daftar host pengembalian dompet ID
                    Digital. Hanya hostname murni, seperti `shop.example.com`:
                    tanpa skema, port, path, atau wildcard. Nilai diubah menjadi
                    huruf kecil dan duplikat dihapus. Kirim `[]` untuk
                    mengosongkan daftar.
                  items:
                    type: string
                    maxLength: 253
                allowed_domains:
                  type: array
                  maxItems: 50
                  items:
                    type: string
                    maxLength: 300
                  description: >-
                    Mengganti seluruh daftar origin yang diizinkan. Origin
                    (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`.
                    Kirim `[]` untuk menghapus batasan.
                  example:
                    - https://app.example.com
            examples:
              Enable biometric template retention:
                value:
                  face_retention_policy: retain_until_user_deleted
                  face_retention_days: 365
                  biometric_consent_mode: auto
              Rotate the legacy secret:
                value:
                  rotate_secret_key: true
              Set data retention:
                value:
                  data_retention_months: 24
              Register return hosts:
                value:
                  allowed_return_hosts:
                    - shop.example.com
                    - app.example.com
      responses:
        '200':
          description: >-
            Konfigurasi lengkap setelah pembaruan, dengan struktur yang sama
            seperti `GET /v3/webhook/`. Saat Anda merotasi rahasia, simpan
            `secret_shared_key` baru sebelum Anda membuang respons.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookConfig'
              examples:
                Retention enabled:
                  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: retain_until_user_deleted
                    face_retention_days: 365
                    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'
        '400':
          description: >-
            Validasi gagal: setiap kolom yang tidak valid dipetakan ke daftar
            pesan, dan tidak ada yang diubah. Body yang bukan JSON valid
            mengembalikan `{"detail": "JSON parse error - ..."}`.
          content:
            application/json:
              schema:
                type: object
                description: Setiap kolom yang tidak valid dipetakan ke daftar pesan.
                additionalProperties:
                  type: array
                  items:
                    type: string
              examples:
                Retention days missing:
                  value:
                    face_retention_days:
                      - >-
                        A finite retention duration is required when face
                        retention is enabled.
                    biometric_consent_mode: auto
                Retention window out of range:
                  value:
                    data_retention_months:
                      - Ensure this value is less than or equal to 120.
                Invalid return host:
                  value:
                    allowed_return_hosts:
                      - >-
                        'https://shop.example.com' is not a hostname. Register
                        the bare host (e.g. shop.example.com): no scheme, port,
                        path or wildcard.
                Invalid choice:
                  value:
                    face_retention_policy:
                      - '"forever" is not a valid choice.'
        '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 write:
                  value:
                    detail: This API key has no write 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 300 permintaan tulis (POST, PATCH,
            PUT, DELETE) 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 (300).
              schema:
                type: integer
                example: 300
            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-write
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Pesan kesalahan yang mudah dibaca manusia.
              examples:
                Throttled:
                  value:
                    detail: >-
                      Write request rate limit exceeded. You can make up to 300
                      requests per minute.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: |-
            curl -X PATCH 'https://verification.didit.me/v3/webhook/' \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{"face_retention_policy": "retain_until_user_deleted", "face_retention_days": 365}'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.webhooks.update_config(
                face_retention_policy="retain_until_user_deleted",
                face_retention_days=365,
                biometric_consent_mode="auto",
            )
            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.updateConfig({
              face_retention_policy: "retain_until_user_deleted",
              face_retention_days: 365,
              biometric_consent_mode: "auto",
            });
            console.log(result);
        - lang: java
          label: Java
          source: >-
            import me.didit.Didit;

            import me.didit.types.WebhooksUpdateConfigParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.webhooks().updateConfig(WebhooksUpdateConfigParams.builder()
                    .faceRetentionPolicy(WebhooksUpdateConfigParams.FaceRetentionPolicy.of("retain_until_user_deleted"))
                    .faceRetentionDays(365L)
                    .biometricConsentMode(WebhooksUpdateConfigParams.BiometricConsentMode.of("auto"))
                    .build());
            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->updateConfig([
                'face_retention_policy' => 'retain_until_user_deleted',
                'face_retention_days' => 365,
                'biometric_consent_mode' => 'auto',
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            result = didit.webhooks.update_config(
              face_retention_policy: "retain_until_user_deleted",
              face_retention_days: 365,
              biometric_consent_mode: "auto"
            )
            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.UpdateConfigAsync(new
            WebhooksUpdateConfigParams

            {
                FaceRetentionPolicy = new WebhooksUpdateConfigParamsFaceRetentionPolicy("retain_until_user_deleted"),
                FaceRetentionDays = 365,
                BiometricConsentMode = new WebhooksUpdateConfigParamsBiometricConsentMode("auto"),
            });

            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.