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

# 비동기 보고서 재시도 API

> Didit 비동기 내보내기를 재시도하거나 실패한 인증 항목을 선택합니다. 요청자만 접근할 수 있으며, 삭제된 세션은 제외되고 재실행 요청도 처리됩니다.

Didit의 비동기 Reports API는 내보내기를 다시 실행하거나 선택한 실패한 인증 항목을 재시도 대기열에 추가합니다. 새 재시도 요청은 `201`을 반환하고, 실패 항목 선택 내용이 동일하면 기존 보고서를 `200`으로 반환합니다.

> [!WARNING]
>
> 선택적 재시도에는 원래 요청자의 사용자 신원이 필요합니다. 사용자 신원이 없는 API 키나 애플리케이션 token은 자기 애플리케이션의 요청이라도 `item_ids`를 보내면 `403`을 받습니다. 생성된 API 키 예시는 본문을 비워 두고 전체 내보내기를 다시 실행합니다.

실제 ID는 [비동기 보고서 조회](https://docs.didit.me/ko/management-api/reports/retrieve.md)에서 확인하고, [실패 인증 항목 재시도 가이드](https://docs.didit.me/ko/console/export-pdf-csv.md#실패한-내보내기-항목-재시도)를 따르세요. 대체 날짜 범위 없이 `READY` 또는 `FAILED` 상태의 `SESSION_EXPORT`에서 1개에서 1000개 사이의 ID를 전송하세요. 삭제된 세션은 재시도할 수 없습니다.


## OpenAPI

````yaml ko/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입니다. 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: 비동기 보고서 재시도
      description: >-
        보고서에 포함된 모든 리소스에 대한 읽기 권한이 필요합니다. 애플리케이션/API 키 자격 증명은 경로에 있는 애플리케이션에 속해야
        합니다. 멤버 Bearer 토큰은 해당 애플리케이션에 대한 접근 권한이 있어야 합니다. 내보낼 리소스에 대한 쓰기 권한도
        필요합니다. item_ids를 생략하면 원래 내보내기를 다시 실행하며, 선택적으로 대체 날짜 범위를 지정할 수 있습니다. 실패한
        항목 재시도로 생성된 보고서는 추가 재시도를 위해 명시적인 item_ids 선택이 필요합니다. item_ids를 사용하는 경우,
        원래 요청자(null이 아닌 requested_by_user_id가 인증된 사용자와 일치하는 경우)만 READY 또는 FAILED
        상태의 SESSION_EXPORT를 재시도할 수 있습니다. 사용자 식별 정보가 없는 API 키 또는 애플리케이션 토큰은 선택적
        재시도에 대해 403을 받습니다. 원래 내보내기에서 실패한 활성 세션만 선택할 수 있으며, 삭제된 세션은 다시 내보낼 수
        없습니다. 원본 보고서는 변경되지 않습니다. 첫 번째 선택은 새 보고서를 생성하고(201), 동일한 선택 세트를 다시 보내면 기존
        재시도 보고서를 반환합니다(200). 다른 재시도에 이미 할당된 선택과 겹치거나 다른 선택은 400을 반환합니다. [실패한
        내보내기 항목
        재시도](https://docs.didit.me/ko/console/export-pdf-csv#실패한-내보내기-항목-재시도)를
        참조하세요.
      operationId: retry_reports
      parameters:
        - name: organization_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: 조직 ID입니다.
        - name: application_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: 애플리케이션 ID입니다.
        - name: report_uuid
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: 보고서 uuid입니다.
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AsyncReportRetryRequest'
            example: {}
      responses:
        '200':
          description: 동일한 실패 항목 선택의 재실행입니다. 다른 보고서를 대기열에 추가하지 않고 기존 재시도 보고서를 반환합니다.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncReport'
        '201':
          description: 새 내보내기가 대기열에 추가되었습니다.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncReport'
        '400':
          description: >-
            선택 항목이 잘못되었거나 비어 있음, ID가 1000개를 초과함, ID가 이 보고서의 현재 실패 세션에 속하지 않음,
            완료되지 않았거나 세션이 아닌 내보내기, 충돌하는 재시도 선택, 또는 잘못되었거나 혼합된 날짜 범위입니다.
        '401':
          description: 자격 증명이 없거나, 유효하지 않거나, 만료되었습니다.
        '403':
          description: >-
            읽기/쓰기 권한이 없거나, 원래 요청자가 아닌 사람이 선택적 재시도를 시도한 경우입니다. 사용자 ID가 없는 호출자도
            포함됩니다.
        '404':
          description: 이 애플리케이션에서 보고서를 찾을 수 없습니다.
        '409':
          description: 보고서가 삭제되고 있으므로 재시도할 수 없습니다.
        '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: >-
            이 내보내기에서 실패한 라이브 세션 UUID를 1개에서 1,000개까지 선택하는 옵션입니다. 중복은 하나로 합쳐집니다.
            일부만 재시도할 수 있는 사람은 원래 요청자뿐입니다. date_from/date_to와 함께 사용할 수 없습니다.
          items:
            type: string
            format: uuid
          minItems: 1
          maxItems: 1000
        date_from:
          type: string
          description: 선택 사항인 교체 기간 시작일입니다. 두 날짜를 순서대로 보내세요. 실패한 항목 재시도에는 생략합니다.
          format: date
        date_to:
          type: string
          description: 선택 사항인 교체 기간 종료일로, date_from과 같거나 그 이후 날짜여야 합니다.
          format: date
        notify_on_ready:
          type: boolean
          description: 요청자 이메일을 사용할 수 있는 경우, 준비가 완료되면 요청자에게 이메일을 보냅니다.
          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: 보고서 식별자입니다.
          format: uuid
        report_type:
          type: string
          description: 내보내기 또는 컴플라이언스 보고서 종류입니다.
          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: 보고서 종류를 나타내는 표시 레이블입니다.
        status:
          type: string
          description: 생성 상태입니다. READY 상태에도 개별 실패가 포함될 수 있으므로 failed_count를 확인해야 합니다.
          enum:
            - PENDING
            - PROCESSING
            - READY
            - FAILED
        status_display:
          type: string
          description: 생성 상태를 나타내는 표시 레이블입니다.
        parameters:
          type: object
          description: 원래 내보내기 옵션입니다. 키는 report_type에 따라 다릅니다.
          additionalProperties: true
        requested_by_user_id:
          type: string
          description: 원래 요청자의 ID입니다. 사용자 ID가 없는 호출자의 경우 null입니다.
          format: uuid
          nullable: true
        requested_by_email:
          type: string
          description: 요청자 이메일입니다. 확인할 수 있는 경우에만 제공됩니다.
          nullable: true
        requested_by_name:
          type: string
          description: 요청자 표시 이름입니다. 확인할 수 있는 경우에만 제공됩니다.
          nullable: true
        row_count:
          type: integer
          description: 내보낸 레코드 수입니다. 생성 전에는 null입니다.
          nullable: true
        failed_item_ids:
          type: array
          description: 이 인증 내보내기에서 실패한 라이브 세션 UUID입니다. 삭제된 세션은 제외됩니다. 선택적 재시도에 이 ID를 사용하세요.
          items:
            type: string
            format: uuid
        failed_count:
          type: integer
          description: failed_item_ids의 항목 수입니다.
          minimum: 0
        file_size:
          type: integer
          description: 생성된 파일의 총 크기(바이트)이며, 생성 전에는 null입니다.
          format: int64
          nullable: true
        files:
          type: array
          description: 생성된 파일의 메타데이터입니다. 다운로드 URL은 포함되지 않습니다.
          items:
            $ref: '#/components/schemas/AsyncReportFile'
        scheduled_report:
          type: string
          description: 스케줄 식별자이며, 예약되지 않은 보고서인 경우 null입니다.
          format: uuid
          nullable: true
        error_message:
          type: string
          description: 사용할 수 있는 경우 생성 오류입니다.
          nullable: true
        deletion_pending:
          type: boolean
          description: 요청된 삭제가 아직 진행 중인지 여부입니다.
        eta_seconds:
          type: integer
          description: 대기 중이거나 처리 중인 보고서가 완료되기까지 예상되는 시간(초)입니다. 이력이 없거나 완료된 경우에는 null입니다.
          nullable: true
        started_at:
          type: string
          description: 생성 시작 시각입니다.
          format: date-time
          nullable: true
        completed_at:
          type: string
          description: 생성 완료 시각입니다.
          format: date-time
          nullable: true
        expires_at:
          type: string
          description: 보고서 만료 시각입니다.
          format: date-time
        created_at:
          type: string
          description: 생성 시각입니다.
          format: date-time
        updated_at:
          type: string
          description: 마지막 업데이트 시각입니다.
          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: 파일 이름입니다.
        format:
          type: string
          description: 파일 형식입니다.
        rows:
          type: integer
          description: 해당하는 경우, 이 파일로 내보낸 레코드입니다.
          nullable: true
        bytes:
          type: integer
          description: 바이트 단위의 파일 크기입니다.
          format: int64
    RateLimitBudgetError:
      type: object
      description: >-
        속도 제한 미들웨어 예산 거부 응답에만 반환됩니다. 멱등성 충돌과 엔드포인트별 상한을 포함한 다른 429 오류는 이 메타데이터
        필드를 보장하지 않습니다.
      required:
        - detail
        - reference
        - limit
        - remaining
        - reset
        - window_seconds
      properties:
        detail:
          type: string
          description: 기존의 사람이 읽을 수 있는 예산 거부 메시지입니다.
        reference:
          type: string
          pattern: ^RL-[0-9a-f]{32}$
          description: 불투명한 지원 참조 번호입니다. RL- 뒤에 소문자 UUID 16진수 문자 32자가 이어집니다.
        limit:
          type: integer
          description: 초과된 범위의 예산입니다. X-RateLimit-Limit 값과 같습니다.
        remaining:
          type: integer
          minimum: 0
          description: 남은 예산이며 0 미만으로 내려가지 않습니다. X-RateLimit-Remaining과 같습니다.
        reset:
          type: integer
          format: int64
          description: Unix 초 단위의 윈도우 재설정 시간이며 X-RateLimit-Reset 값과 같습니다.
        window_seconds:
          type: integer
          description: 고정 윈도우 기간(초 단위)이며, 남은 대기 시간이 아닙니다. 재시도하기 전에 Retry-After 값을 준수해야 합니다.
      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: >-
        API 키당 분당 300개의 요청을 처리하는 공유 쓰기 속도 제한을 초과했습니다. 다시 시도하기 전에 `Retry-After`를
        준수하십시오.
      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: 다음 윈도우까지 기다려야 하는 시간(초)을 올림한 값입니다. 미들웨어 예산 거부 응답에 포함됩니다.
      schema:
        type: integer
    BudgetXRateLimitScope:
      description: 예산을 초과한 범위입니다. 미들웨어 예산 거부 응답에 포함됩니다.
      schema:
        type: string
    BudgetXRateLimitLimit:
      description: 초과된 범위의 예산입니다. 본문 한도와 같습니다. 미들웨어 예산 거부 응답에 포함됩니다.
      schema:
        type: integer
    BudgetXRateLimitRemaining:
      description: 남은 예산이며 0 미만으로 내려가지 않습니다. 본문의 remaining과 같습니다. 미들웨어 예산 거부 응답에만 있습니다.
      schema:
        type: integer
    BudgetXRateLimitReset:
      description: Unix 초 단위의 재설정 시간이며 본문의 reset 값과 같습니다. 미들웨어 예산 거부 응답에 포함됩니다.
      schema:
        type: integer
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Business Console의 Developers -> API keys에서 발급받은 귀하 애플리케이션의 API 키입니다. 기본
        키는 전체 접근 권한을 갖습니다. 이름이 지정된 키는 리소스별 none, read, write 범위로 권한을 제한할 수 있으며
        특정 워크플로나 승인된 세션, IP 주소 목록, 만료일 등으로 제한할 수도 있습니다. 401은 키가 잘못되었거나 폐기되었거나
        만료되었음을 의미합니다. 403은 키가 전송되지 않았거나, 키에 해당 리소스나 작업에 대한 접근 권한이 없거나, 요청이 허용된
        IP 목록 외부 주소에서 발생했음을 의미합니다. 세션 경로에서의 404는 해당 세션이 키의 허용 워크플로 또는 상태 범위를
        벗어났음을 의미합니다. 미디어 접근 권한이 없는 키는 이미지, 비디오, PDF URL을 null로 수신하며, 세션 write
        권한이 없는 키는 세션 링크와 token을 null로 수신합니다.
        https://docs.didit.me/console/api-keys 를 참고하십시오.
    BearerAuth:
      type: http
      scheme: bearer
      description: 애플리케이션의 클라이언트 자격 증명 액세스 token입니다.

````

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