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

# Llistar esdeveniments de sessió de l'API

> Llegeix la línia de temps d'una sessió de verificació de Didit: passos, canvis d'estat i encaminament, del més recent al més antic i paginat.

Prompt de l'API per llistar els esdeveniments de la sessió
Copia el prompt al porta-retalls

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

Enganxa a

Els esdeveniments d'encaminament del flux de treball (`WORKFLOW_BRANCH_EVALUATED`, `WORKFLOW_STATUS_NODE_REACHED`) i els seus `details` es descriuen a [Recuperar sessió](https://docs.didit.me/ca/sessions-api/retrieve-session.md), que també pot retornar la cronologia d'una sessió de verificació d'usuaris (KYC) dins de la seva decisió amb `?include=events`.


## OpenAPI

````yaml ca/openapi-25.json GET /v3/session/{sessionId}/events/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API de verificació d'identitat. Autentica't amb la capçalera x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/session/{sessionId}/events/:
    get:
      tags:
        - Sessions
      summary: Llista els esdeveniments de la sessió
      description: >-
        Llegeix la cronologia d'esdeveniments d'una sessió de verificació,
        ordenada del més recent al més antic segons `sent_at`: les pantalles que
        ha vist l'usuari, botons i pujades, intents fallits, canvis d'estat i de
        passos de funcionalitats, i el rastre d'encaminament del flux de
        treball. Funciona per a IDs de sessió de Verificació d'usuaris (KYC) i
        Verificació d'empreses (KYB). Els esdeveniments s'emmagatzemen de manera
        asíncrona, de manera que un esdeveniment nou pot trigar uns segons a
        aparèixer. Els resultats estan paginats amb `limit` i `offset`; segueix
        `next` fins que sigui `null`. Una clau d'API amb àmbit necessita
        `sessions: read` i `decisions: read`, i sense `media: read` rep
        `file_url` com a `null`. Els esdeveniments d'encaminament es descriuen a
        [Recuperar
        sessió](https://docs.didit.me/ca/sessions-api/retrieve-session).
      operationId: get_v3_session_events
      parameters:
        - name: sessionId
          in: path
          required: true
          description: >-
            UUID de la sessió de verificació (el `session_id` retornat per `POST
            /v3/session/`). Accepta tant IDs de sessió de Verificació d'usuaris
            (KYC) com de Verificació d'empreses (KYB): el servidor resol l'ID
            entre tots dos tipus de sessió. Ha de ser un UUID ben format; un
            valor mal format no coincideix amb la ruta i retorna un `404` en
            HTML.
          schema:
            type: string
            format: uuid
            example: 11111111-2222-3333-4444-555555555555
        - name: limit
          in: query
          required: false
          description: >-
            Nombre màxim d'esdeveniments per pàgina. Per defecte és 50. Un valor
            inferior a 1 o un valor no numèric torna al valor predeterminat de
            50; un valor superior a 1,000,000 retorna `400`.
          schema:
            type: integer
            default: 50
            minimum: 1
            maximum: 1000000
            example: 50
        - name: offset
          in: query
          required: false
          description: >-
            Nombre de resultats que cal ometre abans del primer retornat. Per
            defecte és 0; un valor negatiu o no numèric torna a 0, un valor
            superior a 1,000,000 retorna `400`. És preferible seguir els URL
            `next` i `previous`.
          schema:
            type: integer
            default: 0
            minimum: 0
            maximum: 1000000
            example: 0
        - name: ordering
          in: query
          required: false
          description: >-
            Anul·lació opcional de l'ordenació. L'ordre predeterminat és
            `-sent_at`. Passa el nom d'un camp de resultat (per exemple
            `sent_at`, `created_at`, `event_type`, `feature_step` o `step`) per
            ordenar de manera ascendent, afegeix-li el prefix `-` per ordenar de
            manera descendent i separa diversos camps amb comes. Els camps
            desconeguts s'ignoren.
          schema:
            type: string
            example: sent_at
      responses:
        '200':
          description: Una pàgina dels esdeveniments de la sessió, els més recents primer.
          content:
            application/json:
              schema:
                type: object
                required:
                  - count
                  - next
                  - previous
                  - results
                properties:
                  count:
                    type: integer
                    description: Nombre total d'esdeveniments de la sessió.
                  next:
                    type: string
                    format: uri
                    nullable: true
                    description: URL de la pàgina següent, o `null` a l'última pàgina.
                  previous:
                    type: string
                    format: uri
                    nullable: true
                    description: URL de la pàgina anterior, o `null` a la primera pàgina.
                  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` o `offset` supera 1,000,000. El cos és una matriu JSON amb
            un missatge.
          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: >-
            La clau d'API amb abast ha caducat. Aquest és l'únic cas que retorna
            `401`: una clau absent, no vàlida o revocada retorna `403`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Missatge d'error fàcil de llegir.
              examples:
                Expired key:
                  summary: La data de caducitat de la clau ha passat
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            Fallada d'autenticació o d'autorització. Si falta la clau es retorna
            `403`, igual que amb una clau d'una altra aplicació, una clau amb
            àmbit sense el permís que necessita aquest endpoint o una
            sol·licitud des de fora de la llista d'adreces IP permeses de la
            clau; una clau incorrecta, revocada o caducada retorna `401`.
            Distingeix-les pel camp `detail`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Missatge d'error fàcil de llegir.
              examples:
                Missing or invalid credentials:
                  summary: >-
                    Falta la capçalera x-api-key, o la clau ha fallat la
                    validació
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Other application:
                  summary: >-
                    Una clau vàlida que pertany a una aplicació diferent de la
                    de la sessió
                  value:
                    detail: You do not have permission to perform this action.
                Scoped key without sessions read:
                  summary: >-
                    A la clau amb abast li manca el permís de lectura de
                    sessions
                  value:
                    detail: This API key has no read access to sessions.
                Scoped key without decisions read:
                  summary: >-
                    A la clau amb abast li manca el permís de lectura de
                    decisions
                  value:
                    detail: This API key has no read access to decisions.
                IP not allowed:
                  summary: >-
                    Sol·licitud des de fora de la llista d'adreces IP permeses
                    de la clau
                  value:
                    detail: This API key can't be used from this IP address.
        '404':
          description: >-
            La sessió no existeix, s'ha suprimit o queda fora dels límits de
            flux de treball o de sessions només aprovades d'una clau amb abast
            limitat. La cerca de la sessió s'executa abans de comprovar les
            credencials, de manera que un `sessionId` desconegut retorna `404`
            fins i tot sense una clau vàlida.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Missatge d'error fàcil de llegir.
              examples:
                Unknown session:
                  summary: No existeix cap sessió amb aquest ID, o s'ha suprimit
                  value:
                    detail: Not found.
                Outside key limits:
                  summary: >-
                    La sessió queda fora dels límits del flux de treball o dels
                    límits que només permeten sessions aprovades d'una clau amb
                    abast limitat
                  value:
                    detail: Session not found.
        '429':
          description: >-
            S'ha superat el límit de freqüència: 600 sol·licituds GET per minut
            per clau d'API. Espera els segons indicats a `Retry-After` abans de
            reintentar; les capçaleres `X-RateLimit-*` mostren el pressupost.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Missatge d'error fàcil de llegir.
              examples:
                Rate limited:
                  summary: Pressupost per al minut actual esgotat
                  value:
                    detail: >-
                      GET request rate limit exceeded. You can make up to 600
                      requests per minute.
          headers:
            Retry-After:
              description: Segons que cal esperar abans de reintentar.
              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: >-
        Una entrada de la línia temporal d'esdeveniments d'una sessió de
        verificació.
      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: Identificador de l'esdeveniment.
        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: >-
            Què ha passat. Notificat pel dispositiu durant el flux allotjat o
            l'SDK: `LINK_OPENED`, `STEP_RENDERED`, `BUTTON_CLICKED`,
            `FORM_SUBMITTED`, `FILE_UPLOADED`, `ATTEMPT_FAILED` i `LOG`
            (depuració). Enregistrat pel servidor: `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` i `WORKFLOW_STATUS_NODE_REACHED` (la
            traça d'encaminament del flux de treball). `SESSION_COMPLETED`,
            `NOTE_ADDED` i `MANUAL_REVIEW_STARTED` poden aparèixer en sessions
            més antigues.
        created_at:
          type: string
          format: date-time
          description: >-
            Quan Didit ha emmagatzemat l'esdeveniment. Els esdeveniments
            s'emmagatzemen de manera asíncrona, uns segons després de `sent_at`.
        component:
          type: string
          nullable: true
          description: >-
            Component de la interfície d'usuari que ha informat de
            l'esdeveniment (només esdeveniments de dispositiu).
        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: >-
            Funcionalitat de verificació en què es trobava la sessió quan es va
            produir l'esdeveniment.
        step:
          type: string
          nullable: true
          description: >-
            Pantalla dins de la funcionalitat, per exemple
            `DOCUMENT_CAPTURE_FRONT` o `FACE_PASSIVE_LIVENESS`.
        details:
          type: object
          nullable: true
          additionalProperties: true
          description: >-
            Dades específiques de l'esdeveniment. Les claus depenen
            d'`event_type`.
        ip_address:
          type: string
          nullable: true
          description: >-
            Adreça IP des de la qual el dispositiu ha informat de
            l'esdeveniment. `null` per a esdeveniments registrats pel servidor.
        user_agent:
          type: string
          nullable: true
          description: >-
            Agent d'usuari del dispositiu. `null` per a esdeveniments registrats
            pel servidor.
        device_info:
          type: object
          nullable: true
          additionalProperties: true
          description: Detalls del dispositiu informats per l'SDK o el navegador.
        file_url:
          type: string
          format: uri
          nullable: true
          description: >-
            Enllaç presignat de curta durada a un fitxer adjunt a l'esdeveniment
            (per exemple, una imatge capturada). `null` quan no n'hi ha cap, i
            sempre `null` per a una clau d'API d'abast limitat sense `media:
            read`.
        sent_at:
          type: integer
          format: int64
          description: >-
            Quan va ocórrer l'esdeveniment, com a marca de temps Unix en
            mil·lisegons. Els resultats s'ordenen per aquest valor.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        La clau d'API de la teva aplicació, des de Developers -> API keys a la
        Business Console. La clau primària té accés complet. Una clau amb nom
        pot tenir l'abast limitat: cap, lectura o escriptura per recurs,
        limitada a determinats fluxos de treball o a sessions aprovades, a una
        llista d'adreces IP i a una data de caducitat. 401 significa que la clau
        és incorrecta, revocada o caducada; 403 significa que no s'ha enviat cap
        clau, que la clau no té accés a aquest recurs o acció, o que la
        sol·licitud prové d'una adreça fora de la seva llista d'IP; 404 en una
        ruta de sessió significa que la sessió està fora dels fluxos de treball
        o estats de la clau. Una clau sense accés a fitxers multimèdia rep els
        URL d'imatge, vídeo i PDF com a null, i una clau sense permís
        d'escriptura de sessions rep els enllaços de sessió i els tokens com a
        null. Consulta https://docs.didit.me/console/api-keys.

````

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