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

# Webhook-Ziel-Analyse API

> Liefermengen, Fehlerrate und Antwortzeiten eines Webhook-Ziels in Didit, gesamt und pro UTC-Tag, für beliebige Zeiträume.



Prompt zum Abrufen der Webhook-Ziel-Analysen über die API
        Prompt in die Zwischenablage kopieren



      
      

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



      
      

Einfügen in

Verwenden Sie diesen Endpoint, um ein Ziel über einen Zeitraum Ihrer Wahl zu beobachten. Um die einzelnen Zustellungsversuche zu einem Fehler zu sehen, listen Sie sie mit [Zustellungen von Webhook-Zielen auflisten](https://docs.didit.me/de/management-api/webhook/list-deliveries.md) auf und öffnen Sie einen davon mit [Eine Webhook-Ziel-Zustellung abrufen](https://docs.didit.me/de/management-api/webhook/get-delivery.md).Für welche Antworten Didit automatisch einen Wiederholungsversuch unternimmt, ist in der [Wiederholungsrichtlinie](https://docs.didit.me/de/integration/webhooks.md#wiederholungsrichtlinie) beschrieben.


## OpenAPI

````yaml de/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 für Ausweisverifizierung. Authentifizierung über den x-api-key-Header.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/webhook/destinations/{destination_uuid}/analytics/:
    get:
      tags:
        - Webhook
      summary: Analysen des Webhook-Ziels abrufen
      description: >-
        Zustellungsgesamtwerte, Fehlerrate und Antwortzeiten für ein
        Webhook-Ziel über den gesamten Zeitraum (`summary`) und pro UTC-Tag
        (`points`). Jeder Versuch zählt als Zustellung: das erste Senden eines
        Ereignisses, jeder automatische
        [Wiederholungsversuch](https://docs.didit.me/de/integration/webhooks#wiederholungsrichtlinie)
        und jedes erneute Senden. Eine Zustellung gilt als fehlgeschlagen, wenn
        ihr erfasster HTTP-Status 400 oder höher ist, sodass Timeouts (erfasst
        als `504`) und Verbindungsfehler (`503`) als fehlgeschlagen zählen; eine
        Zustellung, die sich noch in der Warteschlange befindet, zählt nur bei
        `total_deliveries`. Zustellungsaufzeichnungen sind für etwa 30 Tage
        verfügbar. Für einen API-Schlüssel mit Berechtigungsumfang ist
        `webhooks: read` erforderlich.
      operationId: get_webhook_destination_analytics
      parameters:
        - name: destination_uuid
          in: path
          required: true
          description: >-
            UUID des Ziels (die von `GET /v3/webhook/destinations/`
            zurückgegebene `uuid`).
          schema:
            type: string
            format: uuid
          example: 11111111-2222-3333-4444-555555555555
        - name: date_from
          in: query
          required: false
          description: >-
            Erster einzubeziehender UTC-Tag als `YYYY-MM-DD` (einschließlich).
            Weglassen, um mit der ältesten verfügbaren Zustellung zu beginnen.
            `dateFrom` wird als Alias akzeptiert.
          schema:
            type: string
            format: date
          example: '2026-10-01'
        - name: date_to
          in: query
          required: false
          description: >-
            Letzter einzubeziehender UTC-Tag im Format `YYYY-MM-DD`
            (einschließlich). Darf nicht vor `date_from` liegen. `dateTo` wird
            als Alias akzeptiert.
          schema:
            type: string
            format: date
          example: '2026-10-16'
      responses:
        '200':
          description: Zustellungsstatistiken für das Ziel.
          content:
            application/json:
              schema:
                type: object
                required:
                  - summary
                  - points
                properties:
                  summary:
                    type: object
                    description: Gesamtsummen über den angeforderten Bereich.
                    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: >-
                          Zustellversuche, einschließlich derer in der
                          Warteschlange.
                      failed_deliveries:
                        type: integer
                        minimum: 0
                        description: >-
                          Versuche, deren erfasster HTTP-Status 400 oder höher
                          ist.
                      min_response_time_ms:
                        type: integer
                        nullable: true
                        description: >-
                          Schnellster Versuch in Millisekunden oder `null`, wenn
                          für keinen Versuch eine Zeit erfasst wurde.
                      avg_response_time_ms:
                        type: integer
                        nullable: true
                        description: >-
                          Durchschnittliche Versuchsdauer in Millisekunden,
                          gerundet, oder `null`, wenn für keinen Versuch eine
                          Zeit erfasst wurde.
                      max_response_time_ms:
                        type: integer
                        nullable: true
                        description: >-
                          Langsamster Versuch in Millisekunden oder `null`, wenn
                          für keinen Versuch eine Zeit erfasst wurde.
                      error_rate_percentage:
                        type: integer
                        minimum: 0
                        maximum: 100
                        description: >-
                          `failed_deliveries` / `total_deliveries` x 100,
                          gerundet auf eine ganze Zahl. `0`, wenn keine
                          Zustellungen vorliegen.
                  points:
                    type: array
                    description: >-
                      Ein Eintrag pro UTC-Tag, an dem Zustellungen stattfanden,
                      älteste zuerst. Tage ohne Zustellungen werden ausgelassen;
                      füllen Sie die Lücken daher mit Nullen, wenn Sie sie
                      grafisch darstellen.
                    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: UTC-Tag, `YYYY-MM-DD`.
                        total_deliveries:
                          type: integer
                          minimum: 0
                          description: >-
                            Zustellversuche, einschließlich derer in der
                            Warteschlange.
                        failed_deliveries:
                          type: integer
                          minimum: 0
                          description: >-
                            Versuche, deren erfasster HTTP-Status 400 oder höher
                            ist.
                        min_response_time_ms:
                          type: integer
                          nullable: true
                          description: >-
                            Schnellster Versuch in Millisekunden oder `null`,
                            wenn für keinen Versuch eine Zeit erfasst wurde.
                        avg_response_time_ms:
                          type: integer
                          nullable: true
                          description: >-
                            Durchschnittliche Versuchsdauer in Millisekunden,
                            gerundet, oder `null`, wenn für keinen Versuch eine
                            Zeit erfasst wurde.
                        max_response_time_ms:
                          type: integer
                          nullable: true
                          description: >-
                            Langsamster Versuch in Millisekunden oder `null`,
                            wenn für keinen Versuch eine Zeit erfasst wurde.
              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` oder `date_to` ist kein Datum im Format `YYYY-MM-DD`,
            oder `date_to` liegt vor `date_from`.
          content:
            application/json:
              schema:
                type: object
                description: Jedem ungültigen Feld ist eine Liste von Meldungen zugeordnet.
                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: >-
            Der API-Schlüssel ist abgelaufen: Er wurde mit einem Ablaufdatum
            erstellt, das verstrichen ist. Ein falscher oder widerrufener
            Schlüssel erhält ebenfalls `401`; ein fehlender Schlüssel erhält
            `403`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Lesbare Fehlermeldung.
              examples:
                Expired key:
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            Die Anfrage ist nicht zulässig. Bei einem fehlenden, ungültigen oder
            widerrufenen `x-api-key` erhalten Sie `You do not have permission to
            perform this action.` Ein berechtigungsbeschränkter Schlüssel ohne
            den für diesen Endpoint erforderlichen Zugriff erhält eine Meldung
            mit dem fehlenden Zugriff, und ein Schlüssel, der außerhalb seiner
            IP-Allowlist verwendet wird, erhält `This API key can't be used from
            this IP address.`
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Lesbare Fehlermeldung.
              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: >-
            Für die Anwendung existiert kein Ziel mit dieser UUID, oder es wurde
            gelöscht.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Lesbare Fehlermeldung.
              examples:
                Destination not found:
                  value:
                    detail: Webhook destination not found.
        '429':
          description: >-
            Rate-Limit überschritten: Mehr als 600 GET-Anfragen im aktuellen
            Ein-Minuten-Fenster für diesen API-Schlüssel. Warten Sie
            `Retry-After` Sekunden vor einem Wiederholungsversuch.
          headers:
            Retry-After:
              description: >-
                Sekunden, die vor einem Wiederholungsversuch gewartet werden
                müssen.
              schema:
                type: integer
                minimum: 1
                example: 30
            X-RateLimit-Limit:
              description: Im einminütigen Zeitfenster zulässige Anfragen (600).
              schema:
                type: integer
                example: 600
            X-RateLimit-Remaining:
              description: Im aktuellen Zeitfenster verbleibende Anfragen.
              schema:
                type: integer
                example: 0
            X-RateLimit-Reset:
              description: >-
                Unix-Zeit (Sekunden), zu der das aktuelle Zeitfenster
                zurückgesetzt wird.
              schema:
                type: integer
                example: 1792056120
            X-RateLimit-Scope:
              description: Name des Budgets, das überschritten wurde.
              schema:
                type: string
                example: generic-get
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Lesbare Fehlermeldung.
              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: >-
        Der API-Schlüssel Ihrer Anwendung, aus Entwickler -> API-Schlüssel in
        der Business Console. Der Primärschlüssel hat Vollzugriff. Ein benannter
        Schlüssel kann im Geltungsbereich eingeschränkt werden: keine, Lese-
        oder Schreibberechtigung pro Ressource, beschränkt auf bestimmte
        Workflows oder genehmigte Sitzungen, auf eine Liste von IP-Adressen und
        auf ein Ablaufdatum. 401 bedeutet, dass der Schlüssel falsch, widerrufen
        oder abgelaufen ist; 403 bedeutet, dass kein Schlüssel gesendet wurde,
        der Schlüssel keinen Zugriff auf diese Ressource oder Aktion hat oder
        die Anfrage von einer Adresse außerhalb seiner IP-Liste stammte; 404 bei
        einer Sitzungsroute bedeutet, dass die Sitzung außerhalb der Workflows
        oder Status des Schlüssels liegt. Ein Schlüssel ohne Medienzugriff
        erhält Bild-, Video- und PDF-URLs als null, und ein Schlüssel ohne
        Schreibberechtigung für Sitzungen erhält Sitzungslinks und Token als
        null. Siehe https://docs.didit.me/console/api-keys.

````

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