> ## 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 или неуспешных верификаций: доступ только у инициатора, без удалённых сессий, с обработкой повторов.

Асинхронный API отчётов Didit повторно запускает экспорт или ставит в очередь выбранные элементы верификации с ошибкой. Новая повторная попытка возвращает `201`. При повторной отправке того же набора элементов с ошибкой возвращается существующий отчёт с кодом `200`.

> [!WARNING]
>
> Выборочный повтор требует идентификатора исходного пользователя, который создал запрос. API-ключ или токен приложения без этого идентификатора получает `403` при отправке `item_ids`, даже для собственного приложения. Сгенерированный пример с API-ключом повторно запускает весь экспорт с пустым телом запроса.

Возьмите актуальные идентификаторы из раздела [Получение асинхронного отчёта](https://docs.didit.me/ru/management-api/reports/retrieve.md) и следуйте [руководству по повтору элементов с ошибкой](https://docs.didit.me/ru/console/export-pdf-csv.md#повторная-обработка-неудачных-элементов-экспорта). Отправьте от 1 до 1000 идентификаторов из `SESSION_EXPORT` в статусе `READY` или `FAILED` без указания нового диапазона дат. Удалённые сессии повторить нельзя.


## OpenAPI

````yaml ru/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 повторить
        экспорт READY или FAILED SESSION_EXPORT может только исходный инициатор
        (requested_by_user_id не равен null и совпадает с аутентифицированным
        пользователем). API-ключ или токен приложения без идентификации
        пользователя получает 403 при выборочной повторной попытке. Выбирайте
        только неудалённые неудачные сессии из исходного экспорта: удалённые
        сессии нельзя экспортировать повторно. Исходный отчёт не меняется.
        Первый выбор создаёт новый отчёт (201); повтор того же выбранного набора
        возвращает существующий отчёт повторной попытки (200). Пересекающиеся
        или другие выборы, которые уже назначены другой повторной попытке,
        возвращают 400. См. [Повторный экспорт неудачных
        элементов](https://docs.didit.me/ru/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: Идентификатор приложения.
        - 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: >-
            Пустой или недопустимый выбор, более 1000 ID, идентификаторы, не
            относящиеся к актуальным сессиям этого отчёта со сбоями,
            незавершённый или не относящийся к сессиям экспорт, конфликтующий
            выбор для повтора, либо недопустимый или смешанный диапазон дат.
        '401':
          description: >-
            Учётные данные отсутствуют, недействительны или срок их действия
            истёк.
        '403':
          description: >-
            Отсутствуют права чтения/записи либо выборочный повтор выполняется
            кем-либо, кроме исходного инициатора запроса, включая вызывающую
            сторону без идентификации пользователя.
        '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: >-
            Необязательный выбор от 1 до 1000 UUID живых сессий с ошибкой из
            этого экспорта. Дубликаты объединяются. Повторить подмножество может
            только исходный запрашивающий. Нельзя использовать вместе с
            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: >-
            Идентификационные данные исходного запрашивающего или 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: >-
            Метаданные сгенерированного файла; не содержат ссылок для
            скачивания.
          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: >-
        Возвращается только при отказе middleware из-за исчерпания бюджета
        лимита запросов. Другие ошибки 429, включая конфликты идемпотентности и
        ограничения конкретного endpoint, не гарантируют эти поля метаданных.
      required:
        - detail
        - reference
        - limit
        - remaining
        - reset
        - window_seconds
      properties:
        detail:
          type: string
          description: Существующее понятное человеку сообщение об отказе по бюджету.
        reference:
          type: string
          pattern: ^RL-[0-9a-f]{32}$
          description: >-
            Непрозрачный идентификатор для службы поддержки: RL- и затем 32
            шестнадцатеричных символа UUID в нижнем регистре.
        limit:
          type: integer
          description: Бюджет области, в которой превышен лимит; равен X-RateLimit-Limit.
        remaining:
          type: integer
          minimum: 0
          description: >-
            Оставшийся бюджет, приведённый к нулю; совпадает с
            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: >-
        Превышен общий лимит на запись в 300 запросов в минуту на один API-ключ.
        Подождите время, указанное в `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: >-
        Секунды ожидания, округлённые вверх до следующего окна. Присутствует при
        отказах middleware из-за исчерпания бюджета.
      schema:
        type: integer
    BudgetXRateLimitScope:
      description: >-
        Область, бюджет которой превышен. Присутствует при отказах middleware
        из-за исчерпания бюджета.
      schema:
        type: string
    BudgetXRateLimitLimit:
      description: >-
        Бюджет области, в которой превышен лимит; равен лимиту в теле ответа.
        Присутствует при отказах по бюджету промежуточного ПО.
      schema:
        type: integer
    BudgetXRateLimitRemaining:
      description: >-
        Оставшийся бюджет, приведённый к нулю; совпадает с remaining в теле
        ответа. Присутствует в отказах из-за бюджета middleware.
      schema:
        type: integer
    BudgetXRateLimitReset:
      description: >-
        Время сброса в секундах Unix; равно reset в теле ответа. Присутствует
        при отказах middleware из-за исчерпания бюджета.
      schema:
        type: integer
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        API-ключ вашего приложения из раздела «Разработчикам» -> «API-ключи» в
        Business Console. Основной ключ имеет полный доступ. Именованный ключ
        может иметь ограниченную область действия: без доступа, чтение или
        запись для каждого ресурса, ограничение определенными сценариями или
        одобренными сессиями, списком IP-адресов и сроком действия. 401
        означает, что ключ неверен, отозван или его срок действия истек; 403
        означает, что ключ не был передан, у ключа нет доступа к этому ресурсу
        или действию, либо запрос поступил с адреса вне его списка IP-адресов;
        404 на маршруте сессии означает, что сессия не входит в сценарии или
        статусы ключа. Ключ без доступа к медиа получает URL изображений, видео
        и PDF как null, а ключ без прав на запись сессий получает ссылки на
        сессии и токены как null. См. https://docs.didit.me/console/api-keys.
    BearerAuth:
      type: http
      scheme: bearer
      description: Токен доступа приложения, полученный по учётным данным клиента.

````

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