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

# Ambil Laporan Async API

> Ambil laporan async Didit beserta status pembuatan, file, ID sesi gagal yang aktif, dan jumlah kegagalan sebelum memilih item untuk dicoba lagi.

Reports API asinkron Didit mengembalikan tugas ekspor beserta daftar kegagalannya saat ini. `failed_count` sama dengan panjang `failed_item_ids`; sesi yang dihapus tidak disertakan.

Temukan laporan menggunakan [Daftar laporan asinkron](https://docs.didit.me/id/management-api/reports/list.md), lalu ikuti [panduan untuk mencoba lagi](https://docs.didit.me/id/console/export-pdf-csv.md#coba-lagi-item-ekspor-yang-gagal) atau [coba lagi ekspor tersebut](https://docs.didit.me/id/management-api/reports/retry.md).


## OpenAPI

````yaml id/openapi-25.json GET /v3/organization/{organization_id}/application/{application_id}/reports/{report_uuid}/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API Verifikasi Identitas. Lakukan autentikasi dengan header x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/organization/{organization_id}/application/{application_id}/reports/{report_uuid}/:
    get:
      tags:
        - Reports
      summary: Ambil laporan asinkron
      description: >-
        Memerlukan izin baca untuk setiap resource yang tercakup dalam laporan.
        Kredensial aplikasi/kunci API harus milik aplikasi di path. Token Bearer
        anggota harus memiliki akses ke aplikasi. failed_item_ids mengecualikan
        sesi yang dihapus; failed_count adalah panjangnya.
      operationId: retrieve_reports
      parameters:
        - name: organization_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: ID organisasi.
        - name: application_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: ID aplikasi.
        - name: report_uuid
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: UUID laporan.
      responses:
        '200':
          description: Ambil laporan asinkron.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncReport'
        '401':
          description: Kredensial tidak ada, tidak valid, atau sudah kedaluwarsa.
        '403':
          description: >-
            Pemanggil tidak memiliki akses ke aplikasi ini atau izin yang
            diperlukan.
        '404':
          description: Laporan tidak ditemukan di aplikasi ini.
        '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()

            result = client.reports.retrieve(
                "11111111-2222-3333-4444-555555555555",
            )
            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.reports.retrieve("11111111-2222-3333-4444-555555555555");

            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.Reports.Retrieve(ctx, \"11111111-2222-3333-4444-555555555555\")\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.reports().retrieve("11111111-2222-3333-4444-555555555555");

            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->reports->retrieve('11111111-2222-3333-4444-555555555555');

            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.reports.retrieve("11111111-2222-3333-4444-555555555555")

            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.Reports.RetrieveAsync("11111111-2222-3333-4444-555555555555");

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    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: ID laporan.
          format: uuid
        report_type:
          type: string
          description: Jenis ekspor atau laporan kepatuhan.
          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: Label tampilan untuk jenis laporan.
        status:
          type: string
          description: >-
            Status pembuatan. READY dapat menyertakan kegagalan individual;
            periksa failed_count.
          enum:
            - PENDING
            - PROCESSING
            - READY
            - FAILED
        status_display:
          type: string
          description: Label tampilan untuk status pembuatan.
        parameters:
          type: object
          description: Opsi ekspor asli; kunci bergantung pada report_type.
          additionalProperties: true
        requested_by_user_id:
          type: string
          description: >-
            Identitas pemohon asli, atau null untuk pemanggil tanpa identitas
            pengguna.
          format: uuid
          nullable: true
        requested_by_email:
          type: string
          description: Email pemohon, jika tersedia.
          nullable: true
        requested_by_name:
          type: string
          description: Nama tampilan pemohon, jika tersedia.
          nullable: true
        row_count:
          type: integer
          description: Jumlah rekaman yang diekspor, atau null sebelum pembuatan.
          nullable: true
        failed_item_ids:
          type: array
          description: >-
            UUID sesi langsung yang gagal dalam ekspor verifikasi ini. Sesi yang
            dihapus tidak disertakan. Gunakan ID ini untuk coba lagi secara
            selektif.
          items:
            type: string
            format: uuid
        failed_count:
          type: integer
          description: Jumlah entri dalam failed_item_ids.
          minimum: 0
        file_size:
          type: integer
          description: >-
            Total ukuran file yang dihasilkan dalam byte, atau null sebelum
            pembuatan.
          format: int64
          nullable: true
        files:
          type: array
          description: Metadata file yang dihasilkan; tidak berisi URL unduhan.
          items:
            $ref: '#/components/schemas/AsyncReportFile'
        scheduled_report:
          type: string
          description: ID jadwal, atau null untuk laporan yang tidak dijadwalkan.
          format: uuid
          nullable: true
        error_message:
          type: string
          description: Error pembuatan, jika tersedia.
          nullable: true
        deletion_pending:
          type: boolean
          description: Apakah penghapusan yang diminta masih berlangsung.
        eta_seconds:
          type: integer
          description: >-
            Perkiraan detik hingga selesai untuk laporan yang tertunda atau
            sedang diproses; null jika tidak ada riwayat atau jika sudah
            selesai.
          nullable: true
        started_at:
          type: string
          description: Waktu mulai pembuatan.
          format: date-time
          nullable: true
        completed_at:
          type: string
          description: Waktu penyelesaian pembuatan.
          format: date-time
          nullable: true
        expires_at:
          type: string
          description: Waktu kedaluwarsa laporan.
          format: date-time
        created_at:
          type: string
          description: Waktu pembuatan.
          format: date-time
        updated_at:
          type: string
          description: Waktu pembaruan terakhir.
          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'
    AsyncReportFile:
      type: object
      required:
        - name
        - format
        - rows
        - bytes
      properties:
        name:
          type: string
          description: Nama file.
        format:
          type: string
          description: Format file.
        rows:
          type: integer
          description: Catatan yang diekspor dalam file ini, jika berlaku.
          nullable: true
        bytes:
          type: integer
          description: Ukuran file dalam byte.
          format: int64
    RateLimitBudgetError:
      type: object
      description: >-
        Hanya dikembalikan untuk penolakan anggaran batas laju middleware.
        Kesalahan 429 lainnya, termasuk konflik idempotensi dan batas khusus
        endpoint, tidak menjamin bidang metadata ini.
      required:
        - detail
        - reference
        - limit
        - remaining
        - reset
        - window_seconds
      properties:
        detail:
          type: string
          description: Pesan penolakan anggaran yang sudah ada dan mudah dibaca manusia.
        reference:
          type: string
          pattern: ^RL-[0-9a-f]{32}$
          description: >-
            Referensi dukungan (tidak transparan): RL- diikuti 32 karakter
            heksadesimal UUID huruf kecil.
        limit:
          type: integer
          description: >-
            Anggaran untuk cakupan yang terlampaui; sama dengan
            X-RateLimit-Limit.
        remaining:
          type: integer
          minimum: 0
          description: >-
            Sisa anggaran, dibatasi hingga nol; sama dengan
            X-RateLimit-Remaining.
        reset:
          type: integer
          format: int64
          description: Waktu reset jendela dalam detik Unix; sama dengan X-RateLimit-Reset.
        window_seconds:
          type: integer
          description: >-
            Durasi jendela tetap dalam detik, bukan sisa waktu tunggu. Patuhi
            Retry-After sebelum mencoba lagi.
      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
  responses:
    RateLimitedRead:
      description: >-
        Anggaran baca middleware terlampaui. Patuhi Retry-After sebelum mencoba
        lagi.
      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: >-
        Detik untuk menunggu, dibulatkan ke atas ke jendela berikutnya. Tersedia
        pada penolakan anggaran middleware.
      schema:
        type: integer
    BudgetXRateLimitScope:
      description: >-
        Cakupan yang anggarannya terlampaui. Tersedia pada penolakan anggaran
        middleware.
      schema:
        type: string
    BudgetXRateLimitLimit:
      description: >-
        Anggaran untuk cakupan yang terlampaui; sama dengan batas pada body.
        Hadir pada penolakan anggaran middleware.
      schema:
        type: integer
    BudgetXRateLimitRemaining:
      description: >-
        Sisa anggaran, dibatasi hingga nol; sama dengan remaining pada body. Ada
        pada penolakan anggaran middleware.
      schema:
        type: integer
    BudgetXRateLimitReset:
      description: >-
        Waktu reset dalam detik Unix; sama dengan reset di body. Tersedia pada
        penolakan anggaran middleware.
      schema:
        type: integer
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Kunci API aplikasi Anda, dari Developers -> API keys di Business
        Console. Kunci utama memiliki akses penuh. Kunci bernama dapat diberi
        cakupan: none, read, atau write per sumber daya, dibatasi pada beberapa
        alur kerja atau pada sesi yang disetujui, pada daftar alamat IP, dan
        pada tanggal kedaluwarsa. 401 berarti kuncinya salah, dicabut, atau
        kedaluwarsa; 403 berarti tidak ada kunci yang dikirimkan, kunci tidak
        memiliki akses ke sumber daya atau tindakan ini, atau permintaan datang
        dari alamat di luar daftar IP-nya; 404 pada rute sesi berarti sesi
        berada di luar alur kerja atau status kunci tersebut. Kunci tanpa akses
        media menerima URL gambar, video, dan PDF sebagai null, dan kunci tanpa
        izin tulis sesi menerima tautan sesi dan token sebagai null. Lihat
        https://docs.didit.me/console/api-keys.
    BearerAuth:
      type: http
      scheme: bearer
      description: Token akses client-credentials milik aplikasi.

````

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