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

# List Async Reports API

> List Didit async export reports, filter by type or status, and inspect failure counts with application-scoped permissions and pagination.

Didit's async Reports API lists export jobs you can read, newest first. Use `failed_count` and `failed_item_ids` to identify verification exports with individual failures.

See [export and retry guidance](https://docs.didit.me/console/export-pdf-csv.md#retry-failed-export-items), [retrieve one report](https://docs.didit.me/management-api/reports/retrieve.md), or [retry an export](https://docs.didit.me/management-api/reports/retry.md).


## OpenAPI

````yaml openapi-25.json GET /v3/organization/{organization_id}/application/{application_id}/reports/
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}/reports/:
    get:
      tags:
        - Reports
      summary: List async reports
      description: >-
        Requires read permissions for every resource covered by the report.
        Application/API-key credentials must belong to the application in the
        path. Member Bearer tokens must have access to the application. Returns
        readable reports newest first. These async export jobs are separate from
        the Regulatory Reports API. See [Export verification
        data](https://docs.didit.me/console/export-pdf-csv).
      operationId: list_reports
      parameters:
        - name: organization_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Organization id.
        - name: application_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Application id.
        - name: limit
          in: query
          schema:
            type: integer
            default: 50
            minimum: 1
          description: Maximum results per page.
        - name: offset
          in: query
          schema:
            type: integer
            default: 0
            minimum: 0
          description: Number of results to skip.
        - name: status
          in: query
          schema:
            type: string
          description: >-
            Comma-separated or repeated status values: PENDING, PROCESSING,
            READY, FAILED.
        - name: report_type
          in: query
          schema:
            type: string
          description: Comma-separated or repeated report_type values.
        - name: q
          in: query
          schema:
            type: string
          description: >-
            Search by report ID fragment or requester name/email (at most 255
            characters).
      responses:
        '200':
          description: List async reports.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncReportList'
        '400':
          description: Invalid status, report_type or search filter.
        '401':
          description: Missing, invalid or expired credentials.
        '403':
          description: Caller lacks access to this application or the required permissions.
        '429':
          $ref: '#/components/responses/RateLimitedRead'
      security:
        - ApiKeyAuth: []
        - BearerAuth: []
      x-codeSamples:
        - lang: python
          label: Python
          source: |-
            from didit import Didit

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

            for item in client.reports.list():
                print(item)
        - 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();

            for await (const item of didit.reports.list()) {
              console.log(item);
            }
        - 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\niter := client.Reports.ListAutoPaging(ctx, didit.ReportsListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
        - lang: java
          label: Java
          source: |-
            import me.didit.Didit;

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

            for (var item : client.reports().list()) {
                System.out.println(item);
            }
        - 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();

            foreach ($didit->reports->list() as $item) {
                print_r($item->toArray());
            }
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            didit.reports.list.auto_paging_each do |item|
              puts item.to_h
            end
        - 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();

            await foreach (var item in await client.Reports.ListAsync())
            {
                Console.WriteLine(JsonSerializer.Serialize(item));
            }
components:
  schemas:
    AsyncReportList:
      type: object
      required:
        - count
        - next
        - previous
        - results
        - counts
      properties:
        count:
          type: integer
          description: >-
            Result count, normally capped at 100; may be estimated. Follow next
            rather than using count to stop pagination.
        next:
          type: string
          description: Next page URL, or null.
          nullable: true
        previous:
          type: string
          description: Previous page URL, or null.
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/AsyncReport'
        counts:
          type: object
          required:
            - report_type
            - status
          description: Counts of all reports the caller can read, before the list filters.
          properties:
            report_type:
              type: object
              additionalProperties:
                type: integer
            status:
              type: object
              additionalProperties:
                type: integer
    AsyncReport:
      type: object
      required:
        - uuid
        - report_type
        - report_type_display
        - status
        - status_display
        - parameters
        - requested_by_user_id
        - requested_by_email
        - requested_by_name
        - row_count
        - failed_item_ids
        - failed_count
        - file_size
        - files
        - scheduled_report
        - error_message
        - deletion_pending
        - eta_seconds
        - started_at
        - completed_at
        - expires_at
        - created_at
        - updated_at
      properties:
        uuid:
          type: string
          description: Report identifier.
          format: uuid
        report_type:
          type: string
          description: Export or compliance-report kind.
          enum:
            - SESSION_EXPORT
            - TRANSACTION_EXPORT
            - BUSINESS_EXPORT
            - VENDOR_USER_EXPORT
            - VENDOR_BUSINESS_EXPORT
            - CASE_EXPORT
            - CASE_SLA_EXPORT
            - LIST_ENTRY_EXPORT
            - EVENT_EXPORT
            - COMPLIANCE_KYC_KYB
            - COMPLIANCE_AML_LOG
            - COMPLIANCE_TRAVEL_RULE
            - COMPLIANCE_SANCTIONS_PEP
            - COMPLIANCE_RISK_SUMMARY
            - COMPLIANCE_SAR_STR_DRAFT
            - COMPLIANCE_CTR
            - COMPLIANCE_CASE_SUMMARY
        report_type_display:
          type: string
          description: Display label for the report kind.
        status:
          type: string
          description: >-
            Generation state. READY may include individual failures; inspect
            failed_count.
          enum:
            - PENDING
            - PROCESSING
            - READY
            - FAILED
        status_display:
          type: string
          description: Display label for the generation state.
        parameters:
          type: object
          description: Original export options; keys depend on report_type.
          additionalProperties: true
        requested_by_user_id:
          type: string
          description: >-
            Original requester identity, or null for callers without a user
            identity.
          format: uuid
          nullable: true
        requested_by_email:
          type: string
          description: Requester email, when available.
          nullable: true
        requested_by_name:
          type: string
          description: Requester display name, when available.
          nullable: true
        row_count:
          type: integer
          description: Number of exported records, or null before generation.
          nullable: true
        failed_item_ids:
          type: array
          description: >-
            Live session UUIDs that failed in this verification export. Deleted
            sessions are excluded. Use these IDs for a selective retry.
          items:
            type: string
            format: uuid
        failed_count:
          type: integer
          description: Number of entries in failed_item_ids.
          minimum: 0
        file_size:
          type: integer
          description: Total generated file size in bytes, or null before generation.
          format: int64
          nullable: true
        files:
          type: array
          description: Generated file metadata; does not contain download URLs.
          items:
            $ref: '#/components/schemas/AsyncReportFile'
        scheduled_report:
          type: string
          description: Schedule identifier, or null for an unscheduled report.
          format: uuid
          nullable: true
        error_message:
          type: string
          description: Generation error, when available.
          nullable: true
        deletion_pending:
          type: boolean
          description: Whether a requested deletion is still in progress.
        eta_seconds:
          type: integer
          description: >-
            Estimated seconds until completion for a pending or processing
            report; null without history or when done.
          nullable: true
        started_at:
          type: string
          description: Generation start time.
          format: date-time
          nullable: true
        completed_at:
          type: string
          description: Generation completion time.
          format: date-time
          nullable: true
        expires_at:
          type: string
          description: Report expiry time.
          format: date-time
        created_at:
          type: string
          description: Creation time.
          format: date-time
        updated_at:
          type: string
          description: Last update time.
          format: date-time
      example:
        uuid: 00000000-0000-4000-8000-000000000002
        report_type: SESSION_EXPORT
        report_type_display: Verifications
        status: READY
        status_display: Ready
        parameters: {}
        requested_by_user_id: null
        requested_by_email: null
        requested_by_name: null
        row_count: 9
        failed_item_ids:
          - 00000000-0000-4000-8000-000000000001
        failed_count: 1
        file_size: 1200
        files:
          - name: verifications.csv
            format: csv
            rows: 9
            bytes: 1200
        scheduled_report: null
        error_message: null
        deletion_pending: false
        eta_seconds: null
        started_at: '2026-11-11T01:00:00Z'
        completed_at: '2026-11-11T01:01:00Z'
        expires_at: '2026-12-11T01:00:00Z'
        created_at: '2026-11-11T01:00:00Z'
        updated_at: '2026-11-11T01:01:00Z'
    RateLimitBudgetError:
      type: object
      description: >-
        Returned only for a rate-limit middleware budget refusal. Other 429
        errors, including idempotency conflicts and endpoint-specific caps, do
        not promise these metadata fields.
      required:
        - detail
        - reference
        - limit
        - remaining
        - reset
        - window_seconds
      properties:
        detail:
          type: string
          description: Existing human-readable budget refusal message.
        reference:
          type: string
          pattern: ^RL-[0-9a-f]{32}$
          description: >-
            Opaque support reference: RL- followed by 32 lowercase UUID
            hexadecimal characters.
        limit:
          type: integer
          description: Budget for the exceeded scope; equals X-RateLimit-Limit.
        remaining:
          type: integer
          minimum: 0
          description: Remaining budget, clamped to zero; equals X-RateLimit-Remaining.
        reset:
          type: integer
          format: int64
          description: Window reset time in Unix seconds; equals X-RateLimit-Reset.
        window_seconds:
          type: integer
          description: >-
            Fixed-window duration in seconds, not the remaining wait. Honor
            Retry-After before retrying.
      example:
        detail: >-
          Write request rate limit exceeded. You can make up to 300 requests per
          minute.
        reference: RL-00000000000040008000000000000001
        limit: 300
        remaining: 0
        reset: 1794358860
        window_seconds: 60
    AsyncReportFile:
      type: object
      required:
        - name
        - format
        - rows
        - bytes
      properties:
        name:
          type: string
          description: File name.
        format:
          type: string
          description: File format.
        rows:
          type: integer
          description: Exported records in this file, when applicable.
          nullable: true
        bytes:
          type: integer
          description: File size in bytes.
          format: int64
  responses:
    RateLimitedRead:
      description: Middleware read budget exceeded. Honor Retry-After before retrying.
      headers:
        Retry-After:
          $ref: '#/components/headers/BudgetRetryAfter'
        X-RateLimit-Scope:
          $ref: '#/components/headers/BudgetXRateLimitScope'
        X-RateLimit-Limit:
          $ref: '#/components/headers/BudgetXRateLimitLimit'
        X-RateLimit-Remaining:
          $ref: '#/components/headers/BudgetXRateLimitRemaining'
        X-RateLimit-Reset:
          $ref: '#/components/headers/BudgetXRateLimitReset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/RateLimitBudgetError'
          example:
            detail: >-
              GET request rate limit exceeded. You can make up to 600 requests
              per minute.
            reference: RL-00000000000040008000000000000001
            limit: 600
            remaining: 0
            reset: 1794358860
            window_seconds: 60
  headers:
    BudgetRetryAfter:
      description: >-
        Seconds to wait, rounded up to the next window. Present on middleware
        budget refusals.
      schema:
        type: integer
    BudgetXRateLimitScope:
      description: >-
        The scope whose budget was exceeded. Present on middleware budget
        refusals.
      schema:
        type: string
    BudgetXRateLimitLimit:
      description: >-
        Budget for the exceeded scope; equals body limit. Present on middleware
        budget refusals.
      schema:
        type: integer
    BudgetXRateLimitRemaining:
      description: >-
        Remaining budget, clamped to zero; equals body remaining. Present on
        middleware budget refusals.
      schema:
        type: integer
    BudgetXRateLimitReset:
      description: >-
        Reset time in Unix seconds; equals body reset. Present on middleware
        budget refusals.
      schema:
        type: integer
  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 wrong, revoked or expired; 403 means no key was sent,
        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.
    BearerAuth:
      type: http
      scheme: bearer
      description: The application's client-credentials access token.

````

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