> ## Documentation Index
> Fetch the complete documentation index at: https://docs.brudcast.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List webhook deliveries

> Returns the organization's webhook deliveries newest first, cursor paginated. Pass the `meta.nextCursor` of a page as `cursor` to fetch the next one; `meta.hasMore` is false on the last page. Attempts are included only when `includeAttempts` is set. Requires the `webhooks:read` scope.



## OpenAPI

````yaml /api-reference/openapi.json get /api/v1/user/webhook-deliveries
openapi: 3.0.0
info:
  title: Brudcast API
  version: 1.0.0
servers:
  - url: https://core-service.prod.brudcast.com
    description: Production
security: []
tags:
  - name: Analytics
    x-displayName: Analytics
  - name: Campaigns
    x-displayName: Campaigns
  - name: Contacts
    x-displayName: Contacts
  - name: Mailboxes
    x-displayName: Mailboxes
  - name: Messages
    x-displayName: Messages
  - name: Sender Identities
    x-displayName: Sender Identities
  - name: Sending Domains
    x-displayName: Sending Domains
  - name: Templates
    x-displayName: Templates
  - name: Webhooks
    x-displayName: Webhooks
paths:
  /api/v1/user/webhook-deliveries:
    get:
      tags:
        - Webhooks
      summary: List webhook deliveries
      description: >-
        Returns the organization's webhook deliveries newest first, cursor
        paginated. Pass the `meta.nextCursor` of a page as `cursor` to fetch the
        next one; `meta.hasMore` is false on the last page. Attempts are
        included only when `includeAttempts` is set. Requires the
        `webhooks:read` scope.
      parameters:
        - in: header
          name: X-Organization-Id
          required: false
          description: >-
            Required when authenticating with an access token. Optional with an
            API key, whose own organization binding is authoritative; a value
            contradicting it is refused with 403.
          schema:
            type: string
            format: uuid
        - in: query
          name: cursor
          required: false
          schema:
            type: string
        - in: query
          name: limit
          required: false
          schema:
            type: number
            minimum: 0
            maximum: 100
        - in: query
          name: webhookEndpointId
          required: false
          schema:
            type: string
        - in: query
          name: status
          required: false
          style: form
          explode: true
          schema:
            type: array
            items:
              enum:
                - pending
                - processing
                - retrying
                - delivered
                - failed
        - in: query
          name: type
          required: false
          schema:
            enum:
              - email.delivered
              - email.bounced
              - email.opened
              - email.clicked
              - email.marked_spam
              - email.unsubscribed
              - email.dropped
              - email.deferred
              - email.rejected
              - email.complained
              - contact.subscribed
              - contact.unsubscribed
              - contact.updated
              - campaign.sent
              - campaign.completed
              - test.event
        - in: query
          name: includeAttempts
          required: false
          schema:
            type: boolean
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  message:
                    type: string
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/WebhookDeliveryObject'
                  meta:
                    type: object
                    properties:
                      nextCursor:
                        type: string
                        nullable: true
                        example: MDE5MmY4YzQtNzE5
                      hasMore:
                        type: boolean
                        example: true
                      limit:
                        type: number
                        example: 50
                      retentionDays:
                        type: number
                        example: 30
                    required:
                      - nextCursor
                required:
                  - success
                  - message
                  - data
                  - meta
        '401':
          description: The credential is missing, malformed, revoked or expired
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            The key lacks the scope the endpoint requires, or the organization
            does not match the credential
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: The payload or query string failed validation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationErrorResponse'
        '429':
          description: >-
            Rate limit exceeded; retry after the number of seconds in
            `retryAfter`
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitErrorResponse'
      security:
        - apiKey: []
        - apiKeyBearer: []
components:
  schemas:
    WebhookDeliveryObject:
      type: object
      properties:
        id:
          type: string
          format: uuid
        webhookEndpointId:
          type: string
          format: uuid
        type:
          type: string
          enum:
            - email.delivered
            - email.bounced
            - email.opened
            - email.clicked
            - email.marked_spam
            - email.unsubscribed
            - email.dropped
            - email.deferred
            - email.rejected
            - email.complained
            - contact.subscribed
            - contact.unsubscribed
            - contact.updated
            - campaign.sent
            - campaign.completed
            - test.event
        payload:
          type: object
          description: The event body posted to the endpoint, shaped by the event type
        status:
          type: string
          enum:
            - pending
            - processing
            - retrying
            - delivered
            - failed
        attemptCount:
          type: number
        httpStatusCode:
          type: number
          nullable: true
          example: 200
        errorMessage:
          type: string
          nullable: true
        responseBody:
          type: string
          nullable: true
        nextRetryAt:
          type: string
          format: date-time
          nullable: true
          description: When the next attempt is due; null once the delivery is settled
        deliveredAt:
          type: string
          format: date-time
          nullable: true
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        attempts:
          type: array
          items:
            $ref: '#/components/schemas/WebhookDeliveryAttemptObject'
        endpoint:
          $ref: '#/components/schemas/WebhookEndpointObject'
      required:
        - id
        - webhookEndpointId
        - type
        - payload
        - status
        - attemptCount
        - httpStatusCode
        - errorMessage
        - responseBody
        - nextRetryAt
        - deliveredAt
        - createdAt
        - updatedAt
    ErrorResponse:
      type: object
      properties:
        success:
          type: boolean
          example: false
        message:
          type: string
          example: Resource not found
        code:
          type: string
          enum:
            - E_VALIDATION_ERROR
            - E_UNAUTHORIZED_ACCESS
            - E_UNAUTHORIZED
            - E_FORBIDDEN
            - E_INSUFFICIENT_SCOPE
            - E_ROW_NOT_FOUND
            - E_TOO_MANY_REQUESTS
            - E_BUSINESS_RULE_VIOLATION
            - E_CAMPAIGN_NOT_SENDABLE
            - INSUFFICIENT_CREDITS
            - SUBSCRIPTION_REQUIRED
          example: E_ROW_NOT_FOUND
      required:
        - success
        - message
        - code
    ValidationErrorResponse:
      type: object
      properties:
        success:
          type: boolean
          example: false
        message:
          type: string
          example: The payload is invalid
        code:
          type: string
          enum:
            - E_VALIDATION_ERROR
            - E_UNAUTHORIZED_ACCESS
            - E_UNAUTHORIZED
            - E_FORBIDDEN
            - E_INSUFFICIENT_SCOPE
            - E_ROW_NOT_FOUND
            - E_TOO_MANY_REQUESTS
            - E_BUSINESS_RULE_VIOLATION
            - E_CAMPAIGN_NOT_SENDABLE
            - INSUFFICIENT_CREDITS
            - SUBSCRIPTION_REQUIRED
          example: E_VALIDATION_ERROR
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ValidationErrorItem'
      required:
        - success
        - message
        - code
        - errors
    RateLimitErrorResponse:
      type: object
      properties:
        success:
          type: boolean
          example: false
        message:
          type: string
          example: Too many requests
        code:
          type: string
          enum:
            - E_VALIDATION_ERROR
            - E_UNAUTHORIZED_ACCESS
            - E_UNAUTHORIZED
            - E_FORBIDDEN
            - E_INSUFFICIENT_SCOPE
            - E_ROW_NOT_FOUND
            - E_TOO_MANY_REQUESTS
            - E_BUSINESS_RULE_VIOLATION
            - E_CAMPAIGN_NOT_SENDABLE
            - INSUFFICIENT_CREDITS
            - SUBSCRIPTION_REQUIRED
          example: E_TOO_MANY_REQUESTS
        retryAfter:
          type: number
          example: 60
      required:
        - success
        - message
        - code
        - retryAfter
    WebhookDeliveryAttemptObject:
      type: object
      properties:
        id:
          type: string
          format: uuid
        webhookDeliveryId:
          type: string
          format: uuid
        attemptNumber:
          type: number
          example: 1
        httpStatusCode:
          type: number
          nullable: true
          example: 200
          description: Null when the endpoint could not be reached at all
        responseBody:
          type: string
          nullable: true
          description: The body the endpoint answered with
        errorMessage:
          type: string
          nullable: true
        durationMs:
          type: number
          nullable: true
          description: Attempt duration in milliseconds
        attemptedAt:
          type: string
          format: date-time
      required:
        - id
        - webhookDeliveryId
        - attemptNumber
        - httpStatusCode
        - responseBody
        - errorMessage
        - durationMs
        - attemptedAt
    WebhookEndpointObject:
      type: object
      properties:
        id:
          type: string
          format: uuid
        organizationId:
          type: string
          format: uuid
        url:
          type: string
          example: https://example.com/hooks/brudcast
        description:
          type: string
          nullable: true
        events:
          type: array
          items:
            type: string
            enum:
              - email.delivered
              - email.bounced
              - email.opened
              - email.clicked
              - email.marked_spam
              - email.unsubscribed
              - email.dropped
              - email.deferred
              - email.rejected
              - email.complained
              - contact.subscribed
              - contact.unsubscribed
              - contact.updated
              - campaign.sent
              - campaign.completed
              - test.event
          description: The event types the endpoint is subscribed to
        customHeaders:
          type: array
          items:
            $ref: '#/components/schemas/WebhookCustomHeader'
          nullable: true
          description: Extra headers sent with every delivery to this endpoint
        isActive:
          type: boolean
        maxRetries:
          type: number
          description: Retries attempted after the first failed delivery
        timeoutSeconds:
          type: number
          description: Seconds to wait for the endpoint to respond
        lastTriggeredAt:
          type: string
          format: date-time
          nullable: true
          description: Null until the endpoint has received its first delivery
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
      required:
        - id
        - organizationId
        - url
        - description
        - events
        - isActive
        - maxRetries
        - customHeaders
        - timeoutSeconds
        - lastTriggeredAt
        - createdAt
        - updatedAt
    ValidationErrorItem:
      type: object
      properties:
        field:
          type: string
          example: emailAddress
        rule:
          type: string
          example: email
        message:
          type: string
          example: The emailAddress field must be a valid email address
      required:
        - field
        - rule
        - message
    WebhookCustomHeader:
      type: object
      properties:
        key:
          type: string
          example: X-Signature-Source
        value:
          type: string
          example: brudcast
      required:
        - key
        - value
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: X-API-Key
      description: >-
        An organization API key, prefixed `bk_live_`. Takes precedence over
        `Authorization` when both are sent. The key is bound to one
        organization, and the scopes it was issued with are enforced per
        endpoint.
    apiKeyBearer:
      type: http
      scheme: bearer
      bearerFormat: bk_live_...
      description: >-
        The same organization API key sent as `Authorization: Bearer
        bk_live_...`. Accepted only when the value begins with `bk_` and no
        `X-API-Key` header is present.

````