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

# Statistiques des destinations de webhook (API)

> Totaux de livraison, taux d'échec et temps de réponse d'une destination de webhook Didit, globaux et par jour UTC, pour la période de votre choix.



Prompt de l'API pour obtenir les statistiques d'une destination de webhook
        Copier le prompt dans le presse-papiers



      
      

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



      
      

Coller dans

Utilisez cet endpoint pour suivre une destination de webhook sur la période de votre choix. Pour voir les tentatives individuelles à l'origine d'un échec, listez-les avec [Lister les livraisons de la destination de webhook](https://docs.didit.me/fr/management-api/webhook/list-deliveries.md) et ouvrez-en une avec [Obtenir une livraison de la destination de webhook](https://docs.didit.me/fr/management-api/webhook/get-delivery.md).Les réponses que Didit réessaie automatiquement sont décrites dans la [politique de nouvelle tentative](https://docs.didit.me/fr/integration/webhooks.md#politique-de-nouvelles-tentatives).


## OpenAPI

````yaml fr/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 de vérification d'identité. Authentifiez-vous avec l'en-tête x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/webhook/destinations/{destination_uuid}/analytics/:
    get:
      tags:
        - Webhook
      summary: Obtenir les analyses de la destination de webhook
      description: >-
        Totaux de livraison, taux d'échec et temps de réponse pour une
        destination de webhook, sur l'ensemble de la période (`summary`) et par
        jour UTC (`points`). Chaque tentative compte comme une livraison : le
        premier envoi d'un événement, chaque
        [réessai](https://docs.didit.me/fr/integration/webhooks#politique-de-nouvelles-tentatives)
        automatique et chaque renvoi. Une livraison est considérée comme échouée
        lorsque son statut HTTP enregistré est supérieur ou égal à 400 ; les
        dépassements de délai (enregistrés en `504`) et les échecs de connexion
        (`503`) comptent donc comme des échecs ; une livraison encore en file
        d'attente n'est comptabilisée que dans `total_deliveries`. Les
        historiques de livraison sont disponibles pendant environ 30 jours. Une
        clé API limitée nécessite `webhooks: read`.
      operationId: get_webhook_destination_analytics
      parameters:
        - name: destination_uuid
          in: path
          required: true
          description: >-
            UUID de la destination (le `uuid` renvoyé par `GET
            /v3/webhook/destinations/`).
          schema:
            type: string
            format: uuid
          example: 11111111-2222-3333-4444-555555555555
        - name: date_from
          in: query
          required: false
          description: >-
            Premier jour UTC à inclure, au format `YYYY-MM-DD` (inclus). Omettez
            pour démarrer à partir de la livraison la plus ancienne disponible.
            `dateFrom` est accepté comme alias.
          schema:
            type: string
            format: date
          example: '2026-10-01'
        - name: date_to
          in: query
          required: false
          description: >-
            Dernier jour UTC à inclure, au format `YYYY-MM-DD` (inclus). Ne doit
            pas être antérieur à `date_from`. `dateTo` est accepté en tant
            qu'alias.
          schema:
            type: string
            format: date
          example: '2026-10-16'
      responses:
        '200':
          description: Statistiques de livraison pour la destination.
          content:
            application/json:
              schema:
                type: object
                required:
                  - summary
                  - points
                properties:
                  summary:
                    type: object
                    description: Totaux sur la plage demandée.
                    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: >-
                          Tentatives de livraison, y compris celles en file
                          d'attente.
                      failed_deliveries:
                        type: integer
                        minimum: 0
                        description: >-
                          Tentatives dont le statut HTTP enregistré est 400 ou
                          supérieur.
                      min_response_time_ms:
                        type: integer
                        nullable: true
                        description: >-
                          Tentative la plus rapide en millisecondes, ou `null`
                          si aucune tentative n'a de durée enregistrée.
                      avg_response_time_ms:
                        type: integer
                        nullable: true
                        description: >-
                          Durée moyenne de tentative en millisecondes, arrondie,
                          ou `null` lorsqu'aucune tentative n'a de durée
                          enregistrée.
                      max_response_time_ms:
                        type: integer
                        nullable: true
                        description: >-
                          Tentative la plus lente en millisecondes, ou `null` si
                          aucune tentative n'a de durée enregistrée.
                      error_rate_percentage:
                        type: integer
                        minimum: 0
                        maximum: 100
                        description: >-
                          `failed_deliveries` / `total_deliveries` x 100,
                          arrondi à un nombre entier. `0` lorsqu'il n'y a aucune
                          livraison.
                  points:
                    type: array
                    description: >-
                      Une entrée par jour UTC ayant fait l'objet de livraisons,
                      de la plus ancienne à la plus récente. Les jours sans
                      livraison sont omis ; comblez les écarts avec des zéros
                      lors de la génération de graphiques.
                    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: Jour UTC, `YYYY-MM-DD`.
                        total_deliveries:
                          type: integer
                          minimum: 0
                          description: >-
                            Tentatives de livraison, y compris celles en file
                            d'attente.
                        failed_deliveries:
                          type: integer
                          minimum: 0
                          description: >-
                            Tentatives dont le statut HTTP enregistré est 400 ou
                            supérieur.
                        min_response_time_ms:
                          type: integer
                          nullable: true
                          description: >-
                            Tentative la plus rapide en millisecondes, ou `null`
                            si aucune tentative n'a de durée enregistrée.
                        avg_response_time_ms:
                          type: integer
                          nullable: true
                          description: >-
                            Durée moyenne de tentative en millisecondes,
                            arrondie, ou `null` lorsqu'aucune tentative n'a de
                            durée enregistrée.
                        max_response_time_ms:
                          type: integer
                          nullable: true
                          description: >-
                            Tentative la plus lente en millisecondes, ou `null`
                            si aucune tentative n'a de durée enregistrée.
              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` ou `date_to` n'est pas une date au format `YYYY-MM-DD`,
            ou `date_to` est antérieure à `date_from`.
          content:
            application/json:
              schema:
                type: object
                description: Chaque champ invalide associé à une liste de messages.
                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: >-
            La clé API a expiré : elle a été créée avec une date d'expiration
            qui est dépassée. Une clé incorrecte ou révoquée reçoit également un
            code `401` ; une clé manquante reçoit un code `403`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Message d'erreur lisible par l'humain.
              examples:
                Expired key:
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            La requête n'est pas autorisée. Un en-tête `x-api-key` manquant,
            invalide ou révoqué renvoie `You do not have permission to perform
            this action.` Une clé avec restriction de portée sans l'accès requis
            par cet endpoint renvoie un message indiquant l'accès manquant, et
            une clé utilisée en dehors de sa liste d'autorisation d'adresses IP
            renvoie `This API key can't be used from this IP address.`
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Message d'erreur lisible par l'humain.
              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: >-
            Aucune destination avec cet UUID n'existe pour l'application, ou
            elle a été supprimée.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Message d'erreur lisible par l'humain.
              examples:
                Destination not found:
                  value:
                    detail: Webhook destination not found.
        '429':
          description: >-
            Limite de débit dépassée : plus de 600 requêtes GET dans la fenêtre
            actuelle d'une minute pour cette clé API. Attendez `Retry-After`
            secondes avant de réessayer.
          headers:
            Retry-After:
              description: Secondes à attendre avant de réessayer.
              schema:
                type: integer
                minimum: 1
                example: 30
            X-RateLimit-Limit:
              description: Requêtes autorisées dans la fenêtre d'une minute (600).
              schema:
                type: integer
                example: 600
            X-RateLimit-Remaining:
              description: Requêtes restantes dans la fenêtre actuelle.
              schema:
                type: integer
                example: 0
            X-RateLimit-Reset:
              description: >-
                Temps Unix (en secondes) auquel la fenêtre actuelle se
                réinitialise.
              schema:
                type: integer
                example: 1792056120
            X-RateLimit-Scope:
              description: Nom du budget qui a été dépassé.
              schema:
                type: string
                example: generic-get
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Message d'erreur lisible par l'humain.
              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: >-
        La clé API de votre application, issue de Développeurs -> Clés API dans
        la Business Console. La clé principale dispose d'un accès complet. Une
        clé nommée peut être restreinte : aucun, lecture ou écriture par
        ressource, limitée à certains workflows ou aux sessions approuvées, à
        une liste d'adresses IP et à une date d'expiration. 401 signifie que la
        clé est incorrecte, révoquée ou expirée ; 403 signifie qu'aucune clé n'a
        été envoyée, que la clé n'a pas accès à cette ressource ou action, ou
        que la requête provient d'une adresse hors de sa liste d'IP ; 404 sur
        une route de session signifie que la session est hors des workflows ou
        des statuts de la clé. Une clé sans accès aux médias reçoit les URL
        d'images, de vidéos et de PDF à null, et une clé sans accès en écriture
        aux sessions reçoit les liens et tokens de session à null. Voir
        https://docs.didit.me/console/api-keys.

````

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