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

# Lister les livraisons de webhooks de session API

> Listez chaque webhook envoyé par Didit pour une session de vérification, avec l'URL, la réponse de votre endpoint, ainsi que les en-têtes et le payload exacts.



Prompt API pour lister les envois de webhooks de session
        Copier le prompt dans le presse-papiers



      
      

\<pre>

\`List every webhook delivery Didit recorded for one verification session through the API.

Endpoint:
GET https://verification.didit.me/v3/session/{session_id}/webhooks/

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

Goal:
\- See which webhooks Didit sent for a session, to which URL, and what my endpoint answered. Use it to debug a missing or rejected webhook, or to reconcile my records with Didit's.

Behavior:
\- Works for user (KYC) and business (KYB) session IDs.
\- Returns a JSON array, newest first. It is not paginated. An empty array means no webhook was sent for the session yet.
\- Each entry is one delivery attempt to one destination. The first delivery, each automatic retry and each manual resend are separate entries with their own uuid; retries and resends keep the payload's event_id.
\- request_header and request_body are JSON-encoded strings. Parse them with a JSON parser to read the headers and the payload.
\- A scoped key without media: read receives media URLs inside request_body as null; without sessions: write it receives session links and tokens as null. A redacted body no longer matches the recorded signatures.

Example call:
curl -X GET "https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/webhooks/" \
-H "x-api-key: YOUR_API_KEY"

What to read from the response:
\- uuid: the delivery id. Use it as {webhook_uuid} to get or resend one delivery.
\- webhook_type: status.updated or data.updated for session deliveries.
\- status: the session status when the event was generated.
\- response_status: the HTTP status my endpoint returned. null while the delivery is queued; 504 means a timeout (5 seconds), 503 a connection failure, 400 a URL refused as unsafe.
\- request_url and created_at: where and when it was sent.

Failure modes:
\- 401: the API key has expired.
\- 403: missing key (a wrong, revoked or expired key gets 401) ({ "detail": "Authentication credentials were not provided or are invalid." }), 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 or was deleted ({ "detail": "Not found." }), or is outside a scoped key's workflow or status limits ({ "detail": "Session not found." }).
\- 429: more than 600 reads per minute for this API key; honor Retry-After.

Side effects: none. This is a pure read.

For the full integration shape, see /integration/integration-prompt.`

\</pre>



      
      

Coller dans

Chaque tentative est journalisée, y compris les [nouvelles tentatives automatiques](https://docs.didit.me/fr/integration/webhooks.md#politique-de-nouvelles-tentatives) que Didit effectue après une réponse `5xx` ou `404`. Ainsi, un envoi échoué suivi d'une nouvelle tentative réussie apparaît sous forme de deux entrées portant le même `event_id` dans `request_body`.Pour inspecter un envoi, utilisez [Récupérer un envoi de webhook de session](https://docs.didit.me/fr/management-api/sessions/get-webhook.md). Pour le renvoyer après avoir corrigé votre endpoint, utilisez [Renvoyer un envoi de webhook de session](https://docs.didit.me/fr/management-api/sessions/resend-webhook.md).


## OpenAPI

````yaml fr/openapi-25.json GET /v3/session/{sessionId}/webhooks/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API de vérification d'identité. Authentifiez-vous avec l'en-tête x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/session/{sessionId}/webhooks/:
    get:
      tags:
        - Sessions
      summary: Lister les livraisons de webhook de session
      description: "Lister chaque livraison de webhook enregistrée par Didit pour une session de vérification d'utilisateur (KYC) ou d'entreprise (KYB), de la plus récente à la plus ancienne, sous la forme d'un tableau JSON brut (non paginé). Chaque entrée correspond à une tentative vers une destination\_: le premier envoi, chaque [nouvelle tentative](https://docs.didit.me/fr/integration/webhooks#politique-de-nouvelles-tentatives) automatique et chaque renvoi sont des entrées distinctes avec leur propre `uuid`, et les nouvelles tentatives ainsi que les renvois conservent l'`event_id` du payload. `request_header` et `request_body` sont du texte JSON\_; analysez-les pour lire les signatures et le payload. Les enregistrements de livraison sont disponibles pendant environ 30 jours, un tableau vide signifie donc qu'aucun webhook n'a encore été envoyé pour la session ou que toutes les livraisons sont plus anciennes que ce délai. Une clé API restreinte nécessite `sessions: read` et `decisions: read`."
      operationId: get_v3_session_webhooks
      parameters:
        - name: sessionId
          in: path
          required: true
          description: >-
            UUID de la session de vérification, utilisateur (KYC) ou entreprise
            (KYB) : le `session_id` renvoyé par `POST /v3/session/`. Le serveur
            le résout pour les deux types de session.


            **Doit être un UUID valide.** La route ne correspond qu'aux UUID
            bien formés ; une valeur malformée est donc rejetée par le routeur
            d'URL avant l'exécution de tout code d'application et la réponse est
            une page **HTML** `404` plutôt que l'enveloppe JSON `{"detail":
            ...}` illustrée ci-dessous.
          schema:
            type: string
            format: uuid
          example: 22222222-3333-4444-5555-666666666666
      responses:
        '200':
          description: >-
            Chaque livraison enregistrée pour la session, de la plus récente à
            la plus ancienne.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SessionWebhookDelivery'
              examples:
                Failed delivery and its successful retry:
                  value:
                    - uuid: 66666666-7777-8888-9999-000000000002
                      session_id: 22222222-3333-4444-5555-666666666666
                      request_url: https://yourapp.com/webhooks/didit
                      response_status: 200
                      status: In Progress
                      webhook_type: status.updated
                      request_header: >-
                        {"Content-Type": "application/json", "X-Signature":
                        "9188851d160b5b3aacfc946e4dde1f061b7e568662518942c927ddaf507f533d",
                        "X-Signature-V2":
                        "381236af514d3fb538579365ac5a24f2464ce1b8224c6e770c60d8201c43ecc5",
                        "X-Signature-Simple":
                        "4740131dc38f29e78a8508371979be74967d5307464494bd3148a03b4d6c8716",
                        "X-Timestamp": "1792056139", "User-Agent":
                        "DiditWebhook/2.0 +https://didit.me"}
                      request_body: >-
                        {"application_id":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee","created_at":1792056057,"environment":"live","event_id":"33333333-4444-5555-6666-777777777777","sandbox_scenario":null,"session_id":"22222222-3333-4444-5555-666666666666","status":"In
                        Progress","timestamp":1792056139,"vendor_data":"user-123","webhook_type":"status.updated","workflow_id":"44444444-5555-6666-7777-888888888888","workflow_version":3}
                      created_at: '2026-10-15T09:22:19.104233Z'
                    - uuid: 66666666-7777-8888-9999-000000000001
                      session_id: 22222222-3333-4444-5555-666666666666
                      request_url: https://yourapp.com/webhooks/didit
                      response_status: 503
                      status: In Progress
                      webhook_type: status.updated
                      request_header: >-
                        {"Content-Type": "application/json", "X-Signature":
                        "a5e02a03404e1337a0198e6be15d34abbd053c658a0e51e5d0e78554213ef29b",
                        "X-Signature-V2":
                        "927e7cb770c94ce745939bff73f04aa200015f3bc64795ba46c2aaf78a6cedc5",
                        "X-Signature-Simple":
                        "e37b0d4c716c72bb5ae7127b9cc455d28ab4686e9e22312b4ec2327409a73302",
                        "X-Timestamp": "1792056078", "User-Agent":
                        "DiditWebhook/2.0 +https://didit.me"}
                      request_body: >-
                        {"application_id":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee","created_at":1792056057,"environment":"live","event_id":"33333333-4444-5555-6666-777777777777","sandbox_scenario":null,"session_id":"22222222-3333-4444-5555-666666666666","status":"In
                        Progress","timestamp":1792056078,"vendor_data":"user-123","webhook_type":"status.updated","workflow_id":"44444444-5555-6666-7777-888888888888","workflow_version":3}
                      created_at: '2026-10-15T09:21:18.412345Z'
                No webhook sent yet:
                  value: []
        '401':
          description: >-
            La clé API a expiré : elle a été créée avec une date d'expiration
            qui est dépassée. Une clé incorrecte ou révoquée reçoit également un
            code `401` ; une clé manquante reçoit un code `403`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Message d'erreur lisible par l'humain.
              examples:
                Expired key:
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            La requête n'est pas autorisée. L'absence de `x-api-key`, ou une clé
            invalide ou révoquée, renvoie `Authentication credentials were not
            provided or are invalid.` Une clé appartenant à une autre
            application renvoie `You do not have permission to perform this
            action.` Une clé avec restriction de portée sans l'accès requis par
            cet endpoint renvoie un message indiquant l'accès manquant, et une
            clé utilisée en dehors de sa liste d'autorisation d'adresses IP
            renvoie `This API key can't be used from this IP address.` Un
            `sessionId` inconnu renvoie `404` avant la vérification des
            identifiants.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Message d'erreur lisible par l'humain.
              examples:
                Missing or invalid key:
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Key of another application:
                  value:
                    detail: You do not have permission to perform this action.
                Scoped key without sessions read:
                  value:
                    detail: This API key has no read access to sessions.
                Scoped key without decisions read:
                  value:
                    detail: This API key has no read access to decisions.
                Outside the IP allowlist:
                  value:
                    detail: This API key can't be used from this IP address.
        '404':
          description: >-
            La session n'existe pas ou a été supprimée (`Not found.`, renvoyé
            avant la vérification des identifiants), ou elle se trouve en dehors
            des limites de workflow ou de statut d'une clé restreinte (`Session
            not found.`).
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Message d'erreur lisible par l'humain.
              examples:
                Unknown session:
                  value:
                    detail: Not found.
                Outside the key's limits:
                  value:
                    detail: Session not found.
        '429':
          description: >-
            Limite de débit dépassée : plus de 600 requêtes GET dans la fenêtre
            actuelle d'une minute pour cette clé API. Attendez `Retry-After`
            secondes avant de réessayer.
          headers:
            Retry-After:
              description: Secondes à attendre avant de réessayer.
              schema:
                type: integer
                minimum: 1
                example: 30
            X-RateLimit-Limit:
              description: Requêtes autorisées dans la fenêtre d'une minute (600).
              schema:
                type: integer
                example: 600
            X-RateLimit-Remaining:
              description: Requêtes restantes dans la fenêtre actuelle.
              schema:
                type: integer
                example: 0
            X-RateLimit-Reset:
              description: >-
                Temps Unix (en secondes) auquel la fenêtre actuelle se
                réinitialise.
              schema:
                type: integer
                example: 1792056120
            X-RateLimit-Scope:
              description: Nom du budget qui a été dépassé.
              schema:
                type: string
                example: generic-get
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Message d'erreur lisible par l'humain.
              examples:
                Throttled:
                  value:
                    detail: >-
                      GET request rate limit exceeded. You can make up to 600
                      requests per minute.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X GET
            'https://verification.didit.me/v3/session/22222222-3333-4444-5555-666666666666/webhooks/'
            \
              -H 'x-api-key: YOUR_API_KEY'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.sessions.webhooks.list(
                "22222222-3333-4444-5555-666666666666",
            )
            print(result)
        - lang: javascript
          label: Node.js
          source: >-
            import Didit from "@didit-protocol/sdk-node";


            // Reads DIDIT_API_KEY.

            const didit = new Didit();


            const result = await
            didit.sessions.webhooks.list("22222222-3333-4444-5555-666666666666");

            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.Webhooks.List(ctx, \"22222222-3333-4444-5555-666666666666\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import me.didit.Didit;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.sessions().webhooks().list("22222222-3333-4444-5555-666666666666");

            System.out.println(result);
        - lang: php
          label: PHP
          source: >-
            <?php


            require 'vendor/autoload.php';


            use Didit\DiditClient;


            // Reads DIDIT_API_KEY.

            $didit = new DiditClient();


            $result =
            $didit->sessions->webhooks->list('22222222-3333-4444-5555-666666666666');

            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: >-
            require "didit"


            # Reads DIDIT_API_KEY.

            didit = Didit::Client.new


            didit.sessions.webhooks.list("22222222-3333-4444-5555-666666666666").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();


            var result = await
            client.Sessions.Webhooks.ListAsync("22222222-3333-4444-5555-666666666666");

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    SessionWebhookDelivery:
      type: object
      description: >-
        Une tentative de livraison de webhook enregistrée pour une session de
        vérification, avec les en-têtes et le corps exacts de la requête envoyée
        par Didit.
      required:
        - uuid
        - session_id
        - request_url
        - response_status
        - status
        - webhook_type
        - request_header
        - request_body
        - created_at
      properties:
        uuid:
          type: string
          format: uuid
          description: >-
            ID de livraison. Utilisez-le comme `{webhook_uuid}` pour obtenir ou
            renvoyer cette livraison.
        session_id:
          type: string
          format: uuid
          description: >-
            La session à laquelle appartient la livraison (la session indiquée
            dans le chemin).
        request_url:
          type: string
          format: uri
          nullable: true
          description: URL à laquelle la livraison a été envoyée.
        response_status:
          type: integer
          nullable: true
          description: >-
            Code d'état HTTP renvoyé par votre endpoint. `null` tant que la
            livraison est en file d'attente et n'a pas encore été tentée.
            Lorsqu'aucune réponse HTTP n'a été reçue, Didit enregistre son
            propre statut : `504` lorsque votre endpoint n'a pas répondu dans un
            délai de 5 secondes, `503` en cas d'échec de connexion, `400`
            lorsque l'URL a été rejetée car non sécurisée (par exemple une
            adresse privée ou interne), et `404` pour toute autre erreur de
            requête. Un code supérieur ou égal à `400` est considéré comme une
            livraison échouée.
        status:
          type: string
          nullable: true
          description: >-
            Statut de la session lors de la génération de l'événement, par
            exemple `In Progress`, `Approved` ou `Declined`.
        webhook_type:
          $ref: '#/components/schemas/WebhookEvent'
        request_header:
          type: string
          description: >-
            Texte JSON (une chaîne de caractères) des en-têtes de requête
            envoyés par Didit : `Content-Type`, `X-Signature`, `X-Signature-V2`,
            `X-Signature-Simple`, `X-Timestamp` et `User-Agent`. Analysez-le
            avec un parseur JSON. Il contient les signatures, jamais le secret
            de signature.
        request_body:
          type: string
          description: >-
            Texte JSON (une chaîne de caractères) du payload exact envoyé par
            Didit, clés triées, comprenant `event_id` et `timestamp`.
            Analysez-le avec un parseur JSON ; voir [Format du
            payload](https://docs.didit.me/fr/integration/webhooks#structure-du-payload).
            Pour une clé restreinte sans `media: read`, les URL de médias qu'il
            contient sont `null` ; sans `sessions: write`, les tokens de session
            et les liens de vérification hébergés sont `null`. Un corps modifié
            de cette manière ne correspond plus à ses signatures. Didit
            n'enregistre pas le corps de réponse renvoyé par votre endpoint.
        created_at:
          type: string
          format: date-time
          description: Date et heure de création de la livraison.
    WebhookEvent:
      type: string
      description: >-
        Nom d'événement webhook pris en charge. Utilisez ces chaînes exactes
        dans `subscribed_events` ; les valeurs non prises en charge sont
        rejetées.
      enum:
        - status.updated
        - data.updated
        - user.status.updated
        - user.data.updated
        - business.status.updated
        - business.data.updated
        - activity.created
        - transaction.created
        - transaction.status.updated
        - travel_rule.status.updated
        - workflow.compliance_changed
        - transaction_rule_suggestions.created
        - auth.signup
        - auth.login
        - auth.login_failed
        - auth.password_reset_requested
        - auth.password_reset_completed
        - auth.mfa_changed
        - auth.new_device
        - auth.account_locked
        - investigator.report.ready
        - investigator.decision.automated
        - investigator.decision.overridden
        - investigator.decision.contested
        - investigator.question.raised
        - investigator.automation.paused
        - investigator.rfi.answered
        - investigator.rfi.overdue
        - investigator.drift.detected
        - investigator.sla.breached
        - investigator.qa.failed
        - investigator.external.report.ready
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        La clé API de votre application, issue de Développeurs -> Clés API dans
        la Business Console. La clé principale dispose d'un accès complet. Une
        clé nommée peut être restreinte : aucun, lecture ou écriture par
        ressource, limitée à certains workflows ou aux sessions approuvées, à
        une liste d'adresses IP et à une date d'expiration. 401 signifie que la
        clé est incorrecte, révoquée ou expirée ; 403 signifie qu'aucune clé n'a
        été envoyée, que la clé n'a pas accès à cette ressource ou action, ou
        que la requête provient d'une adresse hors de sa liste d'IP ; 404 sur
        une route de session signifie que la session est hors des workflows ou
        des statuts de la clé. Une clé sans accès aux médias reçoit les URL
        d'images, de vidéos et de PDF à null, et une clé sans accès en écriture
        aux sessions reçoit les liens et tokens de session à null. Voir
        https://docs.didit.me/console/api-keys.

````

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