> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# API de analytics da aplicação

> Consulte na Didit as métricas de verificação da sua aplicação por período: totais de sessões KYC, conversão, funis ou widgets de KYB e transações.



Prompt da API para obter as análises da aplicação
        Copiar o prompt para a área de transferência



      
      

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



      
      

Colar em

O endpoint retorna os números por trás do [painel de análises](https://docs.didit.me/pt-br/console/analytics.md) do Business Console. Ele tem dois formatos de resposta:| O que você envia | O que você recebe |
| - | - |
| Nem `scope` nem `widget_keys` | O resumo da verificação de usuários (KYC) no intervalo |
| `scope`, `widget_keys` ou ambos | Widgets do painel de uma aba: `kyc`, `kyb`, `transactions` ou `home` (qualquer combinação dos três) |Todo widget traz um `kind` e um `title`; os demais campos dependem do tipo. Envie `scope` sem `widget_keys` uma vez para ler `available_widget_keys` e, depois, solicite apenas os widgets de que você precisa.> [!NOTE]
>
> Somente uma chave de API com acesso total pode chamar este endpoint. Uma chave de API com escopo recebe `403`, independentemente do acesso que tenha, assim como uma chave de outra aplicação. Consulte [Chaves de API](https://docs.didit.me/pt-br/console/api-keys.md).## Conteúdo relacionado- [Obter as verificações de hoje por hora](https://docs.didit.me/pt-br/management-api/analytics/today-by-hour.md)
- [Painel de análises](https://docs.didit.me/pt-br/console/analytics.md)
- [Chaves de API e acesso com escopo](https://docs.didit.me/pt-br/console/api-keys.md)


## OpenAPI

````yaml pt-br/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 verificação de identidade. Autentique-se com o cabeçalho x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/organization/{organization_id}/application/{application_id}/analytics/:
    get:
      tags:
        - Analytics
      summary: Obter as análises da aplicação
      description: >-
        Leia os números por trás do [painel de
        análises](https://docs.didit.me/pt-br/console/analytics) do Business
        Console para um intervalo de datas. Sem `scope` e `widget_keys`, a
        resposta é o resumo de verificação de usuários (KYC)
        (`ApplicationAnalyticsSummary`): contagens diárias de sessões, totais
        por status, taxa de conversão, os mesmos números para o período anterior
        de igual duração, localizações, dados demográficos, dispositivos, funis
        por fluxo de verificação (workflow), tempo ativo de verificação,
        reenvios, avisos e séries temporais. Com `scope` ou `widget_keys`, a
        resposta são os widgets de uma aba do painel
        (`ApplicationAnalyticsWidgetResponse`): `kyc`, `kyb`, `transactions` ou
        `home`.


        As contagens de sessões são feitas pela data de criação da sessão (UTC)
        e refletem o status atual de cada sessão. Elas vêm de consolidações
        diárias atualizadas em segundo plano, então a atividade mais recente
        pode levar um pouco para aparecer. IDs e versões de fluxo inválidos são
        ignorados em vez de rejeitados. Nada é cobrado.


        Somente uma chave de API com acesso total pode chamar este endpoint:
        toda chave com escopo recebe `403`, qualquer que seja o acesso que
        tenha, assim como uma chave de outra aplicação. Consulte [Chaves de
        API](https://docs.didit.me/pt-br/console/api-keys).
      operationId: get_application_analytics
      parameters:
        - name: organization_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: UUID da organização.
          example: 11111111-2222-3333-4444-555555555555
        - name: application_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: >-
            UUID da aplicação. Deve ser a aplicação à qual a chave de API
            pertence: uma chave usada em qualquer outra aplicação recebe `403`.
          example: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
        - name: start_date
          in: query
          required: false
          schema:
            type: string
            format: date
            example: '2026-10-01'
          description: >-
            Primeiro dia do intervalo, `YYYY-MM-DD`, inclusive (UTC). Envie
            junto com `end_date`: quando um dos dois está ausente, ambos são
            ignorados e o intervalo vai de 30 dias antes de hoje até hoje.
        - name: end_date
          in: query
          required: false
          schema:
            type: string
            format: date
            example: '2026-10-15'
          description: >-
            Último dia do intervalo, `YYYY-MM-DD`, inclusivo (UTC). Uma data
            futura conta como hoje. O intervalo não pode exceder 730 dias.
        - name: scope
          in: query
          required: false
          schema:
            type: string
            enum:
              - home
              - kyc
              - kyb
              - transactions
          description: >-
            Aba do painel para a qual retornar widgets (sem diferenciar
            maiúsculas de minúsculas). Omita-a, junto com `widget_keys`, para
            obter o resumo de KYC. Enviar apenas `widget_keys` implica `kyc`.
            `home` aceita qualquer widget de KYC, KYB ou de transações e usa por
            padrão o layout inicial salvo da aplicação.
        - name: widget_keys
          in: query
          required: false
          schema:
            type: string
            example: tx_count_total,tx_count_daily
          description: >-
            Chaves de widget separadas por vírgula, respondidas nesta ordem. As
            chaves que o escopo não aceita são descartadas; quando não sobra
            nenhuma, você recebe os padrões do escopo. 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`. Transações: `tx_count_total`,
            `tx_count_daily`, `tx_volume_total_preferred_currency`,
            `tx_volume_daily_preferred_currency`, `tx_average_amount`,
            `tx_average_amount_daily`, `tx_transaction_category_breakdown`,
            `tx_action_type_breakdown`, `tx_status_volume_trend`,
            `tx_user_ip_or_country_distribution`, `tx_tag_breakdown`,
            `tx_top_rules_triggered`, `tx_team_member_performance`,
            `tx_score_histogram`.
        - name: workflow_ids
          in: query
          required: false
          schema:
            type: string
            example: 33333333-4444-5555-6666-777777777777
          description: >-
            IDs de fluxo separados por vírgula. Limita o resumo de KYC e os
            widgets de KYC e KYB a esses fluxos. Valores que não são UUIDs são
            ignorados; quando nenhum é válido, o filtro é descartado. O resumo
            também aceita `workflow_id`.
        - name: versions
          in: query
          required: false
          schema:
            type: string
            example: 3,4
          description: >-
            Números de versão do fluxo separados por vírgula. Aplica-se somente
            em conjunto com `workflow_ids`; valores que não são números inteiros
            são ignorados. `version` é aceito como alias.
        - name: branch_path_ids
          in: query
          required: false
          schema:
            type: string
            example: default
          description: >-
            IDs de caminhos de ramificação separados por vírgula. Só se aplica
            junto com `workflow_ids` e apenas aos números de KYC. Atualmente, os
            números são registrados apenas para `default` (todos os caminhos
            combinados), então qualquer outro valor retorna números vazios.
            `branch_path_id` é aceito como alias.
        - name: tag
          in: query
          required: false
          schema:
            type: string
          description: >-
            Somente widgets de transações: UUIDs ou nomes de tags separados por
            vírgula.
        - name: transaction_type
          in: query
          required: false
          schema:
            type: string
            example: finance
          description: >-
            Somente widgets de transações: categorias de transação separadas por
            vírgula.
        - name: action_type
          in: query
          required: false
          schema:
            type: string
            example: withdrawal
          description: >-
            Somente widgets de transações: tipos de ação separados por vírgula
            (sem distinção entre maiúsculas e minúsculas).
      responses:
        '200':
          description: >-
            O resumo de KYC, ou os widgets solicitados quando `scope` ou
            `widget_keys` é enviado.
          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: >-
            Intervalo de datas ou escopo inválido. O corpo é um objeto indexado
            pelo parâmetro problemático, com uma mensagem em string.
          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: >-
            A chave de API expirou. Somente uma chave criada com data de
            validade pode expirar; após essa data, toda requisição feita com ela
            responde `401`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              examples:
                Expired key:
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            A requisição não é permitida. Leia `detail`: uma chave de API
            ausente (uma chave errada, revogada ou expirada recebe `401`), uma
            chave de outra aplicação, qualquer chave com escopo ou uma
            requisição feita fora da lista de IPs da chave.
          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: >-
            Mais de 600 requisições GET por minuto com esta chave de API.
            Aguarde o número de segundos indicado em `Retry-After` e tente
            novamente.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              examples:
                Throttled:
                  value:
                    detail: >-
                      GET request rate limit exceeded. You can make up to 600
                      requests per minute.
          headers:
            Retry-After:
              description: Segundos até a janela atual de um minuto ser reiniciada.
              schema:
                type: integer
                example: 23
            X-RateLimit-Limit:
              description: Requisições permitidas por minuto nesta cota.
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: Requisições restantes na janela atual.
              schema:
                type: integer
            X-RateLimit-Reset:
              description: Horário Unix em que a janela é reiniciada.
              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: >-
        Resumo da verificação de usuários (KYC), retornado quando nem `scope`
        nem `widget_keys` são enviados.
      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: >-
            Um ponto por dia, do primeiro dia com sessões no intervalo até
            `end_date`. Sempre diário, independentemente do que `grouping_mode`
            indicar.
        request_breakdown:
          $ref: '#/components/schemas/ApplicationAnalyticsRequestBreakdown'
        previous_data_points:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsDataPoint'
          description: >-
            Pontos diários do período de mesma duração imediatamente anterior a
            `start_date`.
        previous_request_breakdown:
          $ref: '#/components/schemas/ApplicationAnalyticsRequestBreakdown'
        conversion_rate:
          type: number
          nullable: true
          description: >-
            `total_approved / (total_approved + total_declined +
            total_in_review) x 100`, com uma casa decimal. `null` quando nada
            foi concluído.
        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: >-
            Como as listas `*_time_series` são agrupadas: `day` para até 14
            dias, `week` até 90, `month` acima disso. Medido a partir do
            primeiro dia com sessões no intervalo.
        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 do painel, retornados quando `scope` ou `widget_keys` é enviado.
      required:
        - scope
        - available_widget_keys
        - requested_widget_keys
        - widgets
      properties:
        scope:
          type: string
          enum:
            - home
            - kyc
            - kyb
            - transactions
          description: Aba do painel.
        available_widget_keys:
          type: array
          items:
            type: string
          description: Todas as chaves de widget que este escopo aceita.
        requested_widget_keys:
          type: array
          items:
            type: string
          description: >-
            As chaves do widget respondidas, em ordem: suas `widget_keys`
            válidas ou os padrões do escopo.
        widgets:
          type: object
          description: Indexado pela chave do widget, na ordem de `requested_widget_keys`.
          additionalProperties:
            $ref: '#/components/schemas/ApplicationAnalyticsWidget'
    ApplicationAnalyticsDataPoint:
      type: object
      description: >-
        Contagens de sessões de um dia, por data de criação (UTC). Cada contagem
        reflete o status atual da sessão. Os pontos do período anterior contêm
        pelo menos os campos obrigatórios.
      required:
        - rounded_date
        - total
        - approved
        - declined
        - canceled
        - pending
      properties:
        rounded_date:
          type: string
          format: date
          description: O dia, `YYYY-MM-DD`.
        total:
          type: integer
          description: Sessões criadas naquele dia.
        approved:
          type: integer
          description: Dessas, as sessões `Approved` ou `Kyc Expired`.
        declined:
          type: integer
          description: Sessões `Declined`.
        canceled:
          type: integer
          description: Sessões `Expired` ou `Abandoned`.
        pending:
          type: integer
          description: Sessões `Not Started`, `In Progress` ou `In Review`.
        in_review:
          type: integer
          description: Sessões `In Review`.
        expired:
          type: integer
          description: Sessões `Expired`.
        abandoned:
          type: integer
          description: Sessões `Abandoned`.
        in_progress:
          type: integer
          description: Sessões `In Progress`.
        not_started:
          type: integer
          description: Sessões `Not Started`.
        manually_approved:
          type: integer
          description: >-
            Sessões que um revisor aprovou depois que o fluxo deu outro
            veredito.
        manually_declined:
          type: integer
          description: >-
            Sessões que um revisor recusou depois que o fluxo deu outro
            veredito.
    ApplicationAnalyticsRequestBreakdown:
      type: object
      description: >-
        Totais por status no intervalo. O detalhamento do período anterior
        contém pelo menos os campos obrigatórios.
      required:
        - total_approved
        - total_in_review
        - total_declined
        - total_canceled
        - total_pending
      properties:
        total_approved:
          type: integer
          description: Sessões `Approved` ou `Kyc Expired`.
        total_in_review:
          type: integer
          description: Sessões `In Review`.
        total_declined:
          type: integer
          description: Sessões `Declined`.
        total_canceled:
          type: integer
          description: Sessões `Expired` ou `Abandoned`.
        total_pending:
          type: integer
          description: >-
            Sessões `Not Started`, `In Progress` ou `In Review` (inclui
            `total_in_review`).
        total_expired:
          type: integer
          description: Sessões `Expired`.
        total_abandoned:
          type: integer
          description: Sessões `Abandoned`.
        total_in_progress:
          type: integer
          description: Sessões `In Progress`.
        total_not_started:
          type: integer
          description: Sessões `Not Started`.
        total_manually_approved:
          type: integer
          description: Aprovado por um revisor.
        total_manually_declined:
          type: integer
          description: Recusado por um revisor.
    ApplicationAnalyticsLocationStats:
      type: object
      properties:
        ip_countries:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsCountryCount'
          description: >-
            Países dos endereços IP dos usuários, do que tem mais sessões para o
            que tem menos.
        countries:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsCountryCount'
          description: A mesma lista de `ip_countries`.
        id_countries:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsCountryCount'
          description: >-
            Países emissores dos documentos de identidade verificados, começando
            pelos que têm mais sessões.
        conversion_by_country:
          type: array
          description: >-
            Por país emissor do documento: sessões finalizadas (aprovadas,
            recusadas ou em revisão) e quantas foram aprovadas. As com mais
            sessões finalizadas aparecem primeiro.
          items:
            type: object
            properties:
              country:
                type: string
              country_code:
                type: string
              finished:
                type: integer
              approved:
                type: integer
        cities:
          type: array
          description: Até 100 cidades de IP, primeiro as que têm mais sessões.
          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: >-
            Sessões por faixa etária segundo o documento de identidade. Vazio
            quando não há dados.
          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: >-
            Sessões por código de gênero do documento: `M`, `F` ou `U`
            (desconhecido).
          additionalProperties:
            type: integer
    ApplicationAnalyticsDeviceDetails:
      type: object
      description: Os cinco primeiros de cada, do maior para o menor número de sessões.
      properties:
        device_models:
          type: array
          description: >-
            Marcas de dispositivo: `Apple`, `Android` e `LG`. Todas as demais
            são agrupadas como `Other`.
          items:
            type: object
            properties:
              device:
                type: string
              count:
                type: integer
        browsers:
          type: array
          description: >-
            Navegadores: `Chrome`, `Safari`, `Didit App`, `Firefox`; todos os
            demais são agrupados como `Other`.
          items:
            type: object
            properties:
              browser:
                type: string
              count:
                type: integer
        operating_systems:
          type: array
          description: Sistemas operacionais.
          items:
            type: object
            properties:
              os:
                type: string
              count:
                type: integer
    ApplicationAnalyticsWorkflowFunnel:
      type: object
      description: >-
        Indexado por ID do fluxo. `total` são as sessões iniciadas nesse fluxo;
        `steps` conta as sessões que chegaram a cada etapa (`OCR`, `LIVENESS`,
        `FACE_MATCH`, `AML`, `POA`, `PHONE`, `EMAIL`, `NFC`,
        `DATABASE_VALIDATION`, `QUESTIONNAIRE`, `IP_ANALYSIS`, `AGE_ESTIMATION`,
        `KYB_REGISTRY`, `KYB_DOCUMENTS`, `KYB_KEY_PEOPLE`). Chegar a uma etapa
        não significa ser aprovado nela.
      additionalProperties:
        type: object
        properties:
          total:
            type: integer
          steps:
            type: object
            additionalProperties:
              type: object
              properties:
                reached:
                  type: integer
    ApplicationAnalyticsVerificationTimeStats:
      type: object
      description: >-
        Tempo ativo que os usuários passaram na verificação, desconsiderando os
        intervalos de inatividade. Um objeto vazio quando não há dados.
      properties:
        overall_avg_seconds:
          type: number
          description: Média por sessão, com uma casa decimal.
        overall_count:
          type: integer
          description: Sessões medidas.
        per_feature:
          type: object
          description: Indexado por recurso, por exemplo `OCR` ou `LIVENESS`.
          additionalProperties:
            type: object
            properties:
              avg_seconds:
                type: number
              total_seconds:
                type: number
              count:
                type: integer
        per_sub_step:
          type: object
          description: >-
            Indexado por recurso e depois por subetapa, por exemplo
            `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: Sessões concluídas sem reenvio.
        second:
          type: integer
          description: Sessões concluídas reenviadas uma vez.
        third_plus:
          type: integer
          description: Sessões concluídas reenviadas duas ou mais vezes.
        abandoned:
          type: integer
          description: Sessões abandonadas.
    ApplicationAnalyticsWarningStats:
      type: object
      description: >-
        Indexado por recurso (`ID_VERIFICATION`, `LIVENESS`, `FACEMATCH`, `AML`,
        `PROOF_OF_ADDRESS`, `PHONE`, `EMAIL`, `NFC`, `LOCATION`,
        `DATABASE_VALIDATION`, `QUESTIONNAIRE` e os recursos de KYB). `total`
        são as sessões que chegaram ao recurso; `risks` conta as sessões por
        código e nível de aviso.
      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: >-
        O veredito automático do fluxo, antes de qualquer alteração por um
        revisor.
      properties:
        approved:
          type: integer
        in_review:
          type: integer
        declined:
          type: integer
    ApplicationAnalyticsDemographicPoint:
      type: object
      properties:
        date:
          type: string
          description: >-
            Chave do período: `YYYY-MM-DD` para um dia, a segunda-feira de uma
            semana, ou `YYYY-MM` para um mês, conforme `grouping_mode`.
        age_distribution:
          type: object
          additionalProperties:
            type: integer
        gender_distribution:
          type: object
          additionalProperties:
            type: integer
    ApplicationAnalyticsDevicePoint:
      type: object
      properties:
        date:
          type: string
          description: >-
            Chave do período: `YYYY-MM-DD` para um dia, a segunda-feira de uma
            semana, ou `YYYY-MM` para um mês, conforme `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: >-
            Chave do período: `YYYY-MM-DD` para um dia, a segunda-feira de uma
            semana, ou `YYYY-MM` para um mês, conforme `grouping_mode`.
        overall_avg:
          type: number
          description: Média de segundos ativos por sessão.
        per_feature:
          type: object
          description: Média de segundos ativos por recurso.
          additionalProperties:
            type: number
    ApplicationAnalyticsResubmissionPoint:
      type: object
      properties:
        date:
          type: string
          description: >-
            Chave do período: `YYYY-MM-DD` para um dia, a segunda-feira de uma
            semana, ou `YYYY-MM` para um mês, conforme `grouping_mode`.
        first_pass:
          type: integer
        second:
          type: integer
        third_plus:
          type: integer
        abandoned:
          type: integer
    ApplicationAnalyticsOriginalStatusPoint:
      type: object
      properties:
        date:
          type: string
          description: >-
            Chave do período: `YYYY-MM-DD` para um dia, a segunda-feira de uma
            semana, ou `YYYY-MM` para um mês, conforme `grouping_mode`.
        approved:
          type: integer
        in_review:
          type: integer
        declined:
          type: integer
    ApplicationAnalyticsWidget:
      type: object
      description: >-
        Um widget do painel. Todo widget tem `kind` e `title`; os demais campos
        dependem de `kind`. Os widgets de sessão reutilizam os objetos de resumo
        (`data_points`, `request_breakdown`, `workflow_funnel_stats` etc.); os
        widgets de lista colocam suas entradas em `items`; as métricas de
        transação usam `value`.
      required:
        - kind
        - title
      properties:
        kind:
          type: string
          enum:
            - sessions_volume
            - workflow_funnel
            - average_verification_time
            - country_distribution
            - warning_insights
            - conversion_rate
            - conversion_by_country
            - resubmission_insights
            - original_status_distribution
            - database_validation_coverage
            - database_validation_latency
            - demographics
            - device_details
            - horizontal_bar
            - kyb_registry_coverage
            - kyb_registry_data_completeness
            - metric
            - time_series
            - breakdown
            - status_time_series
            - leaderboard
            - histogram
          description: Tipo de widget.
        title:
          type: string
          description: Título de exibição, por exemplo `Verification volume`.
        grouping_mode:
          type: string
          enum:
            - day
            - week
            - month
          description: >-
            Como as listas `*_time_series` são agrupadas: `day` para até 14
            dias, `week` até 90, `month` acima disso. Medido a partir do
            primeiro dia com sessões no intervalo.
        data_points:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsDataPoint'
        request_breakdown:
          $ref: '#/components/schemas/ApplicationAnalyticsRequestBreakdown'
        previous_data_points:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsDataPoint'
        previous_request_breakdown:
          $ref: '#/components/schemas/ApplicationAnalyticsRequestBreakdown'
        conversion_rate:
          type: number
          nullable: true
        workflow_funnel_stats:
          $ref: '#/components/schemas/ApplicationAnalyticsWorkflowFunnel'
        verification_time_stats:
          $ref: '#/components/schemas/ApplicationAnalyticsVerificationTimeStats'
        verification_time_time_series:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsVerificationTimePoint'
        warning_stats:
          $ref: '#/components/schemas/ApplicationAnalyticsWarningStats'
        resubmission_stats:
          $ref: '#/components/schemas/ApplicationAnalyticsResubmissionStats'
        resubmission_time_series:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsResubmissionPoint'
        original_status_stats:
          $ref: '#/components/schemas/ApplicationAnalyticsOriginalStatusStats'
        original_status_time_series:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsOriginalStatusPoint'
        demographic_stats:
          $ref: '#/components/schemas/ApplicationAnalyticsDemographicStats'
        demographic_time_series:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsDemographicPoint'
        device_details:
          $ref: '#/components/schemas/ApplicationAnalyticsDeviceDetails'
        device_time_series:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsDevicePoint'
        items:
          type: array
          description: >-
            Entradas de um widget de lista. `country_distribution` (KYC):
            `country`, `country_code`, `session_count`. `conversion_by_country`:
            `country`, `country_code`, `finished`, `approved`. `time_series`:
            `date`, `value`. `status_time_series`: `date`, `approved`,
            `declined`, `flagged`. `breakdown`: `transaction_type` ou
            `action_type` com `count` e `volume`, ou `tag_id`, `tag_name`,
            `count`. `leaderboard`: `rule_title`, `trigger_count` ou `assignee`,
            `handled_count`, `average_processing_seconds`, cada um com
            `approved_percentage`, `declined_percentage`, `flagged_percentage`.
            `histogram`: `score`, `count`.
          items:
            type: object
            additionalProperties: {}
        previous_items:
          type: array
          description: >-
            Série temporal de transações do período de mesma duração
            imediatamente anterior a `start_date`.
          items:
            type: object
            additionalProperties: {}
        value:
          type: number
          description: 'Widgets `metric`: o valor para o período.'
        currency:
          type: string
          nullable: true
          description: >-
            Widgets de volume e valor de transações: a moeda de transação padrão
            da aplicação.
        thresholds:
          type: object
          description: >-
            Widget `histogram`: os limiares de pontuação de revisão e de recusa
            da aplicação.
          properties:
            review:
              type: integer
            decline:
              type: integer
        search:
          type: object
          description: 'Widget `kyb_registry_coverage`: totais de buscas em registros.'
          properties:
            searches_total:
              type: integer
            searches_with_no_candidates:
              type: integer
    ApplicationAnalyticsCountryCount:
      type: object
      properties:
        country:
          type: string
          description: Nome do país.
        country_code:
          type: string
          description: Código de país de duas letras.
        session_count:
          type: integer
          description: Sessões daquele país.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Chave de API da sua aplicação, em Developers -> API keys no Business
        Console. A chave principal tem acesso total. Uma chave nomeada pode ter
        escopo restrito: nenhum acesso, leitura ou escrita por recurso, limitada
        a alguns fluxos ou a sessões aprovadas, a uma lista de endereços IP e a
        uma data de validade. 401 significa que a chave está errada, revogada ou
        expirada; 403 significa que nenhuma chave foi enviada, que a chave não
        tem acesso a este recurso ou ação, ou que a requisição veio de um
        endereço fora da sua lista de IPs; 404 em uma rota de sessão significa
        que a sessão está fora dos fluxos ou status da chave. Uma chave sem
        acesso a mídia recebe URLs de imagem, vídeo e PDF como null, e uma chave
        sem permissão de escrita em sessões recebe links e tokens de sessão como
        null. Consulte https://docs.didit.me/console/api-keys.

````

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