> ## 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 de analíticas de destino de webhook

> Didit muestra entregas totales, tasa de fallos y tiempos de respuesta de un destino de webhook, en total y por día UTC, para cualquier rango.



Prompt de la API para obtener las analíticas de un destino de webhook
        Copiar el prompt al portapapeles



      
      

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



      
      

Pegar en

Usa este endpoint para supervisar un destino durante el periodo que elijas. Para ver los intentos individuales detrás de un fallo, enuméralos con [Listar entregas de un destino de webhook](https://docs.didit.me/es/management-api/webhook/list-deliveries.md) y abre uno con [Obtener una entrega de un destino de webhook](https://docs.didit.me/es/management-api/webhook/get-delivery.md).Las respuestas que Didit reintenta automáticamente se describen en la [política de reintentos](https://docs.didit.me/es/integration/webhooks.md#política-de-reintentos).


## OpenAPI

````yaml es/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 verificación de identidad. Autentícate con el encabezado x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/webhook/destinations/{destination_uuid}/analytics/:
    get:
      tags:
        - Webhook
      summary: Obtener las analíticas del destino de webhook
      description: >-
        Totales de entregas, tasa de fallos y tiempos de respuesta de un destino
        de webhook, para todo el intervalo (`summary`) y por día UTC (`points`).
        Cada intento cuenta como una entrega: el primer envío de un evento, cada
        [reintento](https://docs.didit.me/es/integration/webhooks#política-de-reintentos)
        automático y cada reenvío. Una entrega es fallida cuando el estado HTTP
        registrado es 400 o superior, por lo que los tiempos de espera agotados
        (registrados como `504`) y los fallos de conexión (`503`) cuentan como
        fallidos; una entrega que sigue en cola solo cuenta en
        `total_deliveries`. Los registros de entrega están disponibles durante
        unos 30 días. Una clave de API con alcance limitado necesita `webhooks:
        read`.
      operationId: get_webhook_destination_analytics
      parameters:
        - name: destination_uuid
          in: path
          required: true
          description: >-
            UUID del destino (el `uuid` que devuelve `GET
            /v3/webhook/destinations/`).
          schema:
            type: string
            format: uuid
          example: 11111111-2222-3333-4444-555555555555
        - name: date_from
          in: query
          required: false
          description: >-
            Primer día UTC que se incluye, en formato `YYYY-MM-DD` (inclusive).
            Omítelo para empezar desde la entrega más antigua disponible.
            `dateFrom` se acepta como alias.
          schema:
            type: string
            format: date
          example: '2026-10-01'
        - name: date_to
          in: query
          required: false
          description: >-
            Último día UTC que se incluye, en formato `YYYY-MM-DD` (inclusive).
            No puede ser anterior a `date_from`. Se acepta `dateTo` como alias.
          schema:
            type: string
            format: date
          example: '2026-10-16'
      responses:
        '200':
          description: Estadísticas de entrega del destino.
          content:
            application/json:
              schema:
                type: object
                required:
                  - summary
                  - points
                properties:
                  summary:
                    type: object
                    description: Totales del intervalo solicitado.
                    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: Intentos de entrega, incluidos los que están en cola.
                      failed_deliveries:
                        type: integer
                        minimum: 0
                        description: >-
                          Intentos cuyo estado HTTP registrado es 400 o
                          superior.
                      min_response_time_ms:
                        type: integer
                        nullable: true
                        description: >-
                          Intento más rápido en milisegundos, o `null` cuando
                          ningún intento tiene un tiempo registrado.
                      avg_response_time_ms:
                        type: integer
                        nullable: true
                        description: >-
                          Tiempo medio por intento en milisegundos, redondeado,
                          o `null` cuando ningún intento tiene un tiempo
                          registrado.
                      max_response_time_ms:
                        type: integer
                        nullable: true
                        description: >-
                          Intento más lento en milisegundos, o `null` cuando
                          ningún intento tiene un tiempo registrado.
                      error_rate_percentage:
                        type: integer
                        minimum: 0
                        maximum: 100
                        description: >-
                          `failed_deliveries` / `total_deliveries` x 100,
                          redondeado a un número entero. `0` cuando no hay
                          entregas.
                  points:
                    type: array
                    description: >-
                      Una entrada por cada día UTC con entregas, de la más
                      antigua a la más reciente. Los días sin entregas se
                      omiten, así que rellena los huecos con ceros al
                      representarlos en un gráfico.
                    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: Día UTC, `YYYY-MM-DD`.
                        total_deliveries:
                          type: integer
                          minimum: 0
                          description: >-
                            Intentos de entrega, incluidos los que están en
                            cola.
                        failed_deliveries:
                          type: integer
                          minimum: 0
                          description: >-
                            Intentos cuyo estado HTTP registrado es 400 o
                            superior.
                        min_response_time_ms:
                          type: integer
                          nullable: true
                          description: >-
                            Intento más rápido en milisegundos, o `null` cuando
                            ningún intento tiene un tiempo registrado.
                        avg_response_time_ms:
                          type: integer
                          nullable: true
                          description: >-
                            Tiempo medio por intento en milisegundos,
                            redondeado, o `null` cuando ningún intento tiene un
                            tiempo registrado.
                        max_response_time_ms:
                          type: integer
                          nullable: true
                          description: >-
                            Intento más lento en milisegundos, o `null` cuando
                            ningún intento tiene un tiempo registrado.
              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` o `date_to` no es una fecha `YYYY-MM-DD`, o `date_to` es
            anterior a `date_from`.
          content:
            application/json:
              schema:
                type: object
                description: Cada campo no válido asociado a una lista de mensajes.
                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 clave de API ha expirado: se creó con una fecha de caducidad que
            ya pasó. Una clave incorrecta o revocada también recibe `401`; si
            falta la clave, se recibe `403`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Mensaje de error legible.
              examples:
                Expired key:
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            La solicitud no está permitida. Si falta `x-api-key`, o no es válida
            o está revocada, se recibe `You do not have permission to perform
            this action.` Una clave con alcance limitado sin el acceso que
            necesita este endpoint recibe un mensaje que indica el acceso que
            falta, y una clave usada desde fuera de su lista de IP permitidas
            recibe `This API key can't be used from this IP address.`
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Mensaje de error legible.
              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: >-
            No existe ningún destino con este UUID para la aplicación, o se ha
            eliminado.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Mensaje de error legible.
              examples:
                Destination not found:
                  value:
                    detail: Webhook destination not found.
        '429':
          description: >-
            Límite de solicitudes superado: más de 600 solicitudes GET en la
            ventana actual de un minuto para esta clave de API. Espera
            `Retry-After` segundos antes de reintentar.
          headers:
            Retry-After:
              description: Segundos que hay que esperar antes de reintentar.
              schema:
                type: integer
                minimum: 1
                example: 30
            X-RateLimit-Limit:
              description: Solicitudes permitidas en la ventana de un minuto (600).
              schema:
                type: integer
                example: 600
            X-RateLimit-Remaining:
              description: Solicitudes restantes en la ventana actual.
              schema:
                type: integer
                example: 0
            X-RateLimit-Reset:
              description: Tiempo Unix (segundos) en que se restablece la ventana actual.
              schema:
                type: integer
                example: 1792056120
            X-RateLimit-Scope:
              description: Nombre del presupuesto que se superó.
              schema:
                type: string
                example: generic-get
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Mensaje de error legible.
              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 clave de API de tu aplicación, que encontrarás en Developers -> API
        keys en la Business Console. La clave principal tiene acceso completo.
        Una clave con nombre puede tener un alcance limitado: ninguno, lectura o
        escritura por recurso, limitada a algunos flujos o a sesiones aprobadas,
        a una lista de direcciones IP y a una fecha de caducidad. 401 significa
        que la clave es incorrecta, se revocó o expiró; 403 significa que no se
        envió ninguna clave, que la clave no tiene acceso a este recurso o
        acción, o que la solicitud provino de una dirección fuera de su lista de
        IP; 404 en una ruta de sesión significa que la sesión está fuera de los
        flujos o estados de la clave. Una clave sin acceso a contenido
        multimedia recibe las URL de imágenes, videos y PDF como null, y una
        clave sin permiso de escritura en sesiones recibe los enlaces y tokens
        de sesión como null. Consulta https://docs.didit.me/console/api-keys.

````

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