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

# Coba Lagi Laporan Async API

> Coba lagi ekspor async Didit atau pilih item verifikasi yang gagal, dengan akses khusus pemohon, pengecualian sesi terhapus, dan penanganan replay.

Async Reports API Didit menjalankan ulang ekspor atau memasukkan item verifikasi yang gagal ke antrean. Permintaan coba lagi baru mengembalikan `201`; pilihan item gagal yang identik mengembalikan laporan yang sudah ada dengan `200`.

> [!WARNING]
>
> Coba lagi selektif memerlukan identitas pengguna pemohon asli. Kunci API atau token aplikasi tanpa identitas tersebut menerima `403` saat mengirim `item_ids`, bahkan untuk aplikasinya sendiri. Contoh kunci API yang dihasilkan menjalankan ulang seluruh ekspor dengan isi kosong.

Baca ID aktif dari [Ambil laporan asinkron](https://docs.didit.me/id/management-api/reports/retrieve.md) dan ikuti [panduan coba lagi item yang gagal](https://docs.didit.me/id/console/export-pdf-csv.md#coba-lagi-item-ekspor-yang-gagal). Kirim 1 hingga 1000 ID dari `SESSION_EXPORT` dengan status `READY` atau `FAILED`, tanpa rentang tanggal pengganti. Sesi yang telah dihapus tidak dapat dicoba lagi.


## OpenAPI

````yaml id/openapi-25.json POST /v3/organization/{organization_id}/application/{application_id}/reports/{report_uuid}/retry/
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}/retry/:
    post:
      tags:
        - Reports
      summary: Coba lagi 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. Juga memerlukan izin tulis
        untuk resource yang akan diekspor. Hilangkan item_ids untuk menjalankan
        ulang ekspor asli, secara opsional pada rentang tanggal pengganti.
        Laporan yang dibuat untuk proses coba lagi item yang gagal memerlukan
        pemilihan item_ids secara eksplisit untuk proses coba lagi selanjutnya.
        Dengan item_ids, hanya pemohon asli (requested_by_user_id yang tidak
        null dan cocok dengan pengguna yang terautentikasi) yang dapat mencoba
        lagi SESSION_EXPORT berstatus READY atau FAILED. Kunci API atau token
        aplikasi tanpa identitas pengguna tersebut menerima 403 untuk coba lagi
        selektif. Pilih hanya sesi gagal yang masih aktif dari ekspor asli; sesi
        yang dihapus tidak dapat diekspor ulang. Laporan asli tetap tidak
        berubah. Pilihan pertama membuat laporan baru (201); mengulang kumpulan
        yang dipilih secara identik mengembalikan laporan coba lagi yang sudah
        ada (200). Pilihan yang tumpang tindih atau berbeda yang sudah
        ditetapkan ke proses coba lagi lain mengembalikan 400. Lihat [Coba lagi
        item ekspor yang
        gagal](https://docs.didit.me/id/console/export-pdf-csv#coba-lagi-item-ekspor-yang-gagal).
      operationId: retry_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.
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AsyncReportRetryRequest'
            example: {}
      responses:
        '200':
          description: >-
            Pemutaran ulang pemilihan item gagal yang identik; mengembalikan
            laporan coba lagi yang sudah ada tanpa mengantrikan yang lain.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncReport'
        '201':
          description: Ekspor baru masuk antrean.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncReport'
        '400':
          description: >-
            Pilihan tidak valid atau kosong, lebih dari 1000 ID, ID yang bukan
            bagian dari sesi gagal aktif laporan ini, ekspor yang belum selesai
            atau bukan sesi, pilihan coba lagi yang bertentangan, atau rentang
            tanggal yang tidak valid atau campuran.
        '401':
          description: Kredensial tidak ada, tidak valid, atau sudah kedaluwarsa.
        '403':
          description: >-
            Izin baca/tulis tidak dimiliki, atau coba lagi selektif dilakukan
            oleh selain pemohon asli, termasuk pemanggil tanpa identitas
            pengguna.
        '404':
          description: Laporan tidak ditemukan di aplikasi ini.
        '409':
          description: Laporan sedang dihapus; tidak dapat dicoba lagi.
        '429':
          $ref: '#/components/responses/RateLimitedWrite'
      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.retry(
                "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.retry("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.Retry(ctx, \"11111111-2222-3333-4444-555555555555\", didit.AsyncReportRetryRequest{})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import me.didit.Didit;

            import me.didit.types.AsyncReportRetryRequest;


            // Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID

            // and DIDIT_APPLICATION_ID.

            Didit client = new Didit();


            var result =
            client.reports().retry("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->retry('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.retry("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.RetryAsync("11111111-2222-3333-4444-555555555555");

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    AsyncReportRetryRequest:
      type: object
      properties:
        item_ids:
          type: array
          description: >-
            Opsional, pilihan 1 hingga 1000 UUID sesi langsung yang gagal dari
            ekspor ini. Duplikat digabungkan. Hanya pemohon asli yang dapat
            mencoba lagi sebagian. Tidak dapat dikombinasikan dengan
            date_from/date_to.
          items:
            type: string
            format: uuid
          minItems: 1
          maxItems: 1000
        date_from:
          type: string
          description: >-
            Opsional, awal periode pengganti. Kirim kedua tanggal secara
            berurutan; abaikan untuk coba lagi item yang gagal.
          format: date
        date_to:
          type: string
          description: >-
            Opsional, akhir periode pengganti; harus sama dengan atau setelah
            date_from.
          format: date
        notify_on_ready:
          type: boolean
          description: Kirim email kepada pemohon saat siap, jika email pemohon tersedia.
          default: false
    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:
    RateLimitedWrite:
      description: >-
        Batas tulis bersama sebesar 300 permintaan per menit per kunci API telah
        terlampaui. Patuhi `Retry-After` sebelum mencoba lagi.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/RateLimitBudgetError'
          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
      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'
  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.