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

# Perbarui Tujuan Webhook API

> Ubah tujuan webhook Didit: label, URL, status aktif, versi, event yang dilanggan. Operasi webhook terprogram, bayar per panggilan, tanpa kontrak.



Prompt API untuk Memperbarui Tujuan Webhook
        Salin prompt ke papan klip



      
      

\<pre>

\`Update a Didit webhook destination through the Management API.

Endpoint:
PATCH https://verification.didit.me/v3/webhook/destinations/{destination_uuid}/

Authentication:
Use the x-api-key header with my Didit API key.

Goal:
\- Change a destination's label, url, enabled state, webhook_version, or subscribed_events. Send only the fields you want to change.

Path parameter:
\- destination_uuid — the destination UUID from GET /v3/webhook/destinations/.

Request body (application/json) — all fields optional:
\{
"label": "Updated label",
"url": "https://yourapp.com/webhooks/v2",
"enabled": false,
"webhook_version": "v3",
"subscribed_events": ["status.updated", "data.updated", "transaction.created"]
}

Critical semantics:
\- subscribed_events is replaced wholesale, NOT merged. To add an event, GET the current destination, append to the list, and send the full array back. Sending [] returns 400.
\- url must remain unique among the application's destinations.
\- A uuid in the body is ignored: the path names the destination.
\- webhook_version applies to future deliveries only. Already-queued deliveries use the version that was active when they were enqueued.
\- The signing secret (secret_shared_key) is NOT rotated by PATCH. Console offers a manual rotation flow. For 24 hours after a rotation, every delivery also carries X-Signature-Previous, X-Signature-V2-Previous and X-Signature-Simple-Previous, made with the replaced secret, and previous_secret_expires_at says when that ends.
\- Changing url does not move automatic retries of deliveries already made: they go to the URL the first attempt used. A manual resend goes to the destination's current URL.

Example call (replace subscription list):
curl -X PATCH "https://verification.didit.me/v3/webhook/destinations/{destination_uuid}/" \
-H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"subscribed_events": ["status.updated", "data.updated", "transaction.created"]}'

\# Pause a destination without losing config:
curl -X PATCH "https://verification.didit.me/v3/webhook/destinations/{destination_uuid}/" \
-H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"enabled": false}'

Failure modes:
\- 400 — empty subscribed_events, unknown event name, duplicate url among destinations, or invalid webhook_version.
\- 401 — missing or malformed x-api-key.
\- 403 — canonical { "detail": "You do not have permission to perform this action." } envelope.
\- 404 — destination not found in this application.

Side effects:
\- Subsequent webhook deliveries respect the new url, enabled flag, and subscribed_events list.

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

\</pre>



      
      

Tempel ke

Gunakan endpoint ini untuk mengubah tujuan pengiriman webhook dan event yang diterima tujuan tersebut.## Memperbarui `subscribed_events`Saat Anda mengirim `subscribed_events`, berikan daftar lengkap event yang langganannya harus tetap aktif setelah pembaruan. Array tersebut menggantikan kumpulan langganan sebelumnya.```json theme={null}
{
  "subscribed_events": [
    "status.updated",
    "data.updated",
    "transaction.created",
    "transaction.status.updated"
  ]
}
```Nilai yang didukung adalah:| Event | Keterangan |
| - | - |
| `status.updated` | Status sesi Verifikasi Pengguna (KYC) atau Verifikasi Bisnis (KYB) berubah. |
| `data.updated` | Data verifikasi sesi berubah setelah sesi dibuat. |
| `user.status.updated` | Status entitas pengguna berubah. |
| `user.data.updated` | Data entitas pengguna berubah. |
| `business.status.updated` | Status entitas bisnis berubah. |
| `business.data.updated` | Data entitas bisnis berubah. |
| `activity.created` | Diterima, tetapi tidak dikirimkan untuk lalu lintas produksi hari ini. |
| `transaction.created` | Transaksi dibuat dan evaluasi awal dilakukan. |
| `transaction.status.updated` | Status transaksi berubah. |
| `travel_rule.status.updated` | Status pertukaran Travel Rule berubah. |
| `workflow.compliance_changed` | Status kepatuhan alur kerja yang dipublikasikan berubah. |
| `transaction_rule_suggestions.created` | Proses saran aturan mengusulkan perubahan baru pada aturan. |Keluarga event Investigator (`investigator.*`) dan Autentikasi (`auth.*`) juga diterima; lihat [Webhooks](https://docs.didit.me/id/integration/webhooks.md#jenis-event) untuk daftar lengkapnya.Gunakan [panduan membuat tujuan](https://docs.didit.me/id/management-api/webhook/create-destination.md) untuk deskripsi event yang rinci dan kumpulan langganan yang umum.


## OpenAPI

````yaml id/openapi-25.json PATCH /v3/webhook/destinations/{destination_uuid}/
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/destinations/{destination_uuid}/:
    patch:
      tags:
        - Webhook
      summary: Perbarui tujuan webhook
      description: >-
        Perbarui tujuan webhook. **`subscribed_events` DIGANTI seluruhnya, bukan
        digabungkan**: ambil terlebih dahulu, tambahkan, kirim ulang. Rahasia
        tidak dirotasi. Nilai `uuid` di dalam body diabaikan: jalur menentukan
        tujuan.
      operationId: update_webhook_destination
      parameters:
        - name: destination_uuid
          in: path
          required: true
          description: UUID tujuan yang akan diperbarui.
          schema:
            type: string
            format: uuid
          example: 11111111-2222-3333-4444-555555555555
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                label:
                  type: string
                  description: Nama baru yang dapat dibaca manusia.
                url:
                  type: string
                  format: uri
                  description: URL target baru. Harus unik dalam aplikasi.
                enabled:
                  type: boolean
                  description: >-
                    Atur ke `false` untuk menjeda pengiriman ke tujuan ini tanpa
                    menghapusnya.
                webhook_version:
                  type: string
                  enum:
                    - v1
                    - v2
                    - v3
                  description: Versi skema payload baru untuk pengiriman di masa mendatang.
                subscribed_events:
                  $ref: '#/components/schemas/WebhookSubscribedEvents'
            examples:
              Pause destination:
                value:
                  enabled: false
              Add transaction events:
                value:
                  subscribed_events:
                    - status.updated
                    - data.updated
                    - transaction.created
                    - transaction.status.updated
              Move target URL:
                value:
                  label: Production session webhooks v2
                  url: https://api.yourapp.com/webhooks/didit/v2
      responses:
        '200':
          description: >-
            Tujuan webhook yang diperbarui. Isi memiliki format yang sama
            seperti `GET /v3/webhook/destinations/{destination_uuid}/`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  uuid:
                    type: string
                    format: uuid
                  label:
                    type: string
                  url:
                    type: string
                    format: uri
                  enabled:
                    type: boolean
                  webhook_version:
                    type: string
                    enum:
                      - v1
                      - v2
                      - v3
                  secret_shared_key:
                    type: string
                  secret_last4:
                    type: string
                    description: >-
                      Empat karakter terakhir dari rahasia penandatanganan
                      tujuan saat ini, sehingga Anda dapat membedakan rahasia.
                      Tidak cukup untuk memverifikasi tanda tangan.
                  previous_secret_expires_at:
                    type: string
                    format: date-time
                    nullable: true
                    description: >-
                      Ditetapkan selama 24 jam setelah rahasia penandatanganan
                      tujuan dirotasi di Business Console. Hingga waktu ini,
                      setiap pengiriman ke tujuan juga membawa
                      `X-Signature-Previous`, `X-Signature-V2-Previous`, dan
                      `X-Signature-Simple-Previous`, yang dibuat dengan rahasia
                      yang diganti (lihat [Verifikasi tanda
                      tangan](/id/integration/webhooks#verifikasi-tanda-tangan)).
                      `null` jika tidak ada rotasi yang terjadi dalam 24 jam
                      terakhir.
                  subscribed_events:
                    $ref: '#/components/schemas/WebhookSubscribedEvents'
                  created_by_email:
                    type: string
                    nullable: true
                    description: >-
                      Email anggota Business Console yang membuat tujuan. `null`
                      untuk tujuan yang dibuat dengan kunci API.
                  created_by_name:
                    type: string
                    nullable: true
                    description: >-
                      Nama anggota Business Console yang membuat tujuan.
                      Bernilai `null` untuk tujuan yang dibuat dengan kunci API.
                  created_at:
                    type: string
                    format: date-time
                  updated_at:
                    type: string
                    format: date-time
                  health_status:
                    type: string
                    enum:
                      - healthy
                      - degraded
                      - failing
                    description: >-
                      Status pengiriman. `failing`: 3 event berturut-turut atau
                      lebih gagal pada upaya pengiriman pertamanya sejak tujuan
                      terakhir kali merespons dengan berhasil (lihat
                      `failing_streak`). `degraded`: tidak gagal (failing),
                      tetapi upaya pengiriman gagal dalam 24 jam terakhir dan
                      tidak ada upaya berikutnya yang berhasil mengirimkan event
                      tersebut; percobaan ulang atau pengiriman ulang yang
                      berhasil menyelesaikannya akan menghapus status ini.
                      `healthy`: tidak keduanya. Independen dari `enabled`.
                      Upaya yang gagal adalah upaya yang direspons dengan HTTP
                      400 ke atas, atau tidak direspons sama sekali.
                  failing_streak:
                    type: integer
                    description: >-
                      Berapa banyak event berturut-turut yang gagal pada upaya
                      pengiriman pertamanya sejak tujuan terakhir kali merespons
                      dengan berhasil, dalam 30 hari terakhir. Coba lagi tidak
                      dihitung, dan setiap upaya yang berhasil, termasuk coba
                      lagi atau pengiriman ulang, mengakhiri rentetan tersebut.
                      `0` jika tidak ada event yang gagal sejak keberhasilan
                      terakhir.
                  failing_since:
                    type: string
                    format: date-time
                    nullable: true
                    description: >-
                      Waktu ketika upaya gagal pertama dari `failing_streak`
                      saat ini dilakukan. `null` jika `failing_streak` bernilai
                      `0`.
                  last_success_at:
                    type: string
                    format: date-time
                    nullable: true
                    description: >-
                      Waktu ketika tujuan terakhir kali merespons pengiriman
                      dengan status HTTP di bawah 400, dalam 30 hari terakhir.
                      `null` jika tidak merespons dalam rentang waktu tersebut.
                  environment:
                    type: string
                    enum:
                      - live
                      - sandbox
                    description: Lingkungan aplikasi yang memiliki tujuan tersebut.
                  summary:
                    type: object
                    description: >-
                      Metrik pengiriman selama `metrics_window_days` (30) hari
                      terakhir. `last_delivery_at` adalah upaya paling baru,
                      kapan pun upaya tersebut dilakukan.
                    properties:
                      total_deliveries:
                        type: integer
                      failed_deliveries:
                        type: integer
                      error_rate_percentage:
                        type: integer
                      min_response_time_ms:
                        type: integer
                        nullable: true
                      avg_response_time_ms:
                        type: integer
                        nullable: true
                      max_response_time_ms:
                        type: integer
                        nullable: true
                      last_delivery_at:
                        type: string
                        format: date-time
                        nullable: true
                      metrics_window_days:
                        type: integer
                        description: >-
                          Panjang dalam hari dari jendela yang dicakup oleh
                          metrik ringkasan lainnya. Selalu `30`.
              examples:
                Paused:
                  value:
                    uuid: 11111111-2222-3333-4444-555555555555
                    label: Production session webhooks
                    url: https://yourapp.com/webhooks/didit
                    enabled: false
                    webhook_version: v3
                    secret_shared_key: tno2NTeRC1ZK3sBOYlBJDyEzBVENl3pQ1AcZyAW0xnQ
                    secret_last4: 0xnQ
                    previous_secret_expires_at: null
                    subscribed_events:
                      - status.updated
                      - data.updated
                    created_by_email: null
                    created_by_name: null
                    created_at: '2026-01-04T08:00:00Z'
                    updated_at: '2026-05-17T11:02:55Z'
                    health_status: healthy
                    failing_streak: 0
                    failing_since: null
                    last_success_at: '2026-05-17T09:21:18Z'
                    environment: live
                    summary:
                      total_deliveries: 12453
                      failed_deliveries: 14
                      error_rate_percentage: 0
                      min_response_time_ms: 41
                      avg_response_time_ms: 187
                      max_response_time_ms: 2103
                      last_delivery_at: '2026-05-17T09:21:18Z'
                      metrics_window_days: 30
        '400':
          description: >-
            Validasi gagal (URL duplikat, daftar event kosong/tidak dikenal, isi
            permintaan salah format).
          content:
            application/json:
              examples:
                Duplicate URL:
                  value:
                    url:
                      - >-
                        This webhook destination already exists for the
                        application.
                Empty events:
                  value:
                    subscribed_events:
                      - At least one subscribed event is required.
        '403':
          description: >-
            Kunci API tidak ada, format salah, kedaluwarsa, atau memiliki
            cakupan untuk aplikasi yang berbeda. Kunci yang tidak ada
            mengembalikan `403`; kunci yang salah, dicabut, atau kedaluwarsa
            mengembalikan `401`.
          content:
            application/json:
              examples:
                Forbidden:
                  value:
                    detail: You do not have permission to perform this action.
        '404':
          description: >-
            Tujuan dengan UUID ini tidak ada (atau telah dihapus, atau milik
            aplikasi lain).
          content:
            application/json:
              examples:
                Not found:
                  value:
                    detail: Webhook destination not found.
        '429':
          description: Batas laju terlampaui; lakukan back off dan coba lagi.
          content:
            application/json:
              examples:
                Throttled:
                  value:
                    detail: Request was throttled. Expected available in 30 seconds.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X PATCH
            'https://verification.didit.me/v3/webhook/destinations/11111111-2222-3333-4444-555555555555/'
            \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{
                "subscribed_events": [
                  "status.updated",
                  "data.updated",
                  "transaction.created"
                ]
              }'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.webhooks.destinations.update(
                "11111111-2222-3333-4444-555555555555",
                enabled=False,
            )
            print(result)
        - lang: javascript
          label: Node.js
          source: >-
            import Didit from "@didit-protocol/sdk-node";


            // Reads DIDIT_API_KEY.

            const didit = new Didit();


            const result = await
            didit.webhooks.destinations.update("11111111-2222-3333-4444-555555555555",
            {
              enabled: false,
            });

            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Webhooks.Destinations.Update(ctx, \"11111111-2222-3333-4444-555555555555\", didit.WebhooksDestinationsUpdateParams{\n\tEnabled: didit.Bool(false),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import me.didit.Didit;

            import me.didit.types.WebhooksDestinationsUpdateParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.webhooks().destinations().update("11111111-2222-3333-4444-555555555555",
            WebhooksDestinationsUpdateParams.builder()
                    .enabled(false)
                    .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->destinations->update('11111111-2222-3333-4444-555555555555',
            [
                'enabled' => false,
            ]);

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

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

            result = didit.webhooks.destinations.update(
              "11111111-2222-3333-4444-555555555555",
              enabled: false
            )
            puts result.to_h
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using System.Text.Json;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            var result = await
            client.Webhooks.Destinations.UpdateAsync("11111111-2222-3333-4444-555555555555",
            new WebhooksDestinationsUpdateParams

            {
                Enabled = false,
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    WebhookSubscribedEvents:
      type: array
      description: >-
        Filter event untuk tujuan webhook ini. Didit hanya mengirimkan webhook
        yang tipe event-nya sama persis dengan salah satu nilai ini — tidak ada
        langganan wildcard. Saat dikirim, daftar ini harus berisi setidaknya
        satu event yang valid (`[]` eksplisit akan ditolak dengan kode 400);
        tujuan yang daftarnya kosong (kolom tidak disertakan saat pembuatan)
        tidak akan menerima apa pun. Saat pembaruan, daftar diganti secara
        keseluruhan, tidak pernah digabungkan.
      minItems: 1
      uniqueItems: true
      items:
        $ref: '#/components/schemas/WebhookEvent'
      example:
        - status.updated
        - data.updated
    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.