> ## 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'analítiques de l'aplicació

> Consulta les analítiques de verificació de Didit per a un interval de dates: sessions KYC, conversió, embuts i widgets KYB.



Obtenir el prompt de l'API d'analítica de l'aplicació
        Copia el prompt al porta-retalls



      
      

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



      
      

Enganxa a

L'endpoint retorna les dades que hi ha darrere del [tauler d'analítica](https://docs.didit.me/ca/console/analytics.md) de la Business Console. Té dues formes de resposta:| Envies | Reps |
| - | - |
| Ni `scope` ni `widget_keys` | El resum de verificació d'usuaris (KYC) per al rang |
| `scope`, `widget_keys` o tots dos | Ginys del tauler per a una pestanya: `kyc`, `kyb`, `transactions` o `home` (qualsevol combinació de les tres) |Cada giny té un `kind` i un `title`; la resta de camps depenen del kind. Envia `scope` sense `widget_keys` una vegada per llegir `available_widget_keys`, i després sol·licita només els widgets que necessites.> [!NOTE]
>
> Només una clau d'API amb accés complet pot cridar aquest endpoint. Una clau amb àmbit restringit rep `403` independentment de l'accés que tingui, i una clau d'una altra aplicació també rep aquest error. Consulta [Claus d'API](https://docs.didit.me/ca/console/api-keys.md).## Relacionats- [Obtenir les verificacions d'avui per hora](https://docs.didit.me/ca/management-api/analytics/today-by-hour.md)
- [Tauler d'analítica](https://docs.didit.me/ca/console/analytics.md)
- [Claus d'API i accés limitat](https://docs.didit.me/ca/console/api-keys.md)


## OpenAPI

````yaml ca/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ó d'identitat. Autentica't amb la capçalera 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 analítiques de l'aplicació
      description: >-
        Llegeix les xifres del [tauler
        d'analítica](https://docs.didit.me/ca/console/analytics) de la Business
        Console per a un interval de dates. Sense `scope` ni `widget_keys`, la
        resposta és el resum de verificació d'usuaris (KYC)
        (`ApplicationAnalyticsSummary`): recomptes diaris de sessions, totals
        per estat, taxa de conversió, les mateixes xifres per al període
        anterior d'igual durada, ubicacions, dades demogràfiques, dispositius,
        embuts del flux de treball, temps actiu de verificació, reenviaments,
        advertències i sèries temporals. Amb `scope` o `widget_keys` retorna els
        ginys d'una pestanya del tauler (`ApplicationAnalyticsWidgetResponse`):
        `kyc`, `kyb`, `transactions` o `home`.


        Els recomptes de sessions es basen en la data de creació de la sessió
        (UTC) i reflecteixen l'estat actual de cadascuna. Provenen d'agregacions
        diàries actualitzades en segon pla, per la qual cosa l'activitat més
        recent pot trigar una mica a aparèixer. Els ID i versions de flux de
        treball no vàlids s'ignoren en lloc de rebutjar-se. No es factura res.


        Només una clau d'API d'accés complet pot cridar aquest endpoint:
        qualsevol clau d'API amb àmbit obté `403`, tingui els permisos que
        tingui, igual que la clau d'una altra aplicació. Consulta [Claus
        d'API](https://docs.didit.me/ca/console/api-keys).
      operationId: get_application_analytics
      parameters:
        - name: organization_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: UUID de l'organització.
          example: 11111111-2222-3333-4444-555555555555
        - name: application_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: >-
            UUID de l'aplicació. Ha de ser l'aplicació a la qual pertany la clau
            d'API: una clau utilitzada en qualsevol altra aplicació rep un
            `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 dia de l'interval, `YYYY-MM-DD`, inclusiu (UTC). Envia'l
            juntament amb `end_date`: quan en falta algun, s'ignoren tots dos i
            l'interval abasta des de 30 dies abans d'avui fins a avui.
        - name: end_date
          in: query
          required: false
          schema:
            type: string
            format: date
            example: '2026-10-15'
          description: >-
            Últim dia de l'interval, `YYYY-MM-DD`, inclusiu (UTC). Una data
            futura compta com avui. L'interval no pot superar els 730 dies.
        - name: scope
          in: query
          required: false
          schema:
            type: string
            enum:
              - home
              - kyc
              - kyb
              - transactions
          description: >-
            Pestanya del tauler de la qual es retornaran els ginys (no
            distingeix entre majúscules i minúscules). Omet-la, juntament amb
            `widget_keys`, per obtenir el resum de KYC. Enviar només
            `widget_keys` implica `kyc`. `home` accepta qualsevol giny de KYC,
            KYB o de transaccions i s'estableix per defecte en el disseny
            d'inici desat de l'aplicació.
        - name: widget_keys
          in: query
          required: false
          schema:
            type: string
            example: tx_count_total,tx_count_daily
          description: >-
            Claus de widgets separades per comes, retornades en aquest ordre.
            S'ometen les claus que l'abast no admet; si no en queda cap, obtens
            els valors per defecte de l'abast. 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`. Transaccions: `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: >-
            ID de flux de treball separats per comes. Limita el resum de KYC i
            els widgets de KYC i KYB a aquests fluxos de treball. Els valors que
            no siguin UUID s'ignoren; si cap no és vàlid, es descarta el filtre.
            El resum també accepta `workflow_id`.
        - name: versions
          in: query
          required: false
          schema:
            type: string
            example: 3,4
          description: >-
            Números de versió del flux de treball separats per comes. Només
            s'aplica juntament amb `workflow_ids`; els valors que no siguin
            números enters s'ignoren. S'accepta `version` com a àlies.
        - name: branch_path_ids
          in: query
          required: false
          schema:
            type: string
            example: default
          description: >-
            Identificadors de camí de branca separats per comes. S'aplica només
            juntament amb `workflow_ids`, i només a les xifres de KYC.
            Actualment, les xifres només es registren per a `default` (tots els
            camins combinats), de manera que qualsevol altre valor retorna
            xifres buides. S'accepta `branch_path_id` com a àlies.
        - name: tag
          in: query
          required: false
          schema:
            type: string
          description: >-
            Només ginys de transaccions: UUIDs d'etiquetes o noms d'etiquetes
            separats per comes.
        - name: transaction_type
          in: query
          required: false
          schema:
            type: string
            example: finance
          description: >-
            Només ginys de transaccions: categories de transacció separades per
            comes.
        - name: action_type
          in: query
          required: false
          schema:
            type: string
            example: withdrawal
          description: >-
            Només ginys de transaccions: tipus d'acció separats per comes (sense
            distinció entre majúscules i minúscules).
      responses:
        '200':
          description: >-
            El resum de KYC, o els ginys sol·licitats quan s'envia `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: >-
            Interval de dates o abast no vàlid. El cos és un objecte indexat pel
            paràmetre causant, amb un missatge de text.
          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 clau d'API ha caducat. Només pot caducar una clau creada amb data
            de caducitat; després d'aquesta data, cada sol·licitud que s'hi faci
            rep una resposta `401`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              examples:
                Expired key:
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            La sol·licitud no està permesa. Consulta `detail`: una clau d'API
            absent (una clau incorrecta, revocada o caducada rep `401`), una
            clau d'una altra aplicació, qualsevol clau amb àmbit o una
            sol·licitud des de fora de la llista d'adreces IP de la clau.
          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 sol·licituds GET per minut amb aquesta clau d'API. Espera
            el nombre de segons indicat a `Retry-After` i torna-ho a provar.
          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: Segons fins que es restableixi la finestra actual d'un minut.
              schema:
                type: integer
                example: 23
            X-RateLimit-Limit:
              description: Sol·licituds permeses per minut en aquest pressupost.
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: Sol·licituds restants a la finestra actual.
              schema:
                type: integer
            X-RateLimit-Reset:
              description: Temps Unix en què es reinicia la finestra.
              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: >-
        Resum de la verificació d'usuaris (KYC), retornat quan no s'envia 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 punt per dia, des del primer dia amb sessions a l'interval fins a
            `end_date`. Sempre diari, independentment del que indiqui
            `grouping_mode`.
        request_breakdown:
          $ref: '#/components/schemas/ApplicationAnalyticsRequestBreakdown'
        previous_data_points:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsDataPoint'
          description: >-
            Punts diaris per al període de la mateixa durada just abans de
            `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`, un decimal. `null` quan no s'ha finalitzat
            res.
        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: >-
            Com s'agrupen les llistes de `*_time_series`: `day` per a períodes
            de fins a 14 dies, `week` per a períodes de fins a 90 dies i `month`
            per a períodes superiors. Es mesura a partir del primer dia amb
            sessions dins l'interval.
        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: Ginys del tauler, retornats quan s'envia `scope` o `widget_keys`.
      required:
        - scope
        - available_widget_keys
        - requested_widget_keys
        - widgets
      properties:
        scope:
          type: string
          enum:
            - home
            - kyc
            - kyb
            - transactions
          description: Pestanya del tauler.
        available_widget_keys:
          type: array
          items:
            type: string
          description: Totes les claus de widget que accepta aquest abast.
        requested_widget_keys:
          type: array
          items:
            type: string
          description: >-
            Les claus del widget retornades, en ordre: les teves `widget_keys`
            vàlides, o els valors per defecte de l'abast.
        widgets:
          type: object
          description: Indexat per clau de widget, en l'ordre de `requested_widget_keys`.
          additionalProperties:
            $ref: '#/components/schemas/ApplicationAnalyticsWidget'
    ApplicationAnalyticsDataPoint:
      type: object
      description: >-
        Recomptes de sessions per a un dia, per data de creació (UTC). Cada
        recompte reflecteix l'estat actual de la sessió. Els punts del període
        anterior contenen com a mínim els camps obligatoris.
      required:
        - rounded_date
        - total
        - approved
        - declined
        - canceled
        - pending
      properties:
        rounded_date:
          type: string
          format: date
          description: El dia, `YYYY-MM-DD`.
        total:
          type: integer
          description: Sessions creades aquell dia.
        approved:
          type: integer
          description: D'aquestes, sessions `Approved` o `Kyc Expired`.
        declined:
          type: integer
          description: Sessions `Declined`.
        canceled:
          type: integer
          description: Sessions `Expired` o `Abandoned`.
        pending:
          type: integer
          description: Sessions `Not Started`, `In Progress` o `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 que un revisor ha aprovat després que el flux de treball
            hagi donat un altre veredicte.
        manually_declined:
          type: integer
          description: >-
            Sessions que un revisor ha rebutjat després que el flux de treball
            hagi donat un altre veredicte.
    ApplicationAnalyticsRequestBreakdown:
      type: object
      description: >-
        Totals d'estat per a l'interval. El desglossament del període anterior
        conté com a mínim els camps obligatoris.
      required:
        - total_approved
        - total_in_review
        - total_declined
        - total_canceled
        - total_pending
      properties:
        total_approved:
          type: integer
          description: Sessions `Approved` o `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` o `Abandoned`.
        total_pending:
          type: integer
          description: >-
            Sessions `Not Started`, `In Progress` o `In Review` (inclou
            `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: Aprovada per un revisor.
        total_manually_declined:
          type: integer
          description: Rebutjada per un revisor.
    ApplicationAnalyticsLocationStats:
      type: object
      properties:
        ip_countries:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsCountryCount'
          description: Països de les adreces IP dels usuaris, amb més sessions primer.
        countries:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsCountryCount'
          description: La mateixa llista que `ip_countries`.
        id_countries:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsCountryCount'
          description: >-
            Països emissors dels documents d'identitat verificats, primer els
            països amb més sessions.
        conversion_by_country:
          type: array
          description: >-
            Per país emissor del document: sessions finalitzades (aprovades,
            rebutjades o en revisió) i quantes han estat aprovades. Les més
            finalitzades primer.
          items:
            type: object
            properties:
              country:
                type: string
              country_code:
                type: string
              finished:
                type: integer
              approved:
                type: integer
        cities:
          type: array
          description: Fins a 100 ciutats per IP, primer les que tenen més sessions.
          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 per franja d'edat a partir del document d'identitat. Buit
            quan no hi ha dades.
          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 per codi de gènere del document: `M`, `F` o `U`
            (desconegut).
          additionalProperties:
            type: integer
    ApplicationAnalyticsDeviceDetails:
      type: object
      description: Els cinc primers de cadascun, amb més sessions primer.
      properties:
        device_models:
          type: array
          description: >-
            Marques de dispositius: `Apple`, `Android`, `LG`, i tota la resta
            agrupada com a `Other`.
          items:
            type: object
            properties:
              device:
                type: string
              count:
                type: integer
        browsers:
          type: array
          description: >-
            Navegadors: `Chrome`, `Safari`, `Didit App`, `Firefox`, i tota la
            resta agrupada com a `Other`.
          items:
            type: object
            properties:
              browser:
                type: string
              count:
                type: integer
        operating_systems:
          type: array
          description: Sistemes operatius.
          items:
            type: object
            properties:
              os:
                type: string
              count:
                type: integer
    ApplicationAnalyticsWorkflowFunnel:
      type: object
      description: >-
        Indexat per ID de flux de treball. `total` és el nombre de sessions
        iniciades en aquest flux de treball; `steps` compta les sessions que han
        arribat a cada pas (`OCR`, `LIVENESS`, `FACE_MATCH`, `AML`, `POA`,
        `PHONE`, `EMAIL`, `NFC`, `DATABASE_VALIDATION`, `QUESTIONNAIRE`,
        `IP_ANALYSIS`, `AGE_ESTIMATION`, `KYB_REGISTRY`, `KYB_DOCUMENTS`,
        `KYB_KEY_PEOPLE`). Arribar a un pas no equival a superar-lo.
      additionalProperties:
        type: object
        properties:
          total:
            type: integer
          steps:
            type: object
            additionalProperties:
              type: object
              properties:
                reached:
                  type: integer
    ApplicationAnalyticsVerificationTimeStats:
      type: object
      description: >-
        Temps actiu que els usuaris han passat verificant, ignorant els
        intervals d'inactivitat. És un objecte buit quan no hi ha dades.
      properties:
        overall_avg_seconds:
          type: number
          description: Mitjana per sessió, un decimal.
        overall_count:
          type: integer
          description: Sessions mesurades.
        per_feature:
          type: object
          description: Indexat per funcionalitat, per exemple `OCR` o `LIVENESS`.
          additionalProperties:
            type: object
            properties:
              avg_seconds:
                type: number
              total_seconds:
                type: number
              count:
                type: integer
        per_sub_step:
          type: object
          description: >-
            Indexat per funcionalitat, després per subpas, per 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 finalitzades sense cap reenviament.
        second:
          type: integer
          description: Sessions finalitzades reenviades una vegada.
        third_plus:
          type: integer
          description: Sessions finalitzades reenviades dues o més vegades.
        abandoned:
          type: integer
          description: Sessions abandonades.
    ApplicationAnalyticsWarningStats:
      type: object
      description: >-
        Indexat per funcionalitat (`ID_VERIFICATION`, `LIVENESS`, `FACEMATCH`,
        `AML`, `PROOF_OF_ADDRESS`, `PHONE`, `EMAIL`, `NFC`, `LOCATION`,
        `DATABASE_VALIDATION`, `QUESTIONNAIRE` i les funcionalitats de KYB).
        `total` és el nombre de sessions que han arribat a la funcionalitat;
        `risks` compta les sessions per codi d'advertència i nivell.
      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 veredicte automàtic del flux de treball, abans que cap revisor el
        modifiqués.
      properties:
        approved:
          type: integer
        in_review:
          type: integer
        declined:
          type: integer
    ApplicationAnalyticsDemographicPoint:
      type: object
      properties:
        date:
          type: string
          description: >-
            Clau del període: `YYYY-MM-DD` per a un dia, el dilluns d'una
            setmana, o `YYYY-MM` per a un mes, segons `grouping_mode`.
        age_distribution:
          type: object
          additionalProperties:
            type: integer
        gender_distribution:
          type: object
          additionalProperties:
            type: integer
    ApplicationAnalyticsDevicePoint:
      type: object
      properties:
        date:
          type: string
          description: >-
            Clau del període: `YYYY-MM-DD` per a un dia, el dilluns d'una
            setmana, o `YYYY-MM` per a un mes, segons `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: >-
            Clau del període: `YYYY-MM-DD` per a un dia, el dilluns d'una
            setmana, o `YYYY-MM` per a un mes, segons `grouping_mode`.
        overall_avg:
          type: number
          description: Mitjana de segons actius per sessió.
        per_feature:
          type: object
          description: Mitjana de segons actius per funcionalitat.
          additionalProperties:
            type: number
    ApplicationAnalyticsResubmissionPoint:
      type: object
      properties:
        date:
          type: string
          description: >-
            Clau del període: `YYYY-MM-DD` per a un dia, el dilluns d'una
            setmana, o `YYYY-MM` per a un mes, segons `grouping_mode`.
        first_pass:
          type: integer
        second:
          type: integer
        third_plus:
          type: integer
        abandoned:
          type: integer
    ApplicationAnalyticsOriginalStatusPoint:
      type: object
      properties:
        date:
          type: string
          description: >-
            Clau del període: `YYYY-MM-DD` per a un dia, el dilluns d'una
            setmana, o `YYYY-MM` per a un mes, segons `grouping_mode`.
        approved:
          type: integer
        in_review:
          type: integer
        declined:
          type: integer
    ApplicationAnalyticsWidget:
      type: object
      description: >-
        Un giny del tauler. Cada giny té `kind` i `title`; els altres camps
        depenen de `kind`. Els ginys de sessió reutilitzen els objectes de resum
        (`data_points`, `request_breakdown`, `workflow_funnel_stats`, etc.); els
        ginys de llista posen les seves entrades a `items`; les mètriques de
        transaccions utilitzen `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: Tipus de widget.
        title:
          type: string
          description: Títol visible, per exemple `Verification volume`.
        grouping_mode:
          type: string
          enum:
            - day
            - week
            - month
          description: >-
            Com s'agrupen les llistes de `*_time_series`: `day` per a períodes
            de fins a 14 dies, `week` per a períodes de fins a 90 dies i `month`
            per a períodes superiors. Es mesura a partir del primer dia amb
            sessions dins l'interval.
        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: >-
            Entrades d'un widget de llista. `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` amb `count` i `volume`, o `tag_id`, `tag_name`,
            `count`. `leaderboard`: `rule_title`, `trigger_count` o `assignee`,
            `handled_count`, `average_processing_seconds`, cadascun amb
            `approved_percentage`, `declined_percentage`, `flagged_percentage`.
            `histogram`: `score`, `count`.
          items:
            type: object
            additionalProperties: {}
        previous_items:
          type: array
          description: >-
            Sèrie temporal de transaccions per al període de la mateixa durada
            just abans de `start_date`.
          items:
            type: object
            additionalProperties: {}
        value:
          type: number
          description: 'Ginys `metric`: la xifra per a l''interval.'
        currency:
          type: string
          nullable: true
          description: >-
            Ginys de volum i import de transaccions: la moneda de transacció per
            defecte de l'aplicació.
        thresholds:
          type: object
          description: >-
            Giny `histogram`: els llindars de puntuació de revisió i rebuig de
            l'aplicació.
          properties:
            review:
              type: integer
            decline:
              type: integer
        search:
          type: object
          description: 'Giny `kyb_registry_coverage`: totals de cerca al registre.'
          properties:
            searches_total:
              type: integer
            searches_with_no_candidates:
              type: integer
    ApplicationAnalyticsCountryCount:
      type: object
      properties:
        country:
          type: string
          description: Nom del país.
        country_code:
          type: string
          description: Codi de país de dues lletres.
        session_count:
          type: integer
          description: Sessions d'aquell país.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        La clau d'API de la teva aplicació, des de Developers -> API keys a la
        Business Console. La clau primària té accés complet. Una clau amb nom
        pot tenir l'abast limitat: cap, lectura o escriptura per recurs,
        limitada a determinats fluxos de treball o a sessions aprovades, a una
        llista d'adreces IP i a una data de caducitat. 401 significa que la clau
        és incorrecta, revocada o caducada; 403 significa que no s'ha enviat cap
        clau, que la clau no té accés a aquest recurs o acció, o que la
        sol·licitud prové d'una adreça fora de la seva llista d'IP; 404 en una
        ruta de sessió significa que la sessió està fora dels fluxos de treball
        o estats de la clau. Una clau sense accés a fitxers multimèdia rep els
        URL d'imatge, vídeo i PDF com a null, i una clau sense permís
        d'escriptura de sessions rep els enllaços de sessió i els tokens com a
        null. Consulta https://docs.didit.me/console/api-keys.

````

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