> ## 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ítica de aplicaciones

> Obtén con la API de Didit la analítica de tu aplicación por fechas: sesiones KYC, conversión, embudos y widgets de KYB y transacciones.



Prompt de la API para obtener las analíticas de la aplicación
        Copiar el prompt al portapapeles



      
      

\<pre>

\`Read the verification analytics of my Didit application for a date range.

Endpoint:
GET https://verification.didit.me/v3/organization/{organization_id}/application/{application_id}/analytics/

Authentication:
Use the x-api-key header with my Didit API key. Only a full-access key works: any scoped key gets 403 "This API key has no access to this endpoint.". application_id must be the application the key belongs to.

Goal:
\- Pull KYC session totals, conversion rate and breakdowns into my own reporting, or fetch the same KYB and transaction widgets the Business Console dashboard shows.

Query parameters:
\- start_date, end_date - YYYY-MM-DD, inclusive, UTC. Send both or neither; without both the range runs from 30 days ago through today. A future end_date counts as today. At most 730 days.
\- scope - "kyc", "kyb", "transactions" or "home". Omit it for the KYC summary.
\- widget_keys - comma-separated widget keys, in order. Unknown keys are dropped; with none left you get the scope's defaults.
\- workflow_ids - comma-separated workflow IDs, limits KYC and KYB numbers. versions and branch_path_ids apply only together with workflow_ids (branch_path_ids to KYC numbers only; only the default branch path has figures, so any other value returns empty figures).
\- tag, transaction_type, action_type - filters for transaction widgets only.

Behavior:
\- Without scope and widget_keys the response is the KYC summary: data_points (one per day), request_breakdown, conversion_rate, previous_data_points and previous_request_breakdown for the period of equal length before start_date, location_stats, demographic_stats, device_details, workflow_funnel_stats, verification_time_stats, resubmission_stats, warning_stats, original_status_stats and time series grouped by grouping_mode ("day" up to 14 days, "week" up to 90, "month" beyond). data_points and the grouping span start at the first day with sessions inside the range, not at start_date.
\- With scope (or widget_keys) the response is {scope, available_widget_keys, requested_widget_keys, widgets}; widgets is keyed by widget key and each widget has kind, title and the fields of its kind.
\- Invalid workflow IDs and versions are ignored rather than rejected.
\- Counts come from daily rollups refreshed in the background, so the newest activity can take a short while to appear.

Example call:
curl -X GET "https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/analytics/?start_date=2026-10-01&end_date=2026-10-15" \
-H "x-api-key: YOUR_API_KEY"

What to read from the response:
\- request_breakdown.total_approved, total_declined, total_in_review - status totals for the range.
\- conversion_rate - approved / (approved + declined + in review) x 100; null when nothing finished.
\- workflow_funnel_stats.<workflow_id>.steps.<STEP>.reached - sessions that reached each step.
\- widgets.<widget_key> - with scope, the widget payloads.

Failure modes:
\- 400 - {"start_date": "Invalid date format. Use YYYY-MM-DD (e.g., 2024-01-15)."}, {"start_date": "Start date must be before or equal to end date."}, {"date_range": "Date range cannot exceed 730 days (2 years)."} or {"scope": "Unsupported analytics scope."}.
\- 401 - the API key has expired.
\- 403 - missing key (a wrong, revoked or expired key gets 401) ({"detail": "Authentication credentials were not provided or are invalid."}), a key of another application ({"detail": "You do not have permission to perform this action."}), any scoped key, or a request from outside the key's IP list.
\- 429 - more than 600 GET requests per minute with this key.

Side effects: none. Not billed.

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

\</pre>



      
      

Pegar en

El endpoint devuelve las cifras que hay detrás del [panel de analíticas](https://docs.didit.me/es/console/analytics.md) de la Business Console. Tiene dos formas de respuesta:| Lo que envías | Lo que obtienes |
| - | - |
| Ni `scope` ni `widget_keys` | El resumen de verificación de usuarios (KYC) del intervalo |
| `scope`, `widget_keys` o ambos | Los widgets del panel de una pestaña: `kyc`, `kyb`, `transactions` o `home` (cualquier combinación de los tres) |Cada widget incluye un `kind` y un `title`; el resto de sus campos depende del tipo. Envía `scope` sin `widget_keys` una vez para leer `available_widget_keys` y, después, solicita solo los widgets que necesites.> [!NOTE]
>
> Solo una clave de API con acceso completo puede invocar este endpoint. Una clave con acceso limitado recibe `403` independientemente de los permisos que tenga, y lo mismo ocurre con una clave de otra aplicación. Consulta [claves de API](https://docs.didit.me/es/console/api-keys.md).## Contenido relacionado- [Obtener las verificaciones de hoy por hora](https://docs.didit.me/es/management-api/analytics/today-by-hour.md)
- [Panel de análisis](https://docs.didit.me/es/console/analytics.md)
- [Claves de API y acceso con ámbito limitado](https://docs.didit.me/es/console/api-keys.md)


## OpenAPI

````yaml es/openapi-25.json GET /v3/organization/{organization_id}/application/{application_id}/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/organization/{organization_id}/application/{application_id}/analytics/:
    get:
      tags:
        - Analytics
      summary: Obtener las analíticas de la aplicación
      description: >-
        Lee las cifras del [panel de
        analíticas](https://docs.didit.me/es/console/analytics) de la Business
        Console para un rango de fechas. Sin `scope` ni `widget_keys`, la
        respuesta es el resumen de verificación de usuarios (KYC)
        (`ApplicationAnalyticsSummary`): número diario de sesiones, totales por
        estado, tasa de conversión, las mismas cifras para el periodo anterior
        de igual duración, ubicaciones, datos demográficos, dispositivos,
        embudos de los flujos, tiempo activo de verificación, reenvíos,
        advertencias y series temporales. Con `scope` o `widget_keys`, la
        respuesta son los widgets de una pestaña del panel
        (`ApplicationAnalyticsWidgetResponse`): `kyc`, `kyb`, `transactions` o
        `home`.


        Las sesiones se cuentan según su fecha de creación (UTC) y reflejan el
        estado actual de cada sesión. Proceden de agregados diarios que se
        actualizan en segundo plano, por lo que la actividad más reciente puede
        tardar un poco en aparecer. Los IDs y las versiones de flujo no válidos
        se ignoran en lugar de rechazarse. No se factura nada.


        Solo una clave de API con acceso completo puede llamar a este endpoint:
        cualquier clave con alcance limitado recibe `403`, sea cual sea el
        acceso que tenga, y lo mismo ocurre con una clave de otra aplicación.
        Consulta [Claves de API](https://docs.didit.me/es/console/api-keys).
      operationId: get_application_analytics
      parameters:
        - name: organization_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: UUID de la organización.
          example: 11111111-2222-3333-4444-555555555555
        - name: application_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: >-
            UUID de la aplicación. Debe ser la aplicación a la que pertenece la
            clave de API: una clave usada en cualquier otra aplicación recibe
            `403`.
          example: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
        - name: start_date
          in: query
          required: false
          schema:
            type: string
            format: date
            example: '2026-10-01'
          description: >-
            Primer día del rango, `YYYY-MM-DD`, inclusive (UTC). Envíalo junto
            con `end_date`: si falta cualquiera de los dos, se ignoran ambos y
            el rango va desde 30 días antes de hoy hasta hoy.
        - name: end_date
          in: query
          required: false
          schema:
            type: string
            format: date
            example: '2026-10-15'
          description: >-
            Último día del rango, `YYYY-MM-DD`, inclusive (UTC). Una fecha
            futura cuenta como hoy. El rango no puede superar los 730 días.
        - name: scope
          in: query
          required: false
          schema:
            type: string
            enum:
              - home
              - kyc
              - kyb
              - transactions
          description: >-
            Pestaña del panel cuyos widgets se devuelven (no distingue
            mayúsculas de minúsculas). Omítela, junto con `widget_keys`, para
            obtener el resumen de KYC. Enviar solo `widget_keys` implica `kyc`.
            `home` acepta cualquier widget de KYC, KYB o transacciones y, por
            defecto, usa el diseño de inicio guardado de la aplicación.
        - name: widget_keys
          in: query
          required: false
          schema:
            type: string
            example: tx_count_total,tx_count_daily
          description: >-
            Claves de widgets separadas por comas, que se devuelven en este
            orden. Las claves que el ámbito no acepta se descartan; si no queda
            ninguna, recibes los valores predeterminados del ámbito. KYC:
            `kyc_sessions_volume`, `kyc_warning_insights`, `kyc_id_locations`,
            `kyc_ip_locations`, `kyc_workflow_funnel`,
            `kyc_average_verification_time`, `kyc_conversion_rate`,
            `kyc_conversion_by_country`, `kyc_resubmission_insights`,
            `kyc_original_status_distribution`,
            `kyc_database_validation_coverage`,
            `kyc_database_validation_latency`, `kyc_demographics`,
            `kyc_device_details`. KYB: `kyb_sessions_volume`,
            `kyb_workflow_funnel`, `kyb_average_verification_time`,
            `kyb_ip_locations`, `kyb_business_country_distribution`,
            `kyb_warning_insights`, `kyb_conversion_rate`,
            `kyb_conversion_by_country`, `kyb_industry_breakdown`,
            `kyb_resubmission_insights`, `kyb_original_status_distribution`,
            `kyb_registry_coverage`, `kyb_registry_data_completeness`,
            `kyb_device_details`. Transacciones: `tx_count_total`,
            `tx_count_daily`, `tx_volume_total_preferred_currency`,
            `tx_volume_daily_preferred_currency`, `tx_average_amount`,
            `tx_average_amount_daily`, `tx_transaction_category_breakdown`,
            `tx_action_type_breakdown`, `tx_status_volume_trend`,
            `tx_user_ip_or_country_distribution`, `tx_tag_breakdown`,
            `tx_top_rules_triggered`, `tx_team_member_performance`,
            `tx_score_histogram`.
        - name: workflow_ids
          in: query
          required: false
          schema:
            type: string
            example: 33333333-4444-5555-6666-777777777777
          description: >-
            IDs de flujos separados por comas. Limita el resumen de KYC y los
            widgets de KYC y KYB a esos flujos. Los valores que no son UUID se
            ignoran; si ninguno es válido, se descarta el filtro. El resumen
            también acepta `workflow_id`.
        - name: versions
          in: query
          required: false
          schema:
            type: string
            example: 3,4
          description: >-
            Números de versión de flujo separados por comas. Solo se aplica
            junto con `workflow_ids`; los valores que no son números enteros se
            ignoran. También se acepta `version` como alias.
        - name: branch_path_ids
          in: query
          required: false
          schema:
            type: string
            example: default
          description: >-
            IDs de rutas de rama separados por comas. Solo se aplica junto con
            `workflow_ids` y solo a las cifras de KYC. Actualmente las cifras
            solo se registran para `default` (todas las rutas combinadas), por
            lo que cualquier otro valor devuelve cifras vacías. Se acepta
            `branch_path_id` como alias.
        - name: tag
          in: query
          required: false
          schema:
            type: string
          description: >-
            Solo widgets de transacciones: UUID o nombres de etiquetas separados
            por comas.
        - name: transaction_type
          in: query
          required: false
          schema:
            type: string
            example: finance
          description: >-
            Solo widgets de transacciones: categorías de transacción separadas
            por comas.
        - name: action_type
          in: query
          required: false
          schema:
            type: string
            example: withdrawal
          description: >-
            Solo widgets de transacciones: tipos de acción separados por comas
            (sin distinguir mayúsculas de minúsculas).
      responses:
        '200':
          description: >-
            El resumen de KYC, o los widgets solicitados cuando se envía `scope`
            o `widget_keys`.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/ApplicationAnalyticsSummary'
                  - $ref: '#/components/schemas/ApplicationAnalyticsWidgetResponse'
              examples:
                KYC summary:
                  value:
                    grouping_mode: day
                    data_points:
                      - rounded_date: '2026-10-14'
                        total: 12
                        approved: 8
                        declined: 1
                        canceled: 1
                        pending: 2
                        in_review: 1
                        expired: 1
                        abandoned: 0
                        in_progress: 1
                        not_started: 0
                        manually_approved: 1
                        manually_declined: 0
                      - rounded_date: '2026-10-15'
                        total: 10
                        approved: 6
                        declined: 2
                        canceled: 0
                        pending: 2
                        in_review: 2
                        expired: 0
                        abandoned: 0
                        in_progress: 0
                        not_started: 0
                        manually_approved: 0
                        manually_declined: 1
                    request_breakdown:
                      total_approved: 14
                      total_in_review: 3
                      total_declined: 3
                      total_canceled: 1
                      total_pending: 4
                      total_expired: 1
                      total_abandoned: 0
                      total_in_progress: 1
                      total_not_started: 0
                      total_manually_approved: 1
                      total_manually_declined: 1
                    conversion_rate: 70
                    location_stats:
                      countries:
                        - session_count: 15
                          country: Spain
                          country_code: ES
                        - session_count: 7
                          country: Portugal
                          country_code: PT
                      ip_countries:
                        - session_count: 15
                          country: Spain
                          country_code: ES
                        - session_count: 7
                          country: Portugal
                          country_code: PT
                      id_countries:
                        - country: Spain
                          country_code: ES
                          session_count: 14
                        - country: Portugal
                          country_code: PT
                          session_count: 6
                      conversion_by_country:
                        - country: Spain
                          country_code: ES
                          finished: 13
                          approved: 10
                        - country: Portugal
                          country_code: PT
                          finished: 6
                          approved: 4
                      cities:
                        - session_count: 9
                          location: Madrid, Spain
                          latitude: 40.4168
                          longitude: -3.7038
                    demographic_stats:
                      age_distribution:
                        under_18: 0
                        18_24: 5
                        25_34: 8
                        35_44: 4
                        45_64: 2
                        65_plus: 1
                      gender_distribution:
                        M: 11
                        F: 9
                    device_details:
                      device_models:
                        - device: Apple
                          count: 12
                        - device: Android
                          count: 10
                      browsers:
                        - browser: Safari
                          count: 12
                        - browser: Chrome
                          count: 10
                      operating_systems:
                        - os: iOS
                          count: 12
                        - os: Android
                          count: 10
                    workflow_funnel_stats:
                      33333333-4444-5555-6666-777777777777:
                        total: 22
                        steps:
                          OCR:
                            reached: 21
                          LIVENESS:
                            reached: 19
                          FACE_MATCH:
                            reached: 19
                          AML:
                            reached: 18
                    verification_time_stats:
                      overall_avg_seconds: 64
                      overall_count: 18
                      per_feature:
                        OCR:
                          avg_seconds: 41.2
                          total_seconds: 741.6
                          count: 18
                        LIVENESS:
                          avg_seconds: 22.8
                          total_seconds: 410.4
                          count: 18
                      per_sub_step:
                        OCR:
                          front_id_photo:
                            avg_seconds: 18.3
                            total_seconds: 329.4
                            count: 18
                    resubmission_stats:
                      first_pass: 17
                      second: 2
                      third_plus: 1
                      abandoned: 0
                    warning_stats:
                      ID_VERIFICATION:
                        total: 21
                        risks:
                          DOCUMENT_EXPIRED:
                            error: 1
                            warning: 0
                            information: 0
                      LIVENESS:
                        total: 19
                        risks:
                          LOW_LIVENESS_SCORE:
                            error: 0
                            warning: 2
                            information: 0
                    original_status_stats:
                      approved: 13
                      in_review: 5
                      declined: 2
                    demographic_time_series:
                      - date: '2026-10-14'
                        age_distribution:
                          under_18: 0
                          18_24: 3
                          25_34: 4
                          35_44: 2
                          45_64: 1
                          65_plus: 0
                        gender_distribution:
                          M: 6
                          F: 4
                      - date: '2026-10-15'
                        age_distribution:
                          under_18: 0
                          18_24: 2
                          25_34: 4
                          35_44: 2
                          45_64: 1
                          65_plus: 1
                        gender_distribution:
                          M: 5
                          F: 5
                    device_time_series:
                      - date: '2026-10-14'
                        devices:
                          Apple: 7
                          Android: 5
                        browsers:
                          Safari: 7
                          Chrome: 5
                        operating_systems:
                          iOS: 7
                          Android: 5
                      - date: '2026-10-15'
                        devices:
                          Apple: 5
                          Android: 5
                        browsers:
                          Safari: 5
                          Chrome: 5
                        operating_systems:
                          iOS: 5
                          Android: 5
                    verification_time_time_series:
                      - date: '2026-10-14'
                        overall_avg: 66.1
                        per_feature:
                          OCR: 42
                          LIVENESS: 24.1
                      - date: '2026-10-15'
                        overall_avg: 61.5
                        per_feature:
                          OCR: 40.2
                          LIVENESS: 21.3
                    resubmission_time_series:
                      - date: '2026-10-14'
                        first_pass: 9
                        second: 1
                        third_plus: 0
                        abandoned: 0
                      - date: '2026-10-15'
                        first_pass: 8
                        second: 1
                        third_plus: 1
                        abandoned: 0
                    original_status_time_series:
                      - date: '2026-10-14'
                        approved: 7
                        in_review: 3
                        declined: 1
                      - date: '2026-10-15'
                        approved: 6
                        in_review: 2
                        declined: 1
                    previous_data_points:
                      - rounded_date: '2026-10-12'
                        total: 9
                        approved: 6
                        declined: 1
                        canceled: 1
                        pending: 1
                      - rounded_date: '2026-10-13'
                        total: 11
                        approved: 7
                        declined: 2
                        canceled: 0
                        pending: 2
                    previous_request_breakdown:
                      total_approved: 13
                      total_in_review: 2
                      total_declined: 3
                      total_canceled: 1
                      total_pending: 3
                Transaction widgets:
                  value:
                    scope: transactions
                    available_widget_keys:
                      - tx_count_total
                      - tx_count_daily
                      - tx_volume_total_preferred_currency
                      - tx_volume_daily_preferred_currency
                      - tx_average_amount
                      - tx_average_amount_daily
                      - tx_transaction_category_breakdown
                      - tx_action_type_breakdown
                      - tx_status_volume_trend
                      - tx_user_ip_or_country_distribution
                      - tx_tag_breakdown
                      - tx_top_rules_triggered
                      - tx_team_member_performance
                      - tx_score_histogram
                    requested_widget_keys:
                      - tx_count_total
                      - tx_count_daily
                    widgets:
                      tx_count_total:
                        kind: metric
                        title: Transaction count
                        value: 42
                      tx_count_daily:
                        kind: time_series
                        title: Transaction count
                        items:
                          - date: '2026-10-14'
                            value: 20
                          - date: '2026-10-15'
                            value: 22
                        previous_items:
                          - date: '2026-10-12'
                            value: 18
                          - date: '2026-10-13'
                            value: 15
        '400':
          description: >-
            Rango de fechas o alcance no válido. El cuerpo es un objeto cuyas
            claves son los parámetros erróneos, con un mensaje de texto.
          content:
            application/json:
              schema:
                type: object
                additionalProperties:
                  type: string
              examples:
                Bad date format:
                  value:
                    start_date: Invalid date format. Use YYYY-MM-DD (e.g., 2024-01-15).
                Start after end:
                  value:
                    start_date: Start date must be before or equal to end date.
                Range too long:
                  value:
                    date_range: Date range cannot exceed 730 days (2 years).
                Unknown scope:
                  value:
                    scope: Unsupported analytics scope.
        '401':
          description: >-
            La clave de API ha expirado. Solo puede expirar una clave creada con
            fecha de caducidad; a partir de esa fecha, toda solicitud que la use
            responde `401`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              examples:
                Expired key:
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            La solicitud no está permitida. Lee `detail`: falta la clave de API
            (una clave incorrecta, revocada o expirada recibe `401`), la clave
            es de otra aplicación, es cualquier clave con alcance limitado, o la
            solicitud llega desde fuera de la lista de IP de la clave.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              examples:
                Missing or invalid key:
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Another application:
                  value:
                    detail: You do not have permission to perform this action.
                Scoped key:
                  value:
                    detail: This API key has no access to this endpoint.
                Outside the key's IP list:
                  value:
                    detail: This API key can't be used from this IP address.
        '429':
          description: >-
            Más de 600 solicitudes GET por minuto con esta clave de API. Espera
            el número de segundos indicado en `Retry-After` y vuelve a
            intentarlo.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              examples:
                Throttled:
                  value:
                    detail: >-
                      GET request rate limit exceeded. You can make up to 600
                      requests per minute.
          headers:
            Retry-After:
              description: Segundos hasta que se reinicia la ventana actual de un minuto.
              schema:
                type: integer
                example: 23
            X-RateLimit-Limit:
              description: Solicitudes permitidas por minuto en este presupuesto.
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: Solicitudes restantes en la ventana actual.
              schema:
                type: integer
            X-RateLimit-Reset:
              description: Tiempo Unix en que se restablece la ventana.
              schema:
                type: integer
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X GET
            'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/analytics/?start_date=2026-10-01&end_date=2026-10-15'
            \
              -H 'x-api-key: YOUR_API_KEY'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID
            # and DIDIT_APPLICATION_ID.
            client = Didit()

            result = client.analytics.retrieve()
            print(result)
        - lang: javascript
          label: Node.js
          source: |-
            import Didit from "@didit-protocol/sdk-node";

            // Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID
            // and DIDIT_APPLICATION_ID.
            const didit = new Didit();

            const result = await didit.analytics.retrieve();
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\nresult, err := client.Analytics.Retrieve(ctx, didit.AnalyticsRetrieveParams{})\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_ORGANIZATION_ID
            // and DIDIT_APPLICATION_ID.
            Didit client = new Didit();

            var result = client.analytics().retrieve();
            System.out.println(result);
        - lang: php
          label: PHP
          source: |-
            <?php

            require 'vendor/autoload.php';

            use Didit\DiditClient;

            // Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID
            // and DIDIT_APPLICATION_ID.
            $didit = new DiditClient();

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

            # Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID
            # and DIDIT_APPLICATION_ID.
            didit = Didit::Client.new

            result = didit.analytics.retrieve
            puts result.to_h
        - lang: csharp
          label: .NET
          source: |-
            using System;
            using System.Text.Json;
            using Didit;

            // Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID
            // and DIDIT_APPLICATION_ID.
            using var client = new DiditClient();

            var result = await client.Analytics.RetrieveAsync();
            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    ApplicationAnalyticsSummary:
      type: object
      description: >-
        Resumen de verificación de usuarios (KYC), que se devuelve cuando no se
        envía ni `scope` ni `widget_keys`.
      required:
        - data_points
        - request_breakdown
        - previous_data_points
        - previous_request_breakdown
        - conversion_rate
        - location_stats
        - demographic_stats
        - device_details
        - workflow_funnel_stats
        - verification_time_stats
        - resubmission_stats
        - warning_stats
        - original_status_stats
        - grouping_mode
        - demographic_time_series
        - device_time_series
        - verification_time_time_series
        - resubmission_time_series
        - original_status_time_series
      properties:
        data_points:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsDataPoint'
          description: >-
            Un punto por día, desde el primer día con sesiones dentro del rango
            hasta `end_date`. Siempre diario, independientemente de lo que
            indique `grouping_mode`.
        request_breakdown:
          $ref: '#/components/schemas/ApplicationAnalyticsRequestBreakdown'
        previous_data_points:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsDataPoint'
          description: >-
            Puntos diarios del período de la misma duración inmediatamente
            anterior a `start_date`.
        previous_request_breakdown:
          $ref: '#/components/schemas/ApplicationAnalyticsRequestBreakdown'
        conversion_rate:
          type: number
          nullable: true
          description: >-
            `total_approved / (total_approved + total_declined +
            total_in_review) x 100`, con un decimal. `null` cuando no ha
            finalizado nada.
        location_stats:
          $ref: '#/components/schemas/ApplicationAnalyticsLocationStats'
        demographic_stats:
          $ref: '#/components/schemas/ApplicationAnalyticsDemographicStats'
        device_details:
          $ref: '#/components/schemas/ApplicationAnalyticsDeviceDetails'
        workflow_funnel_stats:
          $ref: '#/components/schemas/ApplicationAnalyticsWorkflowFunnel'
        verification_time_stats:
          $ref: '#/components/schemas/ApplicationAnalyticsVerificationTimeStats'
        resubmission_stats:
          $ref: '#/components/schemas/ApplicationAnalyticsResubmissionStats'
        warning_stats:
          $ref: '#/components/schemas/ApplicationAnalyticsWarningStats'
        original_status_stats:
          $ref: '#/components/schemas/ApplicationAnalyticsOriginalStatusStats'
        grouping_mode:
          type: string
          enum:
            - day
            - week
            - month
          description: >-
            Cómo se agrupan las listas `*_time_series`: `day` hasta 14 días,
            `week` hasta 90 y `month` a partir de ahí. Se mide desde el primer
            día con sesiones en el rango.
        demographic_time_series:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsDemographicPoint'
        device_time_series:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsDevicePoint'
        verification_time_time_series:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsVerificationTimePoint'
        resubmission_time_series:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsResubmissionPoint'
        original_status_time_series:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsOriginalStatusPoint'
    ApplicationAnalyticsWidgetResponse:
      type: object
      description: >-
        Widgets del panel, que se devuelven cuando se envía `scope` o
        `widget_keys`.
      required:
        - scope
        - available_widget_keys
        - requested_widget_keys
        - widgets
      properties:
        scope:
          type: string
          enum:
            - home
            - kyc
            - kyb
            - transactions
          description: Pestaña del panel.
        available_widget_keys:
          type: array
          items:
            type: string
          description: Todas las claves de widget que acepta este ámbito.
        requested_widget_keys:
          type: array
          items:
            type: string
          description: >-
            Las claves del widget respondidas, en orden: tus `widget_keys`
            válidas o los valores predeterminados del ámbito.
        widgets:
          type: object
          description: >-
            Indexado por clave de widget, en el orden de
            `requested_widget_keys`.
          additionalProperties:
            $ref: '#/components/schemas/ApplicationAnalyticsWidget'
    ApplicationAnalyticsDataPoint:
      type: object
      description: >-
        Recuento de sesiones de un día, por fecha de creación (UTC). Cada
        recuento refleja el estado actual de la sesión. Los puntos del período
        anterior incluyen al menos los campos obligatorios.
      required:
        - rounded_date
        - total
        - approved
        - declined
        - canceled
        - pending
      properties:
        rounded_date:
          type: string
          format: date
          description: El día, `YYYY-MM-DD`.
        total:
          type: integer
          description: Sesiones creadas ese día.
        approved:
          type: integer
          description: De ellas, las sesiones `Approved` o `Kyc Expired`.
        declined:
          type: integer
          description: Sesiones `Declined`.
        canceled:
          type: integer
          description: Sesiones `Expired` o `Abandoned`.
        pending:
          type: integer
          description: Sesiones `Not Started`, `In Progress` o `In Review`.
        in_review:
          type: integer
          description: Sesiones `In Review`.
        expired:
          type: integer
          description: Sesiones `Expired`.
        abandoned:
          type: integer
          description: Sesiones `Abandoned`.
        in_progress:
          type: integer
          description: Sesiones `In Progress`.
        not_started:
          type: integer
          description: Sesiones `Not Started`.
        manually_approved:
          type: integer
          description: >-
            Sesiones que un revisor aprobó después de que el flujo diera otro
            veredicto.
        manually_declined:
          type: integer
          description: >-
            Sesiones que un revisor rechazó después de que el flujo diera otro
            veredicto.
    ApplicationAnalyticsRequestBreakdown:
      type: object
      description: >-
        Totales por estado para el rango. El desglose del período anterior
        incluye al menos los campos obligatorios.
      required:
        - total_approved
        - total_in_review
        - total_declined
        - total_canceled
        - total_pending
      properties:
        total_approved:
          type: integer
          description: Sesiones `Approved` o `Kyc Expired`.
        total_in_review:
          type: integer
          description: Sesiones `In Review`.
        total_declined:
          type: integer
          description: Sesiones `Declined`.
        total_canceled:
          type: integer
          description: Sesiones `Expired` o `Abandoned`.
        total_pending:
          type: integer
          description: >-
            Sesiones `Not Started`, `In Progress` o `In Review` (incluye
            `total_in_review`).
        total_expired:
          type: integer
          description: Sesiones `Expired`.
        total_abandoned:
          type: integer
          description: Sesiones `Abandoned`.
        total_in_progress:
          type: integer
          description: Sesiones `In Progress`.
        total_not_started:
          type: integer
          description: Sesiones `Not Started`.
        total_manually_approved:
          type: integer
          description: Aprobado por un revisor.
        total_manually_declined:
          type: integer
          description: Rechazado por un revisor.
    ApplicationAnalyticsLocationStats:
      type: object
      properties:
        ip_countries:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsCountryCount'
          description: >-
            Países de las direcciones IP de los usuarios, ordenados de más a
            menos sesiones.
        countries:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsCountryCount'
          description: La misma lista que `ip_countries`.
        id_countries:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsCountryCount'
          description: >-
            Países emisores de los documentos de identidad verificados,
            ordenados de más a menos sesiones.
        conversion_by_country:
          type: array
          description: >-
            Por país emisor del documento: sesiones finalizadas (aprobadas,
            rechazadas o en revisión) y cuántas se aprobaron. Primero, los que
            tienen más sesiones finalizadas.
          items:
            type: object
            properties:
              country:
                type: string
              country_code:
                type: string
              finished:
                type: integer
              approved:
                type: integer
        cities:
          type: array
          description: Hasta 100 ciudades de IP, empezando por las que tienen más sesiones.
          items:
            type: object
            properties:
              location:
                type: string
                description: '`City, Country`.'
              session_count:
                type: integer
              latitude:
                type: number
                nullable: true
              longitude:
                type: number
                nullable: true
    ApplicationAnalyticsDemographicStats:
      type: object
      properties:
        age_distribution:
          type: object
          description: >-
            Sesiones por franja de edad según el documento de identidad. Vacío
            cuando no hay datos.
          properties:
            under_18:
              type: integer
            18_24:
              type: integer
            25_34:
              type: integer
            35_44:
              type: integer
            45_64:
              type: integer
            65_plus:
              type: integer
          additionalProperties:
            type: integer
        gender_distribution:
          type: object
          description: >-
            Sesiones por código de género del documento: `M`, `F` o `U`
            (desconocido).
          additionalProperties:
            type: integer
    ApplicationAnalyticsDeviceDetails:
      type: object
      description: Los cinco primeros de cada uno, ordenados de más a menos sesiones.
      properties:
        device_models:
          type: array
          description: >-
            Marcas de dispositivo: `Apple`, `Android` y `LG`. Todas las demás se
            agrupan como `Other`.
          items:
            type: object
            properties:
              device:
                type: string
              count:
                type: integer
        browsers:
          type: array
          description: >-
            Navegadores: `Chrome`, `Safari`, `Didit App`, `Firefox`; todos los
            demás se agrupan como `Other`.
          items:
            type: object
            properties:
              browser:
                type: string
              count:
                type: integer
        operating_systems:
          type: array
          description: Sistemas operativos.
          items:
            type: object
            properties:
              os:
                type: string
              count:
                type: integer
    ApplicationAnalyticsWorkflowFunnel:
      type: object
      description: >-
        Indexado por ID de flujo. `total` son las sesiones iniciadas en ese
        flujo; `steps` cuenta las sesiones que llegaron a cada paso (`OCR`,
        `LIVENESS`, `FACE_MATCH`, `AML`, `POA`, `PHONE`, `EMAIL`, `NFC`,
        `DATABASE_VALIDATION`, `QUESTIONNAIRE`, `IP_ANALYSIS`, `AGE_ESTIMATION`,
        `KYB_REGISTRY`, `KYB_DOCUMENTS`, `KYB_KEY_PEOPLE`). Llegar a un paso no
        significa superarlo.
      additionalProperties:
        type: object
        properties:
          total:
            type: integer
          steps:
            type: object
            additionalProperties:
              type: object
              properties:
                reached:
                  type: integer
    ApplicationAnalyticsVerificationTimeStats:
      type: object
      description: >-
        Tiempo activo que los usuarios dedicaron a verificarse, sin contar los
        periodos de inactividad. Un objeto vacío cuando no hay datos.
      properties:
        overall_avg_seconds:
          type: number
          description: Promedio por sesión, con un decimal.
        overall_count:
          type: integer
          description: Sesiones medidas.
        per_feature:
          type: object
          description: Indexado por función, por ejemplo `OCR` o `LIVENESS`.
          additionalProperties:
            type: object
            properties:
              avg_seconds:
                type: number
              total_seconds:
                type: number
              count:
                type: integer
        per_sub_step:
          type: object
          description: >-
            Indexado por función y luego por subpaso, por ejemplo
            `front_id_photo`.
          additionalProperties:
            type: object
            additionalProperties:
              type: object
              properties:
                avg_seconds:
                  type: number
                total_seconds:
                  type: number
                count:
                  type: integer
    ApplicationAnalyticsResubmissionStats:
      type: object
      properties:
        first_pass:
          type: integer
          description: Sesiones finalizadas sin reenvíos.
        second:
          type: integer
          description: Sesiones finalizadas que se reenviaron una vez.
        third_plus:
          type: integer
          description: Sesiones finalizadas que se reenviaron dos o más veces.
        abandoned:
          type: integer
          description: Sesiones abandonadas.
    ApplicationAnalyticsWarningStats:
      type: object
      description: >-
        Indexado por función (`ID_VERIFICATION`, `LIVENESS`, `FACEMATCH`, `AML`,
        `PROOF_OF_ADDRESS`, `PHONE`, `EMAIL`, `NFC`, `LOCATION`,
        `DATABASE_VALIDATION`, `QUESTIONNAIRE` y las funciones KYB). `total` son
        las sesiones que llegaron a la función; `risks` cuenta las sesiones por
        código y nivel de advertencia.
      additionalProperties:
        type: object
        properties:
          total:
            type: integer
          risks:
            type: object
            additionalProperties:
              type: object
              properties:
                error:
                  type: integer
                warning:
                  type: integer
                information:
                  type: integer
    ApplicationAnalyticsOriginalStatusStats:
      type: object
      description: El veredicto automático del flujo, antes de que un revisor lo cambiara.
      properties:
        approved:
          type: integer
        in_review:
          type: integer
        declined:
          type: integer
    ApplicationAnalyticsDemographicPoint:
      type: object
      properties:
        date:
          type: string
          description: >-
            Clave del período: `YYYY-MM-DD` para un día o para el lunes de una
            semana, o `YYYY-MM` para un mes, según `grouping_mode`.
        age_distribution:
          type: object
          additionalProperties:
            type: integer
        gender_distribution:
          type: object
          additionalProperties:
            type: integer
    ApplicationAnalyticsDevicePoint:
      type: object
      properties:
        date:
          type: string
          description: >-
            Clave del período: `YYYY-MM-DD` para un día o para el lunes de una
            semana, o `YYYY-MM` para un mes, según `grouping_mode`.
        devices:
          type: object
          additionalProperties:
            type: integer
        browsers:
          type: object
          additionalProperties:
            type: integer
        operating_systems:
          type: object
          additionalProperties:
            type: integer
    ApplicationAnalyticsVerificationTimePoint:
      type: object
      properties:
        date:
          type: string
          description: >-
            Clave del período: `YYYY-MM-DD` para un día o para el lunes de una
            semana, o `YYYY-MM` para un mes, según `grouping_mode`.
        overall_avg:
          type: number
          description: Promedio de segundos activos por sesión.
        per_feature:
          type: object
          description: Promedio de segundos activos por función.
          additionalProperties:
            type: number
    ApplicationAnalyticsResubmissionPoint:
      type: object
      properties:
        date:
          type: string
          description: >-
            Clave del período: `YYYY-MM-DD` para un día o para el lunes de una
            semana, o `YYYY-MM` para un mes, según `grouping_mode`.
        first_pass:
          type: integer
        second:
          type: integer
        third_plus:
          type: integer
        abandoned:
          type: integer
    ApplicationAnalyticsOriginalStatusPoint:
      type: object
      properties:
        date:
          type: string
          description: >-
            Clave del período: `YYYY-MM-DD` para un día o para el lunes de una
            semana, o `YYYY-MM` para un mes, según `grouping_mode`.
        approved:
          type: integer
        in_review:
          type: integer
        declined:
          type: integer
    ApplicationAnalyticsWidget:
      type: object
      description: >-
        Un widget del panel. Todos los widgets tienen `kind` y `title`; los
        demás campos dependen de `kind`. Los widgets de sesiones reutilizan los
        objetos de resumen (`data_points`, `request_breakdown`,
        `workflow_funnel_stats`, etc.); los widgets de lista colocan sus
        entradas en `items`; las métricas de transacciones usan `value`.
      required:
        - kind
        - title
      properties:
        kind:
          type: string
          enum:
            - sessions_volume
            - workflow_funnel
            - average_verification_time
            - country_distribution
            - warning_insights
            - conversion_rate
            - conversion_by_country
            - resubmission_insights
            - original_status_distribution
            - database_validation_coverage
            - database_validation_latency
            - demographics
            - device_details
            - horizontal_bar
            - kyb_registry_coverage
            - kyb_registry_data_completeness
            - metric
            - time_series
            - breakdown
            - status_time_series
            - leaderboard
            - histogram
          description: Tipo de widget.
        title:
          type: string
          description: Título visible, por ejemplo `Verification volume`.
        grouping_mode:
          type: string
          enum:
            - day
            - week
            - month
          description: >-
            Cómo se agrupan las listas `*_time_series`: `day` hasta 14 días,
            `week` hasta 90 y `month` a partir de ahí. Se mide desde el primer
            día con sesiones en el rango.
        data_points:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsDataPoint'
        request_breakdown:
          $ref: '#/components/schemas/ApplicationAnalyticsRequestBreakdown'
        previous_data_points:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsDataPoint'
        previous_request_breakdown:
          $ref: '#/components/schemas/ApplicationAnalyticsRequestBreakdown'
        conversion_rate:
          type: number
          nullable: true
        workflow_funnel_stats:
          $ref: '#/components/schemas/ApplicationAnalyticsWorkflowFunnel'
        verification_time_stats:
          $ref: '#/components/schemas/ApplicationAnalyticsVerificationTimeStats'
        verification_time_time_series:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsVerificationTimePoint'
        warning_stats:
          $ref: '#/components/schemas/ApplicationAnalyticsWarningStats'
        resubmission_stats:
          $ref: '#/components/schemas/ApplicationAnalyticsResubmissionStats'
        resubmission_time_series:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsResubmissionPoint'
        original_status_stats:
          $ref: '#/components/schemas/ApplicationAnalyticsOriginalStatusStats'
        original_status_time_series:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsOriginalStatusPoint'
        demographic_stats:
          $ref: '#/components/schemas/ApplicationAnalyticsDemographicStats'
        demographic_time_series:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsDemographicPoint'
        device_details:
          $ref: '#/components/schemas/ApplicationAnalyticsDeviceDetails'
        device_time_series:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsDevicePoint'
        items:
          type: array
          description: >-
            Entradas de un widget de lista. `country_distribution` (KYC):
            `country`, `country_code`, `session_count`. `conversion_by_country`:
            `country`, `country_code`, `finished`, `approved`. `time_series`:
            `date`, `value`. `status_time_series`: `date`, `approved`,
            `declined`, `flagged`. `breakdown`: `transaction_type` o
            `action_type` con `count` y `volume`, o bien `tag_id`, `tag_name`,
            `count`. `leaderboard`: `rule_title`, `trigger_count` o `assignee`,
            `handled_count`, `average_processing_seconds`, cada uno con
            `approved_percentage`, `declined_percentage`, `flagged_percentage`.
            `histogram`: `score`, `count`.
          items:
            type: object
            additionalProperties: {}
        previous_items:
          type: array
          description: >-
            Serie temporal de transacciones del periodo de la misma duración
            inmediatamente anterior a `start_date`.
          items:
            type: object
            additionalProperties: {}
        value:
          type: number
          description: 'Widgets `metric`: la cifra del rango.'
        currency:
          type: string
          nullable: true
          description: >-
            Widgets de volumen e importe de transacciones: la moneda de
            transacción predeterminada de la aplicación.
        thresholds:
          type: object
          description: >-
            Widget `histogram`: los umbrales de puntuación de revisión y de
            rechazo de la aplicación.
          properties:
            review:
              type: integer
            decline:
              type: integer
        search:
          type: object
          description: 'Widget `kyb_registry_coverage`: totales de búsquedas en registros.'
          properties:
            searches_total:
              type: integer
            searches_with_no_candidates:
              type: integer
    ApplicationAnalyticsCountryCount:
      type: object
      properties:
        country:
          type: string
          description: Nombre del país.
        country_code:
          type: string
          description: Código de país de dos letras.
        session_count:
          type: integer
          description: Sesiones de ese país.
  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.