> ## 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 Analitik Tujuan Webhook Didit

> Total pengiriman, tingkat kegagalan, dan waktu respons untuk satu tujuan webhook Didit, secara keseluruhan dan per hari UTC, untuk rentang tanggal apa pun.



Dapatkan Prompt API Analitik Tujuan Webhook
        Salin prompt ke papan klip



      
      

\<pre>

\`Read delivery statistics for one Didit webhook destination through the Management API.

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

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

Goal:
\- Measure how reliably and how fast my endpoint accepts webhooks, to alert on failures or chart delivery health.

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

Query parameters (optional):
\- date_from, date_to: UTC days as YYYY-MM-DD, both inclusive. Without them, every delivery of the destination is included. Delivery records are available for about 30 days, so no range reaches further back.

Behavior:
\- summary: total_deliveries, failed_deliveries, error_rate_percentage (whole number, 0 when there are no deliveries), min_response_time_ms, avg_response_time_ms, max_response_time_ms (null when there is no data). A delivery not attempted yet counts in total_deliveries, never in failed_deliveries, and has no response time.
\- points: one entry per UTC day that had deliveries, oldest first, with the same counters plus date. Days without deliveries are omitted, so fill the gaps with zeros when you chart them.
\- Every attempt counts: the first send of an event, each automatic retry and each resend.
\- Failed means HTTP 400 or above. A timeout is recorded as 504 and a connection failure as 503, so both count as failed.

Example call:
curl -X GET "https://verification.didit.me/v3/webhook/destinations/{destination_uuid}/analytics/?date_from=2026-05-01&date_to=2026-05-31" \
-H "x-api-key: YOUR_API_KEY"

Failure modes:
\- 400: { "date_from": ["Date has wrong format. Use one of these formats instead: YYYY-MM-DD."] } or { "date_to": ["date_to must be greater than or equal to date_from."] }
\- 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 read access to webhooks." }
\- 404: { "detail": "Webhook destination not found." }
\- 429: more than 600 GET requests per minute with this key; wait for Retry-After.

Side effects: none. This is a pure read.

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

\</pre>



      
      

Tempel ke

Gunakan endpoint ini untuk memantau tujuan selama periode yang Anda pilih. Untuk melihat setiap percobaan yang mendasari suatu kegagalan, cantumkan percobaan tersebut dengan [Daftar Pengiriman Tujuan Webhook](https://docs.didit.me/id/management-api/webhook/list-deliveries.md) lalu buka salah satunya dengan [Ambil Pengiriman Tujuan Webhook](https://docs.didit.me/id/management-api/webhook/get-delivery.md).Respons yang secara otomatis dicoba ulang oleh Didit dijelaskan dalam [kebijakan coba lagi](https://docs.didit.me/id/integration/webhooks.md#kebijakan-coba-lagi).


## OpenAPI

````yaml id/openapi-25.json GET /v3/webhook/destinations/{destination_uuid}/analytics/
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}/analytics/:
    get:
      tags:
        - Webhook
      summary: Dapatkan analitik tujuan webhook
      description: >-
        Total pengiriman, tingkat kegagalan, dan waktu respons untuk satu tujuan
        webhook, di seluruh rentang (`summary`) dan per hari UTC (`points`).
        Setiap upaya dihitung sebagai pengiriman: pengiriman pertama suatu
        event, setiap [coba
        lagi](https://docs.didit.me/id/integration/webhooks#kebijakan-coba-lagi)
        otomatis, dan setiap pengiriman ulang. Pengiriman dianggap gagal jika
        status HTTP yang tercatat adalah 400 ke atas, sehingga batas waktu habis
        (tercatat sebagai `504`) dan kegagalan koneksi (`503`) dihitung sebagai
        gagal; pengiriman yang masih dalam antrean hanya dihitung dalam
        `total_deliveries`. Catatan pengiriman tersedia selama sekitar 30 hari.
        Kunci API dengan cakupan membutuhkan `webhooks: read`.
      operationId: get_webhook_destination_analytics
      parameters:
        - name: destination_uuid
          in: path
          required: true
          description: >-
            UUID tujuan (`uuid` yang dikembalikan oleh `GET
            /v3/webhook/destinations/`).
          schema:
            type: string
            format: uuid
          example: 11111111-2222-3333-4444-555555555555
        - name: date_from
          in: query
          required: false
          description: >-
            Hari UTC pertama yang disertakan, sebagai `YYYY-MM-DD` (inklusif).
            Lewati untuk mulai dari pengiriman terlama yang tersedia. `dateFrom`
            diterima sebagai alias.
          schema:
            type: string
            format: date
          example: '2026-10-01'
        - name: date_to
          in: query
          required: false
          description: >-
            Hari UTC terakhir yang disertakan, sebagai `YYYY-MM-DD` (inklusif).
            Tidak boleh lebih awal dari `date_from`. `dateTo` diterima sebagai
            alias.
          schema:
            type: string
            format: date
          example: '2026-10-16'
      responses:
        '200':
          description: Statistik pengiriman untuk tujuan.
          content:
            application/json:
              schema:
                type: object
                required:
                  - summary
                  - points
                properties:
                  summary:
                    type: object
                    description: Total selama rentang yang diminta.
                    required:
                      - total_deliveries
                      - failed_deliveries
                      - min_response_time_ms
                      - avg_response_time_ms
                      - max_response_time_ms
                      - error_rate_percentage
                    properties:
                      total_deliveries:
                        type: integer
                        minimum: 0
                        description: Upaya pengiriman, termasuk yang berada dalam antrean.
                      failed_deliveries:
                        type: integer
                        minimum: 0
                        description: >-
                          Percobaan yang status HTTP tercatatnya adalah 400 ke
                          atas.
                      min_response_time_ms:
                        type: integer
                        nullable: true
                        description: >-
                          Percobaan tercepat dalam milidetik, atau `null` jika
                          tidak ada percobaan yang memiliki waktu tercatat.
                      avg_response_time_ms:
                        type: integer
                        nullable: true
                        description: >-
                          Waktu upaya rata-rata dalam milidetik, dibulatkan,
                          atau `null` jika tidak ada upaya dengan waktu yang
                          tercatat.
                      max_response_time_ms:
                        type: integer
                        nullable: true
                        description: >-
                          Upaya paling lambat dalam milidetik, atau `null` jika
                          tidak ada upaya yang memiliki waktu tercatat.
                      error_rate_percentage:
                        type: integer
                        minimum: 0
                        maximum: 100
                        description: >-
                          `failed_deliveries` / `total_deliveries` x 100,
                          dibulatkan ke bilangan bulat terdekat. `0` ketika
                          tidak ada pengiriman.
                  points:
                    type: array
                    description: >-
                      Satu entri per hari UTC yang memiliki pengiriman, yang
                      terlama terlebih dahulu. Hari-hari tanpa pengiriman
                      diabaikan, jadi isi kekosongan tersebut dengan angka nol
                      saat Anda membuat grafiknya.
                    items:
                      type: object
                      required:
                        - date
                        - total_deliveries
                        - failed_deliveries
                        - min_response_time_ms
                        - avg_response_time_ms
                        - max_response_time_ms
                      properties:
                        date:
                          type: string
                          format: date
                          description: Hari UTC, `YYYY-MM-DD`.
                        total_deliveries:
                          type: integer
                          minimum: 0
                          description: >-
                            Upaya pengiriman, termasuk yang berada dalam
                            antrean.
                        failed_deliveries:
                          type: integer
                          minimum: 0
                          description: >-
                            Percobaan yang status HTTP tercatatnya adalah 400 ke
                            atas.
                        min_response_time_ms:
                          type: integer
                          nullable: true
                          description: >-
                            Percobaan tercepat dalam milidetik, atau `null` jika
                            tidak ada percobaan yang memiliki waktu tercatat.
                        avg_response_time_ms:
                          type: integer
                          nullable: true
                          description: >-
                            Waktu upaya rata-rata dalam milidetik, dibulatkan,
                            atau `null` jika tidak ada upaya dengan waktu yang
                            tercatat.
                        max_response_time_ms:
                          type: integer
                          nullable: true
                          description: >-
                            Upaya paling lambat dalam milidetik, atau `null`
                            jika tidak ada upaya yang memiliki waktu tercatat.
              examples:
                Three days of deliveries:
                  value:
                    summary:
                      total_deliveries: 1250
                      failed_deliveries: 12
                      min_response_time_ms: 38
                      avg_response_time_ms: 164
                      max_response_time_ms: 5004
                      error_rate_percentage: 1
                    points:
                      - date: '2026-10-14'
                        total_deliveries: 410
                        failed_deliveries: 0
                        min_response_time_ms: 38
                        avg_response_time_ms: 152
                        max_response_time_ms: 911
                      - date: '2026-10-15'
                        total_deliveries: 395
                        failed_deliveries: 12
                        min_response_time_ms: 41
                        avg_response_time_ms: 190
                        max_response_time_ms: 5004
                      - date: '2026-10-16'
                        total_deliveries: 445
                        failed_deliveries: 0
                        min_response_time_ms: 40
                        avg_response_time_ms: 151
                        max_response_time_ms: 1220
                No deliveries in range:
                  value:
                    summary:
                      total_deliveries: 0
                      failed_deliveries: 0
                      min_response_time_ms: null
                      avg_response_time_ms: null
                      max_response_time_ms: null
                      error_rate_percentage: 0
                    points: []
        '400':
          description: >-
            `date_from` atau `date_to` bukan tanggal berformat `YYYY-MM-DD`,
            atau `date_to` lebih awal daripada `date_from`.
          content:
            application/json:
              schema:
                type: object
                description: Setiap kolom yang tidak valid dipetakan ke daftar pesan.
                additionalProperties:
                  type: array
                  items:
                    type: string
              examples:
                Malformed date:
                  value:
                    date_from:
                      - >-
                        Date has wrong format. Use one of these formats instead:
                        YYYY-MM-DD.
                Reversed range:
                  value:
                    date_to:
                      - date_to must be greater than or equal to date_from.
        '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.
        '404':
          description: >-
            Tidak ada tujuan dengan UUID ini untuk aplikasi tersebut, atau
            tujuan tersebut telah dihapus.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Pesan kesalahan yang mudah dibaca manusia.
              examples:
                Destination not found:
                  value:
                    detail: Webhook destination 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/webhook/destinations/11111111-2222-3333-4444-555555555555/analytics/?date_from=2026-10-01&date_to=2026-10-16'
            \
              -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.destinations.retrieve_analytics(
                "11111111-2222-3333-4444-555555555555",
            )
            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.retrieveAnalytics("11111111-2222-3333-4444-555555555555");

            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.RetrieveAnalytics(ctx, \"11111111-2222-3333-4444-555555555555\", didit.WebhooksDestinationsRetrieveAnalyticsParams{})\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().destinations().retrieveAnalytics("11111111-2222-3333-4444-555555555555");

            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->retrieveAnalytics('11111111-2222-3333-4444-555555555555');

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


            # Reads DIDIT_API_KEY.

            didit = Didit::Client.new


            result =
            didit.webhooks.destinations.retrieve_analytics("11111111-2222-3333-4444-555555555555")

            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.RetrieveAnalyticsAsync("11111111-2222-3333-4444-555555555555");

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  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.