> ## 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.

# Get Application Analytics

> Read the verification analytics of your application for a date range: KYC session totals, conversion, funnels, or KYB and transaction dashboard widgets.



Get Application Analytics API Prompt
        Copy prompt to clipboard



      
      

\<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 or invalid key ({"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>



      
      

Paste into

The endpoint returns the numbers behind the [analytics dashboard](/console/analytics.md) of the Business Console. It has two response shapes:| You send | You get |
| - | - |
| Neither `scope` nor `widget_keys` | The user verification (KYC) summary for the range |
| `scope`, `widget_keys`, or both | Dashboard widgets for one tab: `kyc`, `kyb`, `transactions`, or `home` (any mix of the three) |Every widget carries a `kind` and a `title`; the rest of its fields depend on the kind. Send `scope` without `widget_keys` once to read `available_widget_keys`, then request only the widgets you need.> [!NOTE]
>
> Only a full-access API key can call this endpoint. A scoped key gets `403` whatever access it holds, and so does a key of another application. See [API keys](/console/api-keys.md).## Related- [Analytics dashboard](/console/analytics.md)
- [API keys and scoped access](/console/api-keys.md)


## OpenAPI

````yaml GET /v3/organization/{organization_id}/application/{application_id}/analytics/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: Identity verification API. Authenticate with x-api-key header.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/organization/{organization_id}/application/{application_id}/analytics/:
    get:
      tags:
        - Analytics
      summary: Get application analytics
      description: >-
        Read the numbers behind the Business Console [analytics
        dashboard](https://docs.didit.me/console/analytics) for a date range.
        Without `scope` and `widget_keys` the response is the user verification
        (KYC) summary (`ApplicationAnalyticsSummary`): daily session counts,
        status totals, conversion rate, the same figures for the preceding
        period of equal length, locations, demographics, devices, workflow
        funnels, active verification time, resubmissions, warnings and time
        series. With `scope` or `widget_keys` it is the widgets of one dashboard
        tab (`ApplicationAnalyticsWidgetResponse`): `kyc`, `kyb`, `transactions`
        or `home`.


        Session counts are by session creation date (UTC) and reflect each
        session's current status. They come from daily rollups refreshed in the
        background, so the newest activity can take a short while to appear.
        Invalid workflow IDs and versions are ignored rather than rejected.
        Nothing is billed.


        Only a full-access API key can call this endpoint: every scoped key gets
        `403`, whatever access it holds, and so does a key of another
        application. See [API keys](https://docs.didit.me/console/api-keys).
      operationId: get_application_analytics
      parameters:
        - name: organization_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Organization UUID.
          example: 11111111-2222-3333-4444-555555555555
        - name: application_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: >-
            Application UUID. Must be the application the API key belongs to: a
            key used on any other application gets `403`.
          example: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
        - name: start_date
          in: query
          required: false
          schema:
            type: string
            format: date
            example: '2026-10-01'
          description: >-
            First day of the range, `YYYY-MM-DD`, inclusive (UTC). Send it
            together with `end_date`: when either is missing, both are ignored
            and the range runs from 30 days before today through today.
        - name: end_date
          in: query
          required: false
          schema:
            type: string
            format: date
            example: '2026-10-15'
          description: >-
            Last day of the range, `YYYY-MM-DD`, inclusive (UTC). A future date
            counts as today. The range may not exceed 730 days.
        - name: scope
          in: query
          required: false
          schema:
            type: string
            enum:
              - home
              - kyc
              - kyb
              - transactions
          description: >-
            Dashboard tab to return widgets for (case-insensitive). Omit it,
            together with `widget_keys`, for the KYC summary. Sending only
            `widget_keys` implies `kyc`. `home` accepts any KYC, KYB or
            transaction widget and defaults to the application's saved home
            layout.
        - name: widget_keys
          in: query
          required: false
          schema:
            type: string
            example: tx_count_total,tx_count_daily
          description: >-
            Comma-separated widget keys, answered in this order. Keys the scope
            does not accept are dropped; when none is left you get the scope's
            defaults. KYC: `kyc_sessions_volume`, `kyc_warning_insights`,
            `kyc_id_locations`, `kyc_ip_locations`, `kyc_workflow_funnel`,
            `kyc_average_verification_time`, `kyc_conversion_rate`,
            `kyc_conversion_by_country`, `kyc_resubmission_insights`,
            `kyc_original_status_distribution`,
            `kyc_database_validation_coverage`,
            `kyc_database_validation_latency`, `kyc_demographics`,
            `kyc_device_details`. KYB: `kyb_sessions_volume`,
            `kyb_workflow_funnel`, `kyb_average_verification_time`,
            `kyb_ip_locations`, `kyb_business_country_distribution`,
            `kyb_warning_insights`, `kyb_conversion_rate`,
            `kyb_conversion_by_country`, `kyb_industry_breakdown`,
            `kyb_resubmission_insights`, `kyb_original_status_distribution`,
            `kyb_registry_coverage`, `kyb_registry_data_completeness`,
            `kyb_device_details`. Transactions: `tx_count_total`,
            `tx_count_daily`, `tx_volume_total_preferred_currency`,
            `tx_volume_daily_preferred_currency`, `tx_average_amount`,
            `tx_average_amount_daily`, `tx_transaction_category_breakdown`,
            `tx_action_type_breakdown`, `tx_status_volume_trend`,
            `tx_user_ip_or_country_distribution`, `tx_tag_breakdown`,
            `tx_top_rules_triggered`, `tx_team_member_performance`,
            `tx_score_histogram`.
        - name: workflow_ids
          in: query
          required: false
          schema:
            type: string
            example: 33333333-4444-5555-6666-777777777777
          description: >-
            Comma-separated workflow IDs. Limits the KYC summary and the KYC and
            KYB widgets to those workflows. Values that are not UUIDs are
            ignored; when none is valid the filter is dropped. The summary also
            accepts `workflow_id`.
        - name: versions
          in: query
          required: false
          schema:
            type: string
            example: 3,4
          description: >-
            Comma-separated workflow version numbers. Applies only together with
            `workflow_ids`; values that are not whole numbers are ignored.
            `version` is accepted as an alias.
        - name: branch_path_ids
          in: query
          required: false
          schema:
            type: string
            example: default
          description: >-
            Comma-separated branch path IDs. Applies only together with
            `workflow_ids`, and only to KYC figures. Figures are currently
            recorded only for `default` (all paths combined), so any other value
            returns empty figures. `branch_path_id` is accepted as an alias.
        - name: tag
          in: query
          required: false
          schema:
            type: string
          description: 'Transaction widgets only: comma-separated tag UUIDs or tag names.'
        - name: transaction_type
          in: query
          required: false
          schema:
            type: string
            example: finance
          description: 'Transaction widgets only: comma-separated transaction categories.'
        - name: action_type
          in: query
          required: false
          schema:
            type: string
            example: withdrawal
          description: >-
            Transaction widgets only: comma-separated action types
            (case-insensitive).
      responses:
        '200':
          description: >-
            The KYC summary, or the requested widgets when `scope` or
            `widget_keys` is sent.
          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: >-
            Invalid date range or scope. The body is an object keyed by the
            offending parameter, with a string message.
          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: >-
            The API key has expired. Only a key created with an expiry date can
            expire; after that date every request with it answers `401`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              examples:
                Expired key:
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            The request is not allowed. Read `detail`: a missing or invalid API
            key (never `401`), a key of another application, any scoped key, or
            a request from outside the key's IP list.
          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: >-
            More than 600 GET requests per minute with this API key. Wait the
            number of seconds in `Retry-After`, then retry.
          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: Seconds until the current one-minute window resets.
              schema:
                type: integer
                example: 23
            X-RateLimit-Limit:
              description: Requests allowed per minute in this budget.
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: Requests left in the current window.
              schema:
                type: integer
            X-RateLimit-Reset:
              description: Unix time when the window resets.
              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: >-
            import os


            import requests


            org_id = '11111111-2222-3333-4444-555555555555'

            app_id = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'

            resp = requests.get(
                f'https://verification.didit.me/v3/organization/{org_id}/application/{app_id}/analytics/',
                headers={'x-api-key': os.environ['DIDIT_API_KEY']},
                params={'start_date': '2026-10-01', 'end_date': '2026-10-15'},
                timeout=10,
            )

            resp.raise_for_status()

            data = resp.json()

            print(data['request_breakdown']['total_approved'],
            data['conversion_rate'])
        - lang: javascript
          label: JavaScript
          source: >-
            const orgId = '11111111-2222-3333-4444-555555555555';

            const appId = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee';

            const params = new URLSearchParams({ start_date: '2026-10-01',
            end_date: '2026-10-15' });

            const resp = await fetch(
              `https://verification.didit.me/v3/organization/${orgId}/application/${appId}/analytics/?${params}`,
              { headers: { 'x-api-key': process.env.DIDIT_API_KEY } },
            );

            if (!resp.ok) throw new Error(`Analytics failed: ${resp.status}`);

            const data = await resp.json();

            console.log(data.request_breakdown.total_approved,
            data.conversion_rate);
components:
  schemas:
    ApplicationAnalyticsSummary:
      type: object
      description: >-
        User verification (KYC) summary, returned when neither `scope` nor
        `widget_keys` is sent.
      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: >-
            One point per day, from the first day with sessions in the range to
            `end_date`. Always daily, whatever `grouping_mode` says.
        request_breakdown:
          $ref: '#/components/schemas/ApplicationAnalyticsRequestBreakdown'
        previous_data_points:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsDataPoint'
          description: >-
            Daily points for the period of the same length right before
            `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`, one decimal. `null` when nothing finished.
        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: >-
            How the `*_time_series` lists are grouped: `day` for up to 14 days,
            `week` up to 90, `month` beyond. Measured from the first day with
            sessions in the range.
        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: Dashboard widgets, returned when `scope` or `widget_keys` is sent.
      required:
        - scope
        - available_widget_keys
        - requested_widget_keys
        - widgets
      properties:
        scope:
          type: string
          enum:
            - home
            - kyc
            - kyb
            - transactions
          description: Dashboard tab.
        available_widget_keys:
          type: array
          items:
            type: string
          description: Every widget key this scope accepts.
        requested_widget_keys:
          type: array
          items:
            type: string
          description: >-
            The widget keys answered, in order: your valid `widget_keys`, or the
            scope's defaults.
        widgets:
          type: object
          description: Keyed by widget key, in the order of `requested_widget_keys`.
          additionalProperties:
            $ref: '#/components/schemas/ApplicationAnalyticsWidget'
    ApplicationAnalyticsDataPoint:
      type: object
      description: >-
        Session counts for one day, by creation date (UTC). Each count reflects
        the session's current status. Points of the previous period carry at
        least the required fields.
      required:
        - rounded_date
        - total
        - approved
        - declined
        - canceled
        - pending
      properties:
        rounded_date:
          type: string
          format: date
          description: The day, `YYYY-MM-DD`.
        total:
          type: integer
          description: Sessions created that day.
        approved:
          type: integer
          description: Of those, sessions `Approved` or `Kyc Expired`.
        declined:
          type: integer
          description: Sessions `Declined`.
        canceled:
          type: integer
          description: Sessions `Expired` or `Abandoned`.
        pending:
          type: integer
          description: Sessions `Not Started`, `In Progress` or `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 a reviewer approved after the workflow gave another
            verdict.
        manually_declined:
          type: integer
          description: >-
            Sessions a reviewer declined after the workflow gave another
            verdict.
    ApplicationAnalyticsRequestBreakdown:
      type: object
      description: >-
        Status totals for the range. The previous-period breakdown carries at
        least the required fields.
      required:
        - total_approved
        - total_in_review
        - total_declined
        - total_canceled
        - total_pending
      properties:
        total_approved:
          type: integer
          description: Sessions `Approved` or `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` or `Abandoned`.
        total_pending:
          type: integer
          description: >-
            Sessions `Not Started`, `In Progress` or `In Review` (includes
            `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: Approved by a reviewer.
        total_manually_declined:
          type: integer
          description: Declined by a reviewer.
    ApplicationAnalyticsLocationStats:
      type: object
      properties:
        ip_countries:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsCountryCount'
          description: Countries of the users' IP addresses, most sessions first.
        countries:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsCountryCount'
          description: Same list as `ip_countries`.
        id_countries:
          type: array
          items:
            $ref: '#/components/schemas/ApplicationAnalyticsCountryCount'
          description: Issuing countries of the verified ID documents, most sessions first.
        conversion_by_country:
          type: array
          description: >-
            Per document issuing country: finished sessions (approved, declined
            or in review) and how many were approved. Most finished first.
          items:
            type: object
            properties:
              country:
                type: string
              country_code:
                type: string
              finished:
                type: integer
              approved:
                type: integer
        cities:
          type: array
          description: Up to 100 IP cities, most sessions first.
          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 age band from the ID document. Empty when there is no
            data.
          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 document gender code: `M`, `F` or `U` (unknown).'
          additionalProperties:
            type: integer
    ApplicationAnalyticsDeviceDetails:
      type: object
      description: Top five of each, most sessions first.
      properties:
        device_models:
          type: array
          description: >-
            Device brands: `Apple`, `Android`, `LG`, everything else grouped as
            `Other`.
          items:
            type: object
            properties:
              device:
                type: string
              count:
                type: integer
        browsers:
          type: array
          description: >-
            Browsers: `Chrome`, `Safari`, `Didit App`, `Firefox`, everything
            else grouped as `Other`.
          items:
            type: object
            properties:
              browser:
                type: string
              count:
                type: integer
        operating_systems:
          type: array
          description: Operating systems.
          items:
            type: object
            properties:
              os:
                type: string
              count:
                type: integer
    ApplicationAnalyticsWorkflowFunnel:
      type: object
      description: >-
        Keyed by workflow ID. `total` is the sessions started on that workflow;
        `steps` counts the sessions that reached each step (`OCR`, `LIVENESS`,
        `FACE_MATCH`, `AML`, `POA`, `PHONE`, `EMAIL`, `NFC`,
        `DATABASE_VALIDATION`, `QUESTIONNAIRE`, `IP_ANALYSIS`, `AGE_ESTIMATION`,
        `KYB_REGISTRY`, `KYB_DOCUMENTS`, `KYB_KEY_PEOPLE`). Reaching a step is
        not passing it.
      additionalProperties:
        type: object
        properties:
          total:
            type: integer
          steps:
            type: object
            additionalProperties:
              type: object
              properties:
                reached:
                  type: integer
    ApplicationAnalyticsVerificationTimeStats:
      type: object
      description: >-
        Active time users spent verifying, ignoring idle gaps. An empty object
        when there is no data.
      properties:
        overall_avg_seconds:
          type: number
          description: Average per session, one decimal.
        overall_count:
          type: integer
          description: Sessions measured.
        per_feature:
          type: object
          description: Keyed by feature, for example `OCR` or `LIVENESS`.
          additionalProperties:
            type: object
            properties:
              avg_seconds:
                type: number
              total_seconds:
                type: number
              count:
                type: integer
        per_sub_step:
          type: object
          description: Keyed by feature, then by sub-step, for example `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: Finished sessions with no resubmission.
        second:
          type: integer
          description: Finished sessions resubmitted once.
        third_plus:
          type: integer
          description: Finished sessions resubmitted two or more times.
        abandoned:
          type: integer
          description: Abandoned sessions.
    ApplicationAnalyticsWarningStats:
      type: object
      description: >-
        Keyed by feature (`ID_VERIFICATION`, `LIVENESS`, `FACEMATCH`, `AML`,
        `PROOF_OF_ADDRESS`, `PHONE`, `EMAIL`, `NFC`, `LOCATION`,
        `DATABASE_VALIDATION`, `QUESTIONNAIRE` and the KYB features). `total` is
        the sessions that reached the feature; `risks` counts sessions per
        warning code and level.
      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: The workflow's automatic verdict, before any reviewer changed it.
      properties:
        approved:
          type: integer
        in_review:
          type: integer
        declined:
          type: integer
    ApplicationAnalyticsDemographicPoint:
      type: object
      properties:
        date:
          type: string
          description: >-
            Period key: `YYYY-MM-DD` for a day, the Monday of a week, or
            `YYYY-MM` for a month, following `grouping_mode`.
        age_distribution:
          type: object
          additionalProperties:
            type: integer
        gender_distribution:
          type: object
          additionalProperties:
            type: integer
    ApplicationAnalyticsDevicePoint:
      type: object
      properties:
        date:
          type: string
          description: >-
            Period key: `YYYY-MM-DD` for a day, the Monday of a week, or
            `YYYY-MM` for a month, following `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: >-
            Period key: `YYYY-MM-DD` for a day, the Monday of a week, or
            `YYYY-MM` for a month, following `grouping_mode`.
        overall_avg:
          type: number
          description: Average active seconds per session.
        per_feature:
          type: object
          description: Average active seconds per feature.
          additionalProperties:
            type: number
    ApplicationAnalyticsResubmissionPoint:
      type: object
      properties:
        date:
          type: string
          description: >-
            Period key: `YYYY-MM-DD` for a day, the Monday of a week, or
            `YYYY-MM` for a month, following `grouping_mode`.
        first_pass:
          type: integer
        second:
          type: integer
        third_plus:
          type: integer
        abandoned:
          type: integer
    ApplicationAnalyticsOriginalStatusPoint:
      type: object
      properties:
        date:
          type: string
          description: >-
            Period key: `YYYY-MM-DD` for a day, the Monday of a week, or
            `YYYY-MM` for a month, following `grouping_mode`.
        approved:
          type: integer
        in_review:
          type: integer
        declined:
          type: integer
    ApplicationAnalyticsWidget:
      type: object
      description: >-
        One dashboard widget. Every widget has `kind` and `title`; the other
        fields depend on `kind`. The session widgets reuse the summary objects
        (`data_points`, `request_breakdown`, `workflow_funnel_stats` and so on);
        list widgets put their entries in `items`; transaction metrics use
        `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: Widget type.
        title:
          type: string
          description: Display title, for example `Verification volume`.
        grouping_mode:
          type: string
          enum:
            - day
            - week
            - month
          description: >-
            How the `*_time_series` lists are grouped: `day` for up to 14 days,
            `week` up to 90, `month` beyond. Measured from the first day with
            sessions in the range.
        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: >-
            Entries of a list widget. `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` or `action_type` with
            `count` and `volume`, or `tag_id`, `tag_name`, `count`.
            `leaderboard`: `rule_title`, `trigger_count` or `assignee`,
            `handled_count`, `average_processing_seconds`, each with
            `approved_percentage`, `declined_percentage`, `flagged_percentage`.
            `histogram`: `score`, `count`.
          items:
            type: object
            additionalProperties: {}
        previous_items:
          type: array
          description: >-
            Transaction time series for the period of the same length right
            before `start_date`.
          items:
            type: object
            additionalProperties: {}
        value:
          type: number
          description: '`metric` widgets: the figure for the range.'
        currency:
          type: string
          nullable: true
          description: >-
            Transaction volume and amount widgets: the application's default
            transaction currency.
        thresholds:
          type: object
          description: >-
            `histogram` widget: the application's review and decline score
            thresholds.
          properties:
            review:
              type: integer
            decline:
              type: integer
        search:
          type: object
          description: '`kyb_registry_coverage` widget: registry search totals.'
          properties:
            searches_total:
              type: integer
            searches_with_no_candidates:
              type: integer
    ApplicationAnalyticsCountryCount:
      type: object
      properties:
        country:
          type: string
          description: Country name.
        country_code:
          type: string
          description: Two-letter country code.
        session_count:
          type: integer
          description: Sessions from that country.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Your application's API key, from Developers -> API keys in the Business
        Console. The primary key has full access. A named key can be scoped:
        none, read or write per resource, limited to some workflows or to
        approved sessions, to a list of IP addresses, and to an expiry date. 401
        means the key is missing, wrong, revoked or expired; 403 means the key
        has no access to this resource or action, or the request came from an
        address outside its IP list; 404 on a session route means the session is
        outside the key's workflows or statuses. A key without media access
        receives image, video and PDF URLs as null, and a key without sessions
        write receives session links and tokens as null. See
        https://docs.didit.me/console/api-keys.

````

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