> ## 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: шаги с устройства, статусы и маршрутизацию сценария, от новых к старым, с пагинацией.

Промпт API получения событий сессии
Скопировать промпт в буфер обмена

<pre>
  \`Read the event timeline of one Didit verification session through the API.

  Endpoint:
  GET [https://verification.didit.me/v3/session/\{session\_id}/events/](https://verification.didit.me/v3/session/\{session_id}/events/)

  Authentication:
  Send my Didit API key in the x-api-key header. A scoped key needs sessions: read and decisions: read.

  Goal:

  * See what happened during a session, step by step: which screens the user saw, where they stopped, which attempts failed, when the status changed and how the workflow routed the session.

  Behavior:

  * Works for user (KYC) and business (KYB) session IDs.
  * Ordered by sent\_at, newest first. sent\_at is a Unix timestamp in milliseconds.
  * Paginated with limit (default 50) and offset. The response is { count, next, previous, results }. Follow next until it is null.
  * Device-reported event types: LINK\_OPENED, STEP\_RENDERED, BUTTON\_CLICKED, FORM\_SUBMITTED, FILE\_UPLOADED, ATTEMPT\_FAILED, LOG. Server-recorded types include SESSION\_CREATED, SESSION\_STATUS\_CHANGED (details.old\_status, details.current\_status), FEATURE\_STEP\_CHANGED, WORKFLOW\_BRANCH\_EVALUATED and WORKFLOW\_STATUS\_NODE\_REACHED.
  * Events are stored asynchronously, so a new event can take a few seconds to appear.
  * file\_url is a short-lived presigned link; a scoped key without media: read receives it as null.

  Example call:
  curl -X GET "[https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/events/?limit=50](https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/events/?limit=50)" \
  -H "x-api-key: YOUR\_API\_KEY"

  What to read from the response:

  * results\[].event\_type, feature\_step (OCR, LIVENESS, FACE\_MATCH, ...) and step (the screen, for example DOCUMENT\_CAPTURE\_FRONT).
  * results\[].details: event-specific data; the keys vary by event\_type.
  * results\[].ip\_address, user\_agent and device\_info for device-reported events.
  * count, next and previous for pagination.

  Failure modes:

  * 400: limit or offset above 1,000,000.
  * 401: the API key has expired.
  * 403: missing key (a wrong, revoked or expired key gets 401), a key of another application, a scoped key without the permissions above, or a request from outside the key's IP allowlist.
  * 404: the session does not exist, was deleted, or is outside a scoped key's workflow or status limits.

  Side effects: none. This is a pure read.

  For the full integration shape, see /integration/integration-prompt.\`
</pre>

Вставьте в

События маршрутизации сценария (`WORKFLOW_BRANCH_EVALUATED`, `WORKFLOW_STATUS_NODE_REACHED`) и их `details` описаны в разделе [Получение сессии](https://docs.didit.me/ru/sessions-api/retrieve-session.md). Этот запрос также может вернуть хронологию сессии Проверки пользователей (KYC) внутри её решения, если указать `?include=events`.


## OpenAPI

````yaml ru/openapi-25.json GET /v3/session/{sessionId}/events/
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}/events/:
    get:
      tags:
        - Sessions
      summary: Получить список событий сессии
      description: >-
        Считывает временную шкалу событий одной сессии верификации, от новых к
        старым по `sent_at`: экраны, которые видел пользователь, кнопки и
        загрузки, неудачные попытки, изменения статуса и шагов функций, а также
        трассировку маршрутизации сценария. Работает для ID сессий Проверки
        пользователей (KYC) и Верификации бизнеса (KYB). События сохраняются
        асинхронно, поэтому появление нового события может занять несколько
        секунд. Результаты разбиты на страницы с помощью `limit` и `offset`;
        переходите по `next`, пока он не станет равен `null`. API-ключу с
        ограниченной областью действия требуются разрешения `sessions: read` и
        `decisions: read`, а без `media: read` он получает `file_url` со
        значением `null`. События маршрутизации описаны в разделе [Получение
        сессии](https://docs.didit.me/ru/sessions-api/retrieve-session).
      operationId: get_v3_session_events
      parameters:
        - name: sessionId
          in: path
          required: true
          description: >-
            UUID сессии верификации (`session_id`, возвращённый `POST
            /v3/session/`). Принимает ID сессий как Проверки пользователей
            (KYC), так и Верификации бизнеса (KYB): сервер сопоставляет ID для
            обоих типов сессий. Должен быть корректным UUID; некорректное
            значение не соответствует маршруту и возвращает HTML `404`.
          schema:
            type: string
            format: uuid
            example: 11111111-2222-3333-4444-555555555555
        - name: limit
          in: query
          required: false
          description: >-
            Максимальное количество событий на страницу. По умолчанию 50.
            Значение меньше 1 или нечисловое значение заменяется на 50; значение
            выше 1,000,000 возвращает `400`.
          schema:
            type: integer
            default: 50
            minimum: 1
            maximum: 1000000
            example: 50
        - name: offset
          in: query
          required: false
          description: >-
            Количество результатов, пропускаемых перед первым возвращаемым. По
            умолчанию 0; отрицательное или нечисловое значение сбрасывается до
            0, значение выше 1,000,000 возвращает `400`. Рекомендуется
            использовать URL `next` и `previous`.
          schema:
            type: integer
            default: 0
            minimum: 0
            maximum: 1000000
            example: 0
        - name: ordering
          in: query
          required: false
          description: >-
            Необязательное переопределение сортировки. Порядок по умолчанию:
            `-sent_at`. Передайте имя поля результата (например, `sent_at`,
            `created_at`, `event_type`, `feature_step` или `step`) для
            сортировки по возрастанию, добавьте префикс `-` для сортировки по
            убыванию и разделяйте несколько полей запятыми. Неизвестные поля
            игнорируются.
          schema:
            type: string
            example: sent_at
      responses:
        '200':
          description: Одна страница событий сессии, сначала новые.
          content:
            application/json:
              schema:
                type: object
                required:
                  - count
                  - next
                  - previous
                  - results
                properties:
                  count:
                    type: integer
                    description: Общее количество событий сессии.
                  next:
                    type: string
                    format: uri
                    nullable: true
                    description: URL следующей страницы или `null` на последней странице.
                  previous:
                    type: string
                    format: uri
                    nullable: true
                    description: URL предыдущей страницы или `null` на первой странице.
                  results:
                    type: array
                    items:
                      $ref: '#/components/schemas/SessionEvent'
              examples:
                Completed session:
                  value:
                    count: 3
                    next: null
                    previous: null
                    results:
                      - uuid: aaaaaaaa-1111-2222-3333-444444444444
                        event_type: SESSION_STATUS_CHANGED
                        created_at: '2026-09-14T10:02:13.904512Z'
                        component: null
                        feature_step: null
                        step: null
                        details:
                          old_status: In Progress
                          current_status: Approved
                        ip_address: null
                        user_agent: null
                        device_info: null
                        file_url: null
                        sent_at: 1789380131482
                      - uuid: bbbbbbbb-1111-2222-3333-444444444444
                        event_type: FEATURE_STEP_CHANGED
                        created_at: '2026-09-14T10:01:49.210377Z'
                        component: null
                        feature_step: null
                        step: null
                        details:
                          old_feature_step: OCR
                          current_feature_step: LIVENESS
                        ip_address: null
                        user_agent: null
                        device_info: null
                        file_url: null
                        sent_at: 1789380107103
                      - uuid: cccccccc-1111-2222-3333-444444444444
                        event_type: STEP_RENDERED
                        created_at: '2026-09-14T10:01:00.581930Z'
                        component: DocumentCapture
                        feature_step: OCR
                        step: DOCUMENT_CAPTURE_FRONT
                        details: {}
                        ip_address: 203.0.113.24
                        user_agent: >-
                          Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X)
                          AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5
                          Mobile/15E148 Safari/604.1
                        device_info:
                          device_model: iPhone
                        file_url: null
                        sent_at: 1789380058776
        '400':
          description: >-
            `limit` или `offset` превышает 1,000,000. Тело ответа представляет
            собой JSON-массив с одним сообщением.
          content:
            application/json:
              examples:
                Limit too large:
                  summary: limit=2000000
                  value:
                    - limit must not exceed 1000000.
                Offset too large:
                  summary: offset=2000000
                  value:
                    - offset must not exceed 1000000.
              schema:
                type: array
                items:
                  type: string
        '401':
          description: >-
            Срок действия API-ключа с ограниченной областью действия истёк. Это
            единственный случай, возвращающий `401`: отсутствующий,
            недействительный или отозванный ключ возвращает `403`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Понятное сообщение об ошибке.
              examples:
                Expired key:
                  summary: Срок действия ключа истёк
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            Ошибка аутентификации или авторизации. Отсутствующий ключ возвращает
            `403`, как и ключ другого приложения, ключ с ограниченной областью
            действия без необходимого для этого endpoint разрешения, а также
            запрос не из разрешённого списка IP-адресов ключа; неверный,
            отозванный или истекший ключ возвращает `401`. Различайте их по полю
            `detail`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Понятное сообщение об ошибке.
              examples:
                Missing or invalid credentials:
                  summary: >-
                    Заголовок x-api-key отсутствует, либо ключ не прошёл
                    валидацию
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Other application:
                  summary: >-
                    Действительный ключ, принадлежащий приложению, отличному от
                    приложения сессии
                  value:
                    detail: You do not have permission to perform this action.
                Scoped key without sessions read:
                  summary: >-
                    У ключа с ограниченной областью действия отсутствует
                    разрешение sessions: read
                  value:
                    detail: This API key has no read access to sessions.
                Scoped key without decisions read:
                  summary: >-
                    У ключа с ограниченной областью действия отсутствует
                    разрешение decisions: read
                  value:
                    detail: This API key has no read access to decisions.
                IP not allowed:
                  summary: Запрос с IP-адреса вне списка разрешённых IP ключа
                  value:
                    detail: This API key can't be used from this IP address.
        '404':
          description: >-
            Сессия не существует, была удалена или находится за пределами
            ограничений ключа с ограниченным доступом по сценариям или доступу
            только к одобренным сессиям (approved-only). Поиск сессии
            выполняется до проверки учетных данных, поэтому неизвестный
            `sessionId` возвращает `404` даже без действительного ключа.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Понятное сообщение об ошибке.
              examples:
                Unknown session:
                  summary: Сессия с этим ID не существует или была удалена
                  value:
                    detail: Not found.
                Outside key limits:
                  summary: >-
                    Сессия находится за пределами ограничений ключа с
                    ограниченным доступом по сценариям или доступу только к
                    одобренным сессиям
                  value:
                    detail: Session not found.
        '429':
          description: >-
            Лимит запросов превышен: 600 GET-запросов в минуту на один API-ключ.
            Подождите `Retry-After` секунд перед повторной попыткой; заголовки
            `X-RateLimit-*` показывают доступный лимит.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Понятное сообщение об ошибке.
              examples:
                Rate limited:
                  summary: Бюджет на текущую минуту исчерпан
                  value:
                    detail: >-
                      GET request rate limit exceeded. You can make up to 600
                      requests per minute.
          headers:
            Retry-After:
              description: Количество секунд ожидания перед повторной попыткой.
              schema:
                type: integer
                minimum: 1
                example: 30
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X GET
            'https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/events/?limit=50'
            \
              -H 'x-api-key: YOUR_API_KEY'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            for item in client.sessions.list_events(
                "11111111-2222-3333-4444-555555555555",
            ):
                print(item)
        - lang: javascript
          label: Node.js
          source: >-
            import Didit from "@didit-protocol/sdk-node";


            // Reads DIDIT_API_KEY.

            const didit = new Didit();


            for await (const item of
            didit.sessions.listEvents("11111111-2222-3333-4444-555555555555")) {
              console.log(item);
            }
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.Sessions.ListEventsAutoPaging(ctx, \"11111111-2222-3333-4444-555555555555\", didit.SessionsListEventsParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
        - lang: java
          label: Java
          source: >-
            import me.didit.Didit;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            for (var item :
            client.sessions().listEvents("11111111-2222-3333-4444-555555555555"))
            {
                System.out.println(item);
            }
        - lang: php
          label: PHP
          source: >-
            <?php


            require 'vendor/autoload.php';


            use Didit\DiditClient;


            // Reads DIDIT_API_KEY.

            $didit = new DiditClient();


            foreach
            ($didit->sessions->listEvents('11111111-2222-3333-4444-555555555555')
            as $item) {
                print_r($item->toArray());
            }
        - lang: ruby
          label: Ruby
          source: >-
            require "didit"


            # Reads DIDIT_API_KEY.

            didit = Didit::Client.new


            didit.sessions.list_events("11111111-2222-3333-4444-555555555555").auto_paging_each
            do |item|
              puts item.to_h
            end
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using System.Text.Json;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            await foreach (var item in await
            client.Sessions.ListEventsAsync("11111111-2222-3333-4444-555555555555"))

            {
                Console.WriteLine(JsonSerializer.Serialize(item));
            }
components:
  schemas:
    SessionEvent:
      type: object
      description: Одна запись в хронологии событий сессии верификации.
      required:
        - uuid
        - event_type
        - created_at
        - component
        - feature_step
        - step
        - details
        - ip_address
        - user_agent
        - device_info
        - file_url
        - sent_at
      properties:
        uuid:
          type: string
          format: uuid
          description: Идентификатор события.
        event_type:
          type: string
          enum:
            - SESSION_CREATED
            - SESSION_COMPLETED
            - SESSION_STATUS_CHANGED
            - LINK_OPENED
            - FORM_SUBMITTED
            - BUTTON_CLICKED
            - FILE_UPLOADED
            - ATTEMPT_FAILED
            - FEATURE_STEP_CHANGED
            - STEP_RENDERED
            - NOTE_ADDED
            - MANUAL_REVIEW_STARTED
            - WORKFLOW_BRANCH_EVALUATED
            - WORKFLOW_STATUS_NODE_REACHED
            - LOG
          description: >-
            Что произошло. Передаётся устройством в размещённом сценарии или в
            SDK: `LINK_OPENED`, `STEP_RENDERED`, `BUTTON_CLICKED`,
            `FORM_SUBMITTED`, `FILE_UPLOADED`, `ATTEMPT_FAILED` и `LOG`
            (отладка). Фиксируется сервером: `SESSION_CREATED`,
            `SESSION_STATUS_CHANGED` (`details.old_status`,
            `details.current_status`), `FEATURE_STEP_CHANGED`
            (`details.old_feature_step`, `details.current_feature_step`),
            `WORKFLOW_BRANCH_EVALUATED` и `WORKFLOW_STATUS_NODE_REACHED`
            (трассировка маршрутизации сценария). В более старых сессиях могут
            встречаться `SESSION_COMPLETED`, `NOTE_ADDED` и
            `MANUAL_REVIEW_STARTED`.
        created_at:
          type: string
          format: date-time
          description: >-
            Когда Didit сохранил событие. События сохраняются асинхронно, через
            несколько секунд после `sent_at`.
        component:
          type: string
          nullable: true
          description: UI-компонент, сообщивший о событии (только события устройства).
        feature_step:
          type: string
          nullable: true
          enum:
            - OCR
            - OCR_BACK
            - NFC
            - AML
            - FACE
            - LIVENESS
            - FACE_MATCH
            - IP_ANALYSIS
            - AGE_ESTIMATION
            - PROOF_OF_ADDRESS
            - PHONE_VERIFICATION
            - EMAIL_VERIFICATION
            - FACE_SEARCH
            - DATABASE_VALIDATION
            - QUESTIONNAIRE
            - KYB_REGISTRY
            - KYB_DOCUMENTS
            - KYB_KEY_PEOPLE
            - DOCUMENT_AI
            - GEOLOCATION
            - null
          description: >-
            Функция верификации, на которой находилась сессия в момент
            наступления события.
        step:
          type: string
          nullable: true
          description: >-
            Экран внутри функции, например `DOCUMENT_CAPTURE_FRONT` или
            `FACE_PASSIVE_LIVENESS`.
        details:
          type: object
          nullable: true
          additionalProperties: true
          description: Данные, специфичные для события. Ключи зависят от `event_type`.
        ip_address:
          type: string
          nullable: true
          description: >-
            IP-адрес, с которого устройство зафиксировало событие. `null` для
            событий, зарегистрированных на сервере.
        user_agent:
          type: string
          nullable: true
          description: User-Agent устройства. `null` для событий, зафиксированных сервером.
        device_info:
          type: object
          nullable: true
          additionalProperties: true
          description: Сведения об устройстве, переданные SDK или браузером.
        file_url:
          type: string
          format: uri
          nullable: true
          description: >-
            Временная предварительно подписанная ссылка на файл, прикреплённый к
            событию (например, захваченное изображение). `null`, если файл
            отсутствует, и всегда `null` для API-ключа с ограниченной областью
            действия без права `media: read`.
        sent_at:
          type: integer
          format: int64
          description: >-
            Когда событие произошло, в виде Unix timestamp в миллисекундах.
            Результаты упорядочены по этому значению.
  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.