> ## 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 генерации PDF: отчёты KYC и KYB для комплаенса

> Didit: GET /v3/session/{id}/generate-pdf/ скачивает брендированный KYC- или KYB-отчёт. White label, готов к аудиту, оплата за использование.



Промпт для генерации PDF
        Скопировать промпт в буфер обмена



      
      

\<pre>

\`Download an audit-ready PDF report for a finished Didit verification session.

Endpoint:
GET https://verification.didit.me/v3/session/{session_id}/generate-pdf/

Authentication:
Use the x-api-key header with your Didit API key (or a user-auth token). Privilege: read:sessions.

Path parameter:
\- session_id (UUID) — works for both User Verification (KYC) and Business Verification (KYB) sessions. Didit routes to the correct template automatically.

Prerequisites:
\- Session status must be one of "Approved", "Declined", "In Review". Any other status returns 403.
\- Session must belong to the authenticated application — cross-application reads return 404.

curl example — save the PDF to disk:
curl https://verification.didit.me/v3/session/<SESSION_ID>/generate-pdf/ \
-H "x-api-key: <API_KEY>" \
-o report.pdf

Response:
\- Body is binary (application/pdf). DO NOT parse as JSON.
\- Content-Type: application/pdf
\- Content-Disposition: attachment; filename=session_<session_id>.pdf for KYC sessions, business_<session_id>.pdf for KYB sessions.
\- Typical wall time ~1-3s (server-side WeasyPrint rendering).

Template contents:
\- KYC PDF: Identity (OCR), Liveness, Face Match, AML, POA, IP analysis, reviews, events.
\- KYB PDF: Company registry data, officers, beneficial owners (UBOs), KYB documents, AML hits, questionnaires, phone verification, email verification, IP analysis, reviews, events.

White-label:
If white-label customization is enabled on your application, the PDF uses your logo and privacy-policy URL. Configure at Console → Customization.

Failure modes:
\- 401 — invalid credentials.
\- 403 — { "detail": "You do not have permission to perform this action." } when the key lacks read:sessions OR when the session is in a non-printable status (Not Started, In Progress, Expired, Abandoned, Kyc Expired, Resubmitted, Awaiting User).
\- 404 — { "detail": "Not found." } when the session is not visible to this application.

Idempotency & cost:
Safe to retry — generation is read-only. Counts against the standard rate limit.

When to call:
\- Compliance archives (regulator submissions, internal audit binders).
\- Customer support replies (proof of decision for a specific session).
\- After approve / decline via /sessions-api/update-status — render and store the resulting PDF.
\- For every session of one user in a single file, use GET /v3/users/{vendor_data}/generate-pdf/ instead (see /management-api/users/generate-pdf).

For end-to-end Didit integration, paste in the full prompt at /integration/integration-prompt.`

\</pre>



      
      

Вставьте в

## Поддержка KYC и KYBПоддерживает сессии как **Проверки пользователей (KYC)**, так и **Верификации бизнеса (KYB)**. Didit автоматически выбирает подходящий шаблон PDF:- Сессия Проверки пользователей (KYC): отчёт с разделами верификации личности, проверки живости, сравнения лиц, AML и POA.
- Сессия Верификации бизнеса (KYB): отчёт с разделами реестра компаний, ключевых лиц (UBO и должностных лиц), документов, AML, анкеты, телефона, электронной почты и анализа IP, если эти функции входят в сценарий.Оба варианта используют один и тот же конвейер генерации PDF и поддерживают кастомизацию White label (логотип, URL политики конфиденциальности).## Соглашение об именовании файлов| Тип | Имя файла |
| - | - |
| Пользователь | `session_<session_id>.pdf` |
| Бизнес | `business_<session_id>.pdf` |Возвращается через заголовок `Content-Disposition: attachment; filename=...`.## Требование к статусуЧтобы сгенерировать PDF, сессия должна находиться в статусе `APPROVED`, `DECLINED` или `IN_REVIEW`. Сессии в процессе выполнения или ещё не начатые возвращают `403`.## Примеры> [tab] PDF проверки пользователей (KYC)
>
> ```bash theme={null}
> curl https://verification.didit.me/v3/session/4c5c7f3a-.../generate-pdf/ \
>   -H "x-api-key: YOUR_API_KEY" \
>   -o kyc-report.pdf
> ```> [tab] PDF верификации бизнеса (KYB)
>
> ```bash theme={null}
> curl https://verification.didit.me/v3/session/bs-01HJX1.../generate-pdf/ \
>   -H "x-api-key: YOUR_API_KEY" \
>   -o kyb-report.pdf
> ```## White labelЕсли для приложения включена кастомизация White label, в PDF используются ваш логотип и URL политики конфиденциальности. Настраивается в *Console → Customization*.## РазрешениеТребуется `read:sessions`. Для обоих типов используется одна и та же область доступа.## Связанные материалы- [Обзор сессий](https://docs.didit.me/ru/sessions-api/overview.md)
- [Получение сессии](https://docs.didit.me/ru/sessions-api/retrieve-session.md): JSON-версия того же решения
- [Скачать PDF истории пользователя](https://docs.didit.me/ru/management-api/users/generate-pdf.md): все подлежащие отчёту сессии одного пользователя в одном файле
- [Схема ответа KYB](https://docs.didit.me/ru/business-verification/response-schema.md): поля, включённые в PDF для бизнеса


## OpenAPI

````yaml ru/openapi-25.json GET /v3/session/{sessionId}/generate-pdf/
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/session/{sessionId}/generate-pdf/:
    get:
      tags:
        - Sessions
      summary: Скачать PDF-отчёт по сессии верификации
      description: >-
        Сформировать и скачать готовый для комплаенса PDF-отчёт по завершённой
        сессии верификации. Один и тот же путь обслуживает сессии проверки
        пользователей (KYC) и верификации бизнеса (KYB) — сервер сопоставляет
        `sessionId` с обоими типами сессий и выбирает подходящий шаблон отчёта.


        **Подходящие статусы.** Сессия уже должна иметь финальный статус или
        статус, доступный для проверки:


        - KYC-сессии: `Approved`, `Declined`, `In Review` или `Kyc Expired`.

        - KYB-сессии: `Approved`, `Declined` или `In Review`.


        Любой другой статус (`Not Started`, `In Progress`, `Expired`,
        `Abandoned`, …) возвращает `403` с поясняющей строкой `detail` — см.
        ответ `403` ниже.


        **Что содержит отчёт.** PDF отображает состояние сессии в консоли на
        момент запроса:


        - **KYC** — сводный статус сессии, список предупреждений и по одному
        разделу для каждой выполненной функции: Верификация личности
        (изображения документов плюс извлечённые поля), NFC, Проверка живости,
        Сравнение лиц, Проверка электронной почты, Проверка телефона,
        Подтверждение адреса, ответы на анкеты, Проверка по базам данных,
        AML-скрининг и Анализ IP — за которыми следуют теги сессии, действия по
        проверке в консоли (комментарии и изменения статуса) и хронология
        событий сессии.

        - **KYB** — проверки по реестрам (данные компании), AML-скрининги,
        верификации документов компании, проверки ключевых лиц, ответы на
        анкеты, проверки телефона/электронной почты, анализы IP и хронология
        событий сессии, за которыми следуют теги и действия по проверке.


        **Брендинг.** Если в вашем приложении настроена кастомизация White
        label, отчёт формируется с вашим логотипом и ссылками на URL вашей
        политики конфиденциальности; в противном случае он содержит брендинг
        Didit. Отчёты формируются на английском языке — параметр выбора языка
        отсутствует.


        **Без кэширования.** Каждый вызов заново формирует PDF на основе текущих
        данных сессии, поэтому отчёт, сгенерированный после ручной проверки,
        отражает решение проверяющего. Два вызова для одной и той же сессии
        могут создать побайтово различающиеся файлы — архивируйте скачанный
        файл, если вам нужна неизменяемая копия.


        **Задержка.** При формировании отчёта скачиваются все сохранённые
        изображения (стороны документов, селфи, дополнительные файлы) перед
        компоновкой PDF, поэтому сессии с большим объёмом медиафайлов могут
        обрабатываться несколько секунд. Используйте увеличенный клиентский
        таймаут чтения (рекомендуется 60 с) и сохраняйте тело ответа потоком на
        диск.


        **Завершающий слеш.** Канонический маршрут заканчивается завершающим
        слешем (`…/generate-pdf/`). Запрос без него обрабатывается напрямую с
        тем же ответом — перенаправления `301` нет, поэтому клиенту не нужно
        переходить по редиректам, а `curl` не требует флага `-L`. Используйте
        URL со слешем, как показано в примерах.


        Если вам нужны исходные данные в формате JSON вместо сформированного
        отчёта, используйте `GET /v3/session/{sessionId}/decision/`. Чтобы
        получить все сессии одного пользователя, доступные для отчёта, в одном
        документе, используйте `GET /v3/users/{vendor_data}/generate-pdf/`.
      operationId: get_v3_session_generate_pdf
      parameters:
        - name: sessionId
          in: path
          required: true
          description: >-
            UUID сессии Проверки пользователей (KYC) или Верификации бизнеса
            (KYB) для отображения — `session_id`, возвращаемый методом `POST
            /v3/session/`. Один и тот же путь подходит для обоих типов сессий;
            используйте имя файла в заголовке `Content-Disposition` ответа,
            чтобы определить полученный тип отчёта.


            **Должен быть корректно сформированным UUID в нижнем регистре.**
            Маршрут сопоставляется только с валидными UUID, поэтому некорректное
            значение отклоняется маршрутизатором URL ещё до выполнения кода
            приложения, и ответом будет **HTML**-страница `404`, а не оболочка
            JSON `{"detail": ...}`, показанная ниже. Конвертер UUID маршрута
            поддерживает только каноническую форму в нижнем регистре — UUID с
            шестнадцатеричными символами в верхнем регистре отклоняются с
            HTML-ошибкой 404.
          schema:
            type: string
            format: uuid
            example: 11111111-2222-3333-4444-555555555555
      responses:
        '200':
          description: >-
            Сформированный PDF-документ, возвращаемый напрямую как бинарные
            данные `application/pdf` — без обёртки JSON и без перенаправления по
            URL для скачивания. Тело ответа начинается с сигнатуры `%PDF` (PDF
            1.7). Сохраните его в файл `.pdf` или передайте потоком вызывающей
            стороне.
          headers:
            Content-Disposition:
              description: >-
                `attachment; filename=session_{sessionId}.pdf` для KYC-сессий,
                `attachment; filename=business_{sessionId}.pdf` для KYB-сессий —
                префикс указывает, какой шаблон отчёта был сформирован.
              schema:
                type: string
                example: >-
                  attachment;
                  filename=session_11111111-2222-3333-4444-555555555555.pdf
            Content-Length:
              description: Общий размер PDF в байтах; тело не разбивается на фрагменты.
              schema:
                type: integer
                example: 25191
          content:
            application/pdf:
              schema:
                type: string
                format: binary
        '403':
          description: >-
            Ошибка аутентификации, авторизации или статуса сессии. Отсутствующий
            ключ возвращает `403`; неверный, отозванный или истекший ключ
            возвращает `401`. Различайте варианты ошибки по строке `detail`:


            - `"Authentication credentials were not provided or are invalid."` —
            отсутствует заголовок `x-api-key` (и нет токена `Authorization:
            Bearer`), либо предоставленные учетные данные не прошли проверку
            (отозваны, истекли или некорректны).

            - `"You do not have permission to perform this action."` — учетные
            данные действительны, но не позволяют прочитать эту сессию:
            Bearer-токен пользователя консоли не имеет разрешения
            `read:sessions` или не имеет доступа к приложению-владельцу, либо
            API-ключ принадлежит организации, отличной от организации сессии.

            - `"You can only generate a PDF for sessions in review, declined,
            approved or kyc expired"` — сессия KYC существует, но ещё не
            находится в подходящем статусе (например, `Not Started` или `In
            Progress`). Дождитесь webhook `status.updated`, прежде чем
            запрашивать отчёт.

            - `"You can only generate a PDF for sessions in review, declined or
            approved"` — то же условие для сессий KYB.


            Обратите внимание: для полностью неизвестного `sessionId` endpoint
            сначала определяет приложение-владельца до проверки учетных данных,
            поэтому отсутствующая сессия возвращает `404`, даже если учетные
            данные отсутствуют или недействительны.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    example: >-
                      You can only generate a PDF for sessions in review,
                      declined, approved or kyc expired
              examples:
                Missing or invalid credentials:
                  summary: >-
                    Заголовок x-api-key отсутствует, либо ключ не прошёл
                    интроспекцию
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Insufficient permissions:
                  summary: >-
                    Действительные учетные данные без разрешения read:sessions
                    или доступа к приложению-владельцу
                  value:
                    detail: You do not have permission to perform this action.
                KYC session not finished:
                  summary: KYC-сессия всё ещё со статусом Not Started / In Progress
                  value:
                    detail: >-
                      You can only generate a PDF for sessions in review,
                      declined, approved or kyc expired
                KYB session not finished:
                  summary: KYB-сессия всё ещё со статусом Not Started / In Progress
                  value:
                    detail: >-
                      You can only generate a PDF for sessions in review,
                      declined or approved
        '404':
          description: >-
            Активной сессии с таким `sessionId` не существует — она никогда не
            создавалась или была удалена. Определение владельца происходит до
            проверки учетных данных, поэтому этот `404` возвращается даже для
            неаутентифицированных запросов. В зависимости от того, какой поиск
            не дал результатов, строка `detail` содержит `"Not found."` (обычный
            случай) или `"Session not found."`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    example: Not found.
              examples:
                Unknown session:
                  summary: sessionId не соответствует ни одной сессии KYC или KYB
                  value:
                    detail: Not found.
                Recently deleted session:
                  summary: Сессия была удалена между запросами
                  value:
                    detail: Session not found.
        '429':
          description: >-
            Превышен лимит запросов. Для генерации PDF действует выделенный
            лимит **50 запросов в минуту на учетные данные** (API-ключ,
            Bearer-токен или IP-адрес источника при неаутентифицированных
            запросах) в дополнение к глобальному лимиту GET-запросов в 600/мин.
            Подождите указанное в `Retry-After` количество секунд (оно также
            отражено в заголовках `X-RateLimit-*`), затем повторите попытку.
            Отчёты не кэшируются на стороне сервера, поэтому скачивайте каждый
            отчёт один раз и сохраняйте файл вместо повторных запросов.
          headers:
            Retry-After:
              description: Количество секунд ожидания перед повторной попыткой запроса.
              schema:
                type: integer
                minimum: 1
                example: 30
            X-RateLimit-Limit:
              description: >-
                Максимальное количество генераций PDF, разрешённое в текущем
                окне (50).
              schema:
                type: integer
                example: 50
            X-RateLimit-Remaining:
              description: Количество оставшихся запросов в текущем окне.
              schema:
                type: integer
                example: 0
            X-RateLimit-Reset:
              description: Unix-время (в секундах), когда сбрасывается текущее окно.
              schema:
                type: integer
                example: 1750000000
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Понятное объяснение нарушения лимита запросов.
                    example: >-
                      Session PDF generation rate limit exceeded. You can make
                      up to 50 requests per minute.
              examples:
                Throttled:
                  summary: >-
                    Более 50 генераций PDF за одну минуту с одними и теми же
                    учетными данными
                  value:
                    detail: >-
                      Session PDF generation rate limit exceeded. You can make
                      up to 50 requests per minute.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: cURL
          source: |-
            curl --fail \
              https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/generate-pdf/ \
              -H 'x-api-key: YOUR_API_KEY' \
              --output report.pdf
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            content = client.sessions.generate_pdf(
                "11111111-2222-3333-4444-555555555555",
            )
            with open("download.pdf", "wb") as file:
                file.write(content)
        - lang: javascript
          label: Node.js
          source: >-
            import { writeFile } from "node:fs/promises";

            import Didit from "@didit-protocol/sdk-node";


            // Reads DIDIT_API_KEY.

            const didit = new Didit();


            const content = await
            didit.sessions.generatePdf("11111111-2222-3333-4444-555555555555");

            await writeFile("download.pdf", Buffer.from(await
            content.arrayBuffer()));
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresp, err := client.Sessions.GeneratePDF(ctx, \"11111111-2222-3333-4444-555555555555\")\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer resp.Body.Close()\nfile, err := os.Create(\"download.pdf\")\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer file.Close()\nif _, err := io.Copy(file, resp.Body); err != nil {\n\tlog.Fatal(err)\n}"
        - lang: java
          label: Java
          source: >-
            import java.nio.file.Path;

            import me.didit.Didit;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            client.sessions().generatePdf("11111111-2222-3333-4444-555555555555")
                    .writeTo(Path.of("download.pdf"));
        - lang: php
          label: PHP
          source: >-
            <?php


            require 'vendor/autoload.php';


            use Didit\DiditClient;


            // Reads DIDIT_API_KEY.

            $didit = new DiditClient();


            $content =
            $didit->sessions->generatePdf('11111111-2222-3333-4444-555555555555');

            $content->saveTo('download.pdf');
        - lang: ruby
          label: Ruby
          source: >-
            require "didit"


            # Reads DIDIT_API_KEY.

            didit = Didit::Client.new


            content =
            didit.sessions.generate_pdf("11111111-2222-3333-4444-555555555555")

            File.binwrite("download.pdf", content)
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            var content = await
            client.Sessions.GeneratePdfAsync("11111111-2222-3333-4444-555555555555");

            await content.SaveToAsync("download.pdf");
components:
  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.

````

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