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

# Listar entregas de webhook de sessão API

> Liste todos os webhooks que a Didit enviou para uma sessão de verificação, com o URL, a resposta do seu endpoint e os cabeçalhos e payload exatos.



Prompt da API para listar entregas de webhook de sessão
        Copiar o prompt para a área de transferência



      
      

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



      
      

Colar em

Cada tentativa é registada, incluindo as [retentativas automáticas](https://docs.didit.me/pt/integration/webhooks.md#política-de-novas-tentativas) que o Didit faz após uma resposta `5xx` ou `404`. Assim, uma entrega falhada seguida de uma retentativa bem-sucedida aparece como duas entradas com o mesmo `event_id` dentro de `request_body`.Para inspecionar uma entrega, use [Obter entrega de webhook de sessão](https://docs.didit.me/pt/management-api/sessions/get-webhook.md). Para a reenviar depois de corrigir o seu endpoint, use [Reenviar entrega de webhook de sessão](https://docs.didit.me/pt/management-api/sessions/resend-webhook.md).


## OpenAPI

````yaml pt/openapi-25.json GET /v3/session/{sessionId}/webhooks/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API de Verificação de identidade. Autentique-se com o cabeçalho x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/session/{sessionId}/webhooks/:
    get:
      tags:
        - Sessions
      summary: Listar entregas de webhooks da sessão
      description: >-
        Listar todos os registos de entrega de webhook registados pela Didit
        para uma sessão de verificação, utilizador (KYC) ou empresa (KYB), dos
        mais recentes para os mais antigos, como um array JSON simples (não
        paginado). Cada entrada corresponde a uma tentativa para um destino: o
        primeiro envio, cada [nova
        tentativa](https://docs.didit.me/pt/integration/webhooks#política-de-novas-tentativas)
        automática e cada reenvio são entradas separadas com o seu próprio
        `uuid`, sendo que as novas tentativas e os reenvios mantêm o `event_id`
        do payload. O `request_header` e o `request_body` são texto em JSON;
        faça o parsing para consultar as assinaturas e o payload. Os registos de
        entrega ficam disponíveis durante cerca de 30 dias, pelo que um array
        vazio significa que ainda não foi enviado nenhum webhook para a sessão
        ou que todas as entregas são anteriores a esse período. Uma chave de API
        com âmbito restrito necessita de `sessions: read` e `decisions: read`.
      operationId: get_v3_session_webhooks
      parameters:
        - name: sessionId
          in: path
          required: true
          description: >-
            UUID da sessão de verificação, utilizador (KYC) ou empresa (KYB): o
            `session_id` retornado por `POST /v3/session/`. O servidor resolve-o
            em ambos os tipos de sessão.


            **Deve ser um UUID válido.** A rota apenas faz correspondência com
            UUIDs bem formatados, pelo que um valor mal formatado é rejeitado
            pelo router de URL antes da execução de qualquer código da aplicação
            e a resposta é uma página **HTML** de `404` em vez do envelope JSON
            `{"detail": ...}` apresentado abaixo.
          schema:
            type: string
            format: uuid
          example: 22222222-3333-4444-5555-666666666666
      responses:
        '200':
          description: >-
            Todas as entregas registadas para a sessão, da mais recente para a
            mais antiga.
          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: >-
            A chave de API expirou: foi criada com uma data de validade que já
            passou. Uma chave incorreta ou revogada também recebe `401`; uma
            chave em falta recebe `403`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Mensagem de erro legível.
              examples:
                Expired key:
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            O pedido não é permitido. A ausência de `x-api-key`, ou uma chave
            inválida ou revogada, recebe `Authentication credentials were not
            provided or are invalid.` Uma chave de outra aplicação recebe `You
            do not have permission to perform this action.` Uma chave com âmbito
            sem o acesso de que este endpoint necessita recebe uma mensagem a
            indicar o acesso em falta, e uma chave utilizada fora da sua lista
            de permissões de IP recebe `This API key can't be used from this IP
            address.` Um `sessionId` desconhecido devolve `404` antes de a
            credencial ser verificada.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Mensagem de erro legível.
              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: >-
            A sessão não existe ou foi eliminada (`Not found.`, devolvido antes
            de a credencial ser verificada), ou está fora dos limites de fluxo
            ou de estado de uma chave com âmbito restrito (`Session not
            found.`).
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Mensagem de erro legível.
              examples:
                Unknown session:
                  value:
                    detail: Not found.
                Outside the key's limits:
                  value:
                    detail: Session not found.
        '429':
          description: >-
            Limite de pedidos excedido: mais de 600 pedidos GET na janela atual
            de um minuto para esta chave de API. Aguarde `Retry-After` segundos
            antes de tentar novamente.
          headers:
            Retry-After:
              description: Segundos a aguardar antes de tentar novamente.
              schema:
                type: integer
                minimum: 1
                example: 30
            X-RateLimit-Limit:
              description: Pedidos permitidos na janela de um minuto (600).
              schema:
                type: integer
                example: 600
            X-RateLimit-Remaining:
              description: Pedidos restantes na janela atual.
              schema:
                type: integer
                example: 0
            X-RateLimit-Reset:
              description: Hora Unix (segundos) em que a janela atual é reposta.
              schema:
                type: integer
                example: 1792056120
            X-RateLimit-Scope:
              description: Nome do orçamento que foi excedido.
              schema:
                type: string
                example: generic-get
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Mensagem de erro legível.
              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: >-
        Uma tentativa de entrega de webhook registada para uma sessão de
        verificação, com os cabeçalhos e o corpo exatos do pedido enviados pela
        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 entrega. Utilize-o como `{webhook_uuid}` para obter ou
            reenviar esta entrega.
        session_id:
          type: string
          format: uuid
          description: A sessão à qual a entrega pertence (a sessão no caminho).
        request_url:
          type: string
          format: uri
          nullable: true
          description: URL para onde a entrega foi enviada.
        response_status:
          type: integer
          nullable: true
          description: >-
            Código de estado HTTP devolvido pelo seu endpoint. `null` enquanto a
            entrega está na fila e ainda não foi tentada. Quando não foi
            recebida nenhuma resposta HTTP, a Didit regista um código de estado
            próprio: `504` quando o seu endpoint não respondeu no prazo de 5
            segundos, `503` para uma falha de ligação, `400` quando o URL foi
            recusado por não ser seguro (por exemplo, um endereço privado ou
            interno) e `404` para qualquer outro erro no pedido. Valores iguais
            ou superiores a `400` contam como uma entrega com falha.
        status:
          type: string
          nullable: true
          description: >-
            Estado da sessão quando o evento foi gerado, por exemplo `In
            Progress`, `Approved` ou `Declined`.
        webhook_type:
          $ref: '#/components/schemas/WebhookEvent'
        request_header:
          type: string
          description: >-
            Texto JSON (uma string) dos cabeçalhos do pedido que a Didit enviou:
            `Content-Type`, `X-Signature`, `X-Signature-V2`,
            `X-Signature-Simple`, `X-Timestamp` e `User-Agent`. Efetue o parse
            com um analisador de JSON. Contém assinaturas, nunca o segredo de
            assinatura.
        request_body:
          type: string
          description: >-
            Texto JSON (uma string) do payload exato que a Didit enviou, com
            chaves ordenadas, incluindo `event_id` e `timestamp`. Efetue o parse
            com um analisador de JSON; consulte [Formato do
            payload](https://docs.didit.me/pt/integration/webhooks#estrutura-do-payload).
            Para uma chave com âmbito sem `media: read`, os URLs de multimédia
            no seu interior são `null`; sem `sessions: write`, os tokens de
            sessão e as ligações de verificação alojadas são `null`. Um corpo
            alterado dessa forma já não coincide com as suas assinaturas. A
            Didit não regista o corpo da resposta que o seu endpoint devolveu.
        created_at:
          type: string
          format: date-time
          description: Quando a entrega foi criada.
    WebhookEvent:
      type: string
      description: >-
        Nome de evento de webhook suportado. Utilize estas strings exatas em
        `subscribed_events`; valores não suportados são rejeitados.
      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: >-
        A chave de API da sua aplicação, a partir de Programadores -> Chaves de
        API na Business Console. A chave principal tem acesso total. Uma chave
        nomeada pode ter o âmbito definido: nenhum, leitura ou escrita por
        recurso, limitada a alguns fluxos ou a sessões aprovadas, a uma lista de
        endereços IP e a uma data de validade. 401 significa que a chave está
        incorreta, revogada ou expirada; 403 significa que nenhuma chave foi
        enviada, que a chave não tem acesso a este recurso ou ação, ou que o
        pedido veio de um endereço fora da sua lista de IP; 404 numa rota de
        sessão significa que a sessão está fora dos fluxos ou estados da chave.
        Uma chave sem acesso a multimédia recebe URLs de imagens, vídeos e PDFs
        como nulos, e uma chave sem permissão de escrita em sessões recebe
        ligações de sessão e tokens como nulos. Consulte
        https://docs.didit.me/console/api-keys.

````

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