> ## 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 d'analytics des vérifications d'application

> Avec Didit, récupérez les analytics de vérification de votre application sur une période : sessions KYC, conversion, entonnoirs, widgets KYB.



Prompt de l'API pour obtenir les analyses de l'application
        Copier le prompt dans le presse-papiers



      
      

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



      
      

Coller dans

Cet endpoint renvoie les chiffres affichés dans le [tableau de bord d'analyse](https://docs.didit.me/fr/console/analytics.md) de la Business Console. Il possède deux formats de réponse :| Ce que vous envoyez | Ce que vous obtenez |
| - | - |
| Ni `scope` ni `widget_keys` | Le récapitulatif de la vérification des utilisateurs (KYC) pour la période |
| `scope`, `widget_keys`, ou les deux | Les widgets du tableau de bord pour un onglet : `kyc`, `kyb`, `transactions` ou `home` (n'importe quelle combinaison des trois) |Chaque widget contient un `kind` et un `title` ; les autres champs dépendent du type. Envoyez `scope` sans `widget_keys` une fois pour lire `available_widget_keys`, puis ne demandez que les widgets dont vous avez besoin.> [!NOTE]
>
> Seule une clé API à accès complet peut appeler cet endpoint. Une clé à accès limité reçoit un `403` quel que soit l'accès qu'elle possède, et il en va de même pour une clé appartenant à une autre application. Voir [Clés API](https://docs.didit.me/fr/console/api-keys.md).## Liens connexes- [Obtenir les vérifications du jour par heure](https://docs.didit.me/fr/management-api/analytics/today-by-hour.md)
- [Tableau de bord d'analyse](https://docs.didit.me/fr/console/analytics.md)
- [Clés API et accès limité](https://docs.didit.me/fr/console/api-keys.md)


## OpenAPI

````yaml fr/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 vérification d'identité. Authentifiez-vous avec l'en-tête x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/organization/{organization_id}/application/{application_id}/analytics/:
    get:
      tags:
        - Analytics
      summary: Obtenir les analyses de l'application
      description: >-
        Consultez les chiffres sous-jacents au [tableau de bord
        analytique](https://docs.didit.me/fr/console/analytics) de la Business
        Console pour une plage de dates. Sans `scope` ni `widget_keys`, la
        réponse correspond au résumé de la vérification des utilisateurs (KYC)
        (`ApplicationAnalyticsSummary`) : volumes quotidiens de sessions, totaux
        par statut, taux de conversion, mêmes chiffres pour la période
        précédente de même durée, localisations, données démographiques,
        appareils, entonnoirs de workflow, durée active de vérification,
        resoumissions, avertissements et séries temporelles. Avec `scope` ou
        `widget_keys`, il s'agit des widgets d'un onglet du tableau de bord
        (`ApplicationAnalyticsWidgetResponse`) : `kyc`, `kyb`, `transactions` ou
        `home`.


        Les décomptes de sessions sont calculés par date de création de session
        (UTC) et reflètent le statut actuel de chaque session. Ils proviennent
        d'agrégations quotidiennes actualisées en arrière-plan, de sorte que
        l'activité la plus récente peut mettre un court instant à apparaître.
        Les versions et identifiants de workflow invalides sont ignorés plutôt
        que rejetés. Rien n'est facturé.


        Seule une clé API à accès complet peut appeler cet endpoint : toute clé
        restreinte reçoit un code `403`, quels que soient ses accès, tout comme
        la clé d'une autre application. Consultez [API
        keys](https://docs.didit.me/fr/console/api-keys).
      operationId: get_application_analytics
      parameters:
        - name: organization_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: UUID de l'organisation.
          example: 11111111-2222-3333-4444-555555555555
        - name: application_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: >-
            UUID de l'application. Doit être l'application à laquelle appartient
            la clé API : une clé utilisée sur toute autre application reçoit une
            erreur `403`.
          example: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
        - name: start_date
          in: query
          required: false
          schema:
            type: string
            format: date
            example: '2026-10-01'
          description: >-
            Premier jour de la plage, `YYYY-MM-DD`, inclus (UTC). À envoyer avec
            `end_date` : si l'un des deux est manquant, les deux sont ignorés et
            la plage s'étend de 30 jours avant aujourd'hui jusqu'à aujourd'hui.
        - name: end_date
          in: query
          required: false
          schema:
            type: string
            format: date
            example: '2026-10-15'
          description: >-
            Dernier jour de la plage, `YYYY-MM-DD`, inclus (UTC). Une date
            future équivaut à aujourd'hui. La plage ne peut pas dépasser 730
            jours.
        - name: scope
          in: query
          required: false
          schema:
            type: string
            enum:
              - home
              - kyc
              - kyb
              - transactions
          description: >-
            Onglet du tableau de bord pour lequel renvoyer les widgets
            (insensible à la casse). Omettez-le, ainsi que `widget_keys`, pour
            obtenir le récapitulatif KYC. Envoyer uniquement `widget_keys`
            implique `kyc`. `home` accepte tout widget KYC, KYB ou de
            transaction et utilise par défaut la disposition d'accueil
            enregistrée de l'application.
        - name: widget_keys
          in: query
          required: false
          schema:
            type: string
            example: tx_count_total,tx_count_daily
          description: >-
            Clés de widgets séparées par des virgules, renvoyées dans cet ordre.
            Les clés non acceptées par le périmètre sont ignorées ; s'il n'en
            reste aucune, vous obtenez les valeurs par défaut du périmètre. 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`. Transactions : `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: >-
            Identifiants de workflow séparés par des virgules. Limite le
            récapitulatif KYC ainsi que les widgets KYC et KYB à ces workflows.
            Les valeurs qui ne sont pas des UUID sont ignorées ; si aucune n'est
            valide, le filtre est abandonné. Le récapitulatif accepte également
            `workflow_id`.
        - name: versions
          in: query
          required: false
          schema:
            type: string
            example: 3,4
          description: >-
            Numéros de version de workflow séparés par des virgules. S'applique
            uniquement en combinaison avec `workflow_ids` ; les valeurs qui ne
            sont pas des nombres entiers sont ignorées. `version` est accepté
            comme alias.
        - name: branch_path_ids
          in: query
          required: false
          schema:
            type: string
            example: default
          description: >-
            Identifiants de chemins de branche séparés par des virgules.
            S'applique uniquement avec `workflow_ids`, et seulement aux chiffres
            KYC. Les chiffres sont actuellement enregistrés uniquement pour
            `default` (tous les chemins combinés), toute autre valeur renvoie
            donc des chiffres vides. `branch_path_id` est accepté en alias.
        - name: tag
          in: query
          required: false
          schema:
            type: string
          description: >-
            Widgets de transactions uniquement : UUID ou noms de tags séparés
            par des virgules.
        - name: transaction_type
          in: query
          required: false
          schema:
            type: string
            example: finance
          description: >-
            Widgets de transactions uniquement : catégories de transaction
            séparées par des virgules.
        - name: action_type
          in: query
          required: false
          schema:
            type: string
            example: withdrawal
          description: >-
            Widgets de transactions uniquement : types d'actions séparés par des
            virgules (insensible à la casse).
      responses:
        '200':
          description: >-
            Le récapitulatif KYC, ou les widgets demandés lorsque `scope` ou
            `widget_keys` est envoyé.
          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: >-
            Plage de dates ou portée non valide. Le corps est un objet indexé
            par le paramètre en cause, avec un message sous forme de chaîne.
          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 clé API a expiré. Seule une clé créée avec une date d'expiration
            peut expirer ; après cette date, chaque requête effectuée avec
            celle-ci renvoie `401`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              examples:
                Expired key:
                  value:
                    detail: This API key has expired.
        '403':
          description: "La requête n'est pas autorisée. Consultez `detail`\_: une clé API manquante (une clé erronée, révoquée ou expirée renvoie `401`), une clé d'une autre application, toute clé avec restriction de portée, ou une requête provenant de l'extérieur de la liste d'adresses IP de la clé."
          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: >-
            Plus de 600 requêtes GET par minute avec cette clé API. Attendez le
            nombre de secondes indiqué dans `Retry-After`, puis réessayez.
          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: >-
                Secondes avant la réinitialisation de la fenêtre actuelle d'une
                minute.
              schema:
                type: integer
                example: 23
            X-RateLimit-Limit:
              description: Requêtes autorisées par minute dans ce budget.
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: Requêtes restantes dans la fenêtre actuelle.
              schema:
                type: integer
            X-RateLimit-Reset:
              description: Temps Unix auquel la fenêtre se réinitialise.
              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: >-
        Résumé de la vérification d'identité (KYC) de l'utilisateur, renvoyé
        lorsque ni `scope` ni `widget_keys` ne sont envoyés.
      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 point par jour, du premier jour avec des sessions dans
            l'intervalle jusqu'à `end_date`. Toujours quotidien, quelle que soit
            la valeur de `grouping_mode`.
        request_breakdown:
          $ref: '#/components/schemas/ApplicationAnalyticsRequestBreakdown'
        previous_data_points:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsDataPoint'
          description: >-
            Points quotidiens pour la période de même durée précédant
            immédiatement `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`, une décimale. `null` lorsque rien n'est
            terminé.
        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: >-
            Manière dont les listes `*_time_series` sont regroupées : `day`
            jusqu'à 14 jours, `week` jusqu'à 90, `month` au-delà. Mesuré à
            partir du premier jour comportant des sessions dans la plage.
        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 du tableau de bord, renvoyés lorsque `scope` ou `widget_keys`
        est envoyé.
      required:
        - scope
        - available_widget_keys
        - requested_widget_keys
        - widgets
      properties:
        scope:
          type: string
          enum:
            - home
            - kyc
            - kyb
            - transactions
          description: Onglet du tableau de bord.
        available_widget_keys:
          type: array
          items:
            type: string
          description: Chaque clé de widget acceptée par cette portée.
        requested_widget_keys:
          type: array
          items:
            type: string
          description: >-
            Les clés du widget retournées, dans l'ordre : vos `widget_keys`
            valides, ou les valeurs par défaut du scope.
        widgets:
          type: object
          description: Indexé par clé de widget, dans l'ordre de `requested_widget_keys`.
          additionalProperties:
            $ref: '#/components/schemas/ApplicationAnalyticsWidget'
    ApplicationAnalyticsDataPoint:
      type: object
      description: >-
        Nombre de sessions pour un jour donné, par date de création (UTC).
        Chaque décompte reflète le statut actuel de la session. Les points de la
        période précédente comportent au moins les champs obligatoires.
      required:
        - rounded_date
        - total
        - approved
        - declined
        - canceled
        - pending
      properties:
        rounded_date:
          type: string
          format: date
          description: Le jour, `YYYY-MM-DD`.
        total:
          type: integer
          description: Sessions créées ce jour-là.
        approved:
          type: integer
          description: Parmi celles-ci, les sessions `Approved` ou `Kyc Expired`.
        declined:
          type: integer
          description: Sessions `Declined`.
        canceled:
          type: integer
          description: Sessions `Expired` ou `Abandoned`.
        pending:
          type: integer
          description: Sessions `Not Started`, `In Progress` ou `In Review`.
        in_review:
          type: integer
          description: Sessions `In Review`.
        expired:
          type: integer
          description: Sessions `Expired`.
        abandoned:
          type: integer
          description: Sessions `Abandoned`.
        in_progress:
          type: integer
          description: Sessions `In Progress`.
        not_started:
          type: integer
          description: Sessions `Not Started`.
        manually_approved:
          type: integer
          description: >-
            Sessions approuvées par un réviseur après qu'un autre verdict a été
            rendu par le workflow.
        manually_declined:
          type: integer
          description: >-
            Sessions refusées par un réviseur après qu'un autre verdict a été
            rendu par le workflow.
    ApplicationAnalyticsRequestBreakdown:
      type: object
      description: >-
        Totaux de statuts pour la période. La répartition de la période
        précédente contient au moins les champs requis.
      required:
        - total_approved
        - total_in_review
        - total_declined
        - total_canceled
        - total_pending
      properties:
        total_approved:
          type: integer
          description: Sessions `Approved` ou `Kyc Expired`.
        total_in_review:
          type: integer
          description: Sessions `In Review`.
        total_declined:
          type: integer
          description: Sessions `Declined`.
        total_canceled:
          type: integer
          description: Sessions `Expired` ou `Abandoned`.
        total_pending:
          type: integer
          description: >-
            Sessions `Not Started`, `In Progress` ou `In Review` (inclut
            `total_in_review`).
        total_expired:
          type: integer
          description: Sessions `Expired`.
        total_abandoned:
          type: integer
          description: Sessions `Abandoned`.
        total_in_progress:
          type: integer
          description: Sessions `In Progress`.
        total_not_started:
          type: integer
          description: Sessions `Not Started`.
        total_manually_approved:
          type: integer
          description: Approuvé par un réviseur.
        total_manually_declined:
          type: integer
          description: Refusé par un réviseur.
    ApplicationAnalyticsLocationStats:
      type: object
      properties:
        ip_countries:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsCountryCount'
          description: >-
            Pays des adresses IP des utilisateurs, classés par nombre de
            sessions décroissant.
        countries:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsCountryCount'
          description: Même liste que `ip_countries`.
        id_countries:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsCountryCount'
          description: >-
            Pays de délivrance des documents d'identité vérifiés, par nombre
            décroissant de sessions.
        conversion_by_country:
          type: array
          description: "Par pays de délivrance du document\_: sessions terminées (approuvé, refusé ou en cours d'examen) et nombre de sessions approuvées. Les pays comptant le plus de sessions terminées en premier."
          items:
            type: object
            properties:
              country:
                type: string
              country_code:
                type: string
              finished:
                type: integer
              approved:
                type: integer
        cities:
          type: array
          description: >-
            Jusqu'à 100 villes d'IP, les villes comptant le plus de sessions en
            premier.
          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: >-
            Sessions par tranche d'âge issues de la pièce d'identité. Vide
            lorsqu'il n'y a pas de données.
          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: 'Sessions par code de genre du document : `M`, `F` ou `U` (inconnu).'
          additionalProperties:
            type: integer
    ApplicationAnalyticsDeviceDetails:
      type: object
      description: >-
        Les cinq premiers de chaque catégorie, avec les sessions les plus
        nombreuses en premier.
      properties:
        device_models:
          type: array
          description: >-
            Marques d'appareils : `Apple`, `Android`, `LG`, tout le reste étant
            regroupé sous `Other`.
          items:
            type: object
            properties:
              device:
                type: string
              count:
                type: integer
        browsers:
          type: array
          description: >-
            Navigateurs : `Chrome`, `Safari`, `Didit App`, `Firefox`, tout le
            reste étant regroupé sous `Other`.
          items:
            type: object
            properties:
              browser:
                type: string
              count:
                type: integer
        operating_systems:
          type: array
          description: Systèmes d'exploitation.
          items:
            type: object
            properties:
              os:
                type: string
              count:
                type: integer
    ApplicationAnalyticsWorkflowFunnel:
      type: object
      description: >-
        Indexé par ID de workflow. `total` correspond aux sessions démarrées sur
        ce workflow ; `steps` compte les sessions ayant atteint chaque étape
        (`OCR`, `LIVENESS`, `FACE_MATCH`, `AML`, `POA`, `PHONE`, `EMAIL`, `NFC`,
        `DATABASE_VALIDATION`, `QUESTIONNAIRE`, `IP_ANALYSIS`, `AGE_ESTIMATION`,
        `KYB_REGISTRY`, `KYB_DOCUMENTS`, `KYB_KEY_PEOPLE`). Atteindre une étape
        ne signifie pas la valider.
      additionalProperties:
        type: object
        properties:
          total:
            type: integer
          steps:
            type: object
            additionalProperties:
              type: object
              properties:
                reached:
                  type: integer
    ApplicationAnalyticsVerificationTimeStats:
      type: object
      description: >-
        Temps actif passé par les utilisateurs à se vérifier, sans compter les
        périodes d'inactivité. Objet vide en l'absence de données.
      properties:
        overall_avg_seconds:
          type: number
          description: Moyenne par session, une décimale.
        overall_count:
          type: integer
          description: Sessions mesurées.
        per_feature:
          type: object
          description: Indexé par fonctionnalité, par exemple `OCR` ou `LIVENESS`.
          additionalProperties:
            type: object
            properties:
              avg_seconds:
                type: number
              total_seconds:
                type: number
              count:
                type: integer
        per_sub_step:
          type: object
          description: >-
            Indexé par fonctionnalité, puis par sous-étape, par exemple
            `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: Sessions terminées sans nouvelle soumission.
        second:
          type: integer
          description: Sessions terminées soumises à nouveau une fois.
        third_plus:
          type: integer
          description: Sessions terminées soumises à nouveau deux fois ou plus.
        abandoned:
          type: integer
          description: Sessions abandonnées.
    ApplicationAnalyticsWarningStats:
      type: object
      description: >-
        Indexé par fonctionnalité (`ID_VERIFICATION`, `LIVENESS`, `FACEMATCH`,
        `AML`, `PROOF_OF_ADDRESS`, `PHONE`, `EMAIL`, `NFC`, `LOCATION`,
        `DATABASE_VALIDATION`, `QUESTIONNAIRE` et les fonctionnalités KYB).
        `total` correspond aux sessions ayant atteint la fonctionnalité ;
        `risks` compte les sessions par code et niveau d'avertissement.
      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: >-
        Le verdict automatique du workflow, avant toute modification par un
        réviseur.
      properties:
        approved:
          type: integer
        in_review:
          type: integer
        declined:
          type: integer
    ApplicationAnalyticsDemographicPoint:
      type: object
      properties:
        date:
          type: string
          description: >-
            Clé de période : `YYYY-MM-DD` pour un jour, le lundi d'une semaine,
            ou `YYYY-MM` pour un mois, selon `grouping_mode`.
        age_distribution:
          type: object
          additionalProperties:
            type: integer
        gender_distribution:
          type: object
          additionalProperties:
            type: integer
    ApplicationAnalyticsDevicePoint:
      type: object
      properties:
        date:
          type: string
          description: >-
            Clé de période : `YYYY-MM-DD` pour un jour, le lundi d'une semaine,
            ou `YYYY-MM` pour un mois, selon `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: >-
            Clé de période : `YYYY-MM-DD` pour un jour, le lundi d'une semaine,
            ou `YYYY-MM` pour un mois, selon `grouping_mode`.
        overall_avg:
          type: number
          description: Secondes actives moyennes par session.
        per_feature:
          type: object
          description: Secondes actives moyennes par fonctionnalité.
          additionalProperties:
            type: number
    ApplicationAnalyticsResubmissionPoint:
      type: object
      properties:
        date:
          type: string
          description: >-
            Clé de période : `YYYY-MM-DD` pour un jour, le lundi d'une semaine,
            ou `YYYY-MM` pour un mois, selon `grouping_mode`.
        first_pass:
          type: integer
        second:
          type: integer
        third_plus:
          type: integer
        abandoned:
          type: integer
    ApplicationAnalyticsOriginalStatusPoint:
      type: object
      properties:
        date:
          type: string
          description: >-
            Clé de période : `YYYY-MM-DD` pour un jour, le lundi d'une semaine,
            ou `YYYY-MM` pour un mois, selon `grouping_mode`.
        approved:
          type: integer
        in_review:
          type: integer
        declined:
          type: integer
    ApplicationAnalyticsWidget:
      type: object
      description: >-
        Un widget de tableau de bord. Chaque widget possède `kind` et `title` ;
        les autres champs dépendent de `kind`. Les widgets de session
        réutilisent les objets récapitulatifs (`data_points`,
        `request_breakdown`, `workflow_funnel_stats`, etc.) ; les widgets de
        liste placent leurs entrées dans `items` ; les métriques de transaction
        utilisent `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: Type de widget.
        title:
          type: string
          description: Titre d'affichage, par exemple `Verification volume`.
        grouping_mode:
          type: string
          enum:
            - day
            - week
            - month
          description: >-
            Manière dont les listes `*_time_series` sont regroupées : `day`
            jusqu'à 14 jours, `week` jusqu'à 90, `month` au-delà. Mesuré à
            partir du premier jour comportant des sessions dans la plage.
        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: >-
            Entrées d'un widget de liste. `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` ou
            `action_type` avec `count` et `volume`, ou `tag_id`, `tag_name`,
            `count`. `leaderboard` : `rule_title`, `trigger_count` ou
            `assignee`, `handled_count`, `average_processing_seconds`, chacun
            avec `approved_percentage`, `declined_percentage`,
            `flagged_percentage`. `histogram` : `score`, `count`.
          items:
            type: object
            additionalProperties: {}
        previous_items:
          type: array
          description: >-
            Série temporelle des transactions pour la période de même durée
            précédant immédiatement `start_date`.
          items:
            type: object
            additionalProperties: {}
        value:
          type: number
          description: 'Widgets `metric` : le chiffre pour la période.'
        currency:
          type: string
          nullable: true
          description: >-
            Widgets de volume et de montant des transactions : devise par défaut
            des transactions de l'application.
        thresholds:
          type: object
          description: >-
            Widget `histogram` : les seuils de score d'examen et de refus de
            l'application.
          properties:
            review:
              type: integer
            decline:
              type: integer
        search:
          type: object
          description: >-
            Widget `kyb_registry_coverage` : totaux de recherche dans les
            registres.
          properties:
            searches_total:
              type: integer
            searches_with_no_candidates:
              type: integer
    ApplicationAnalyticsCountryCount:
      type: object
      properties:
        country:
          type: string
          description: Nom du pays.
        country_code:
          type: string
          description: Code pays à deux lettres.
        session_count:
          type: integer
          description: Sessions provenant de ce pays.
  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.