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

# Get delivery attempts

> See individual HTTP attempts for a delivery when investigating repeated failures or an ambiguous timeout. Requires `webhooks:manage` and the credential owning the subscription. Use a `deliveryId` from that subscription's delivery list; an event ID or attempt ID is not interchangeable with it.

The response contains the latest 100 attempts, newest first, with attempt ID, delivery ID, HTTP status, error and creation time. A null status means no HTTP response status was recorded. It does not prove that the receiver performed no work. Each resend has a new attempt ID while the delivery and event IDs stay stable.

A `404 not_found` means the subscription is inaccessible or the delivery does not belong to it. Check both IDs before retrying. This read needs no idempotency key and can be repeated after transient failures; reading history does not trigger a resend.

See [delivery inspection and replay](/guides/webhooks#delivery-history-and-replay).



## OpenAPI

````yaml /api/openapi.json get /webhooks/{id}/deliveries/{deliveryId}/attempts
openapi: 3.1.0
info:
  title: PowerDialer API v2
  version: 2.0.0
  description: >-
    Connect your CRM, sales workspace or reporting tools to PowerDialer using
    scoped API keys. Manage contacts and calling lists, read call evidence and
    analytics, and receive signed events. All example records and IDs are
    synthetic; replace them with values from your workspace. Shared-key v1 is
    retired. API availability was verified on 2026-10-08; see /availability for
    historical data coverage. Legacy outbound webhooks use a separate contract.
servers:
  - url: https://api.migration.powerdialer.ai/api/public/v2
    description: Production API v2; availability verified on 2026-10-08.
security:
  - ApiKey: []
tags:
  - name: Authentication
  - name: Contacts
  - name: Calling lists
  - name: Imports
  - name: Calls
  - name: Synchronization
  - name: Analytics
  - name: Webhooks
  - name: Webhook deliveries
  - name: Incoming webhook payloads
paths:
  /webhooks/{id}/deliveries/{deliveryId}/attempts:
    get:
      tags:
        - Webhook deliveries
      summary: Get delivery attempts
      description: >-
        See individual HTTP attempts for a delivery when investigating repeated
        failures or an ambiguous timeout. Requires `webhooks:manage` and the
        credential owning the subscription. Use a `deliveryId` from that
        subscription's delivery list; an event ID or attempt ID is not
        interchangeable with it.


        The response contains the latest 100 attempts, newest first, with
        attempt ID, delivery ID, HTTP status, error and creation time. A null
        status means no HTTP response status was recorded. It does not prove
        that the receiver performed no work. Each resend has a new attempt ID
        while the delivery and event IDs stay stable.


        A `404 not_found` means the subscription is inaccessible or the delivery
        does not belong to it. Check both IDs before retrying. This read needs
        no idempotency key and can be repeated after transient failures; reading
        history does not trigger a resend.


        See [delivery inspection and
        replay](/guides/webhooks#delivery-history-and-replay).
      operationId: getWebhooksByIdDeliveriesByDeliveryidAttempts
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: >-
            Subscription UUID returned by registration or listing. It must
            belong to the credential making this request.
          example: 00000000-0000-4000-8000-000000000001
        - name: deliveryId
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: >-
            Delivery UUID returned by this subscription’s delivery-history
            endpoint. Use the delivery ID, not its event ID or an individual
            attempt ID.
          example: 00000000-0000-4000-8000-000000000003
      responses:
        '200':
          description: >-
            The latest 100 recorded attempts for the selected delivery, ordered
            newest first.
          headers:
            X-Request-Id:
              schema:
                type: string
                format: uuid
            RateLimit-Limit:
              schema:
                type: integer
            RateLimit-Remaining:
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AttemptPage'
              example:
                data:
                  - id: 00000000-0000-4000-8000-000000000004
                    deliveryId: 00000000-0000-4000-8000-000000000003
                    status: 200
                    error: null
                    createdAt: '2026-10-08T12:00:00.000Z'
        default:
          description: >-
            Error. 400 invalid request; 401 invalid credential; 403 insufficient
            access; 404 not found; 409 state/idempotency conflict; 413 size
            limit; 422 verification failure; 429 rate limit (Retry-After
            seconds); 503 temporary service failure.
          headers:
            Retry-After:
              schema:
                type: integer
            X-Request-Id:
              schema:
                type: string
                format: uuid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error:
                  code: invalid_api_key
                  message: API key is invalid, expired or revoked
                  requestId: 00000000-0000-4000-8000-000000000004
      x-codeSamples:
        - lang: bash
          label: cURL
          source: >-
            # Replace example resource IDs and ownerId with values from your
            workspace.

            : "${POWERDIALER_API_KEY:?Set POWERDIALER_API_KEY to your scoped API
            key}"

            curl --request GET \
              --url 'https://api.migration.powerdialer.ai/api/public/v2/webhooks/00000000-0000-4000-8000-000000000001/deliveries/00000000-0000-4000-8000-000000000003/attempts' \
              --header "Authorization: Bearer $POWERDIALER_API_KEY"
components:
  schemas:
    AttemptPage:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/DeliveryAttempt'
          description: The most recent delivery attempts, newest first, up to 100.
      required:
        - data
      examples:
        - data:
            - id: 00000000-0000-4000-8000-000000000004
              deliveryId: 00000000-0000-4000-8000-000000000003
              status: 200
              error: null
              createdAt: '2026-10-08T12:00:00.000Z'
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              description: Stable machine-readable error code.
            message:
              type: string
              description: Human-readable explanation.
            requestId:
              type: string
              format: uuid
              description: Request identifier to include when investigating a failure.
            details:
              type: array
              items:
                type: object
                properties:
                  path:
                    type: string
                  message:
                    type: string
                required:
                  - path
                  - message
              description: Validation errors, when available.
          required:
            - code
            - message
            - requestId
      required:
        - error
      examples:
        - error:
            code: insufficient_scope
            message: Requires contacts:read
            requestId: 00000000-0000-4000-8000-000000000004
    DeliveryAttempt:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: Attempt ID; a replay creates new attempts with new IDs.
        deliveryId:
          type: string
          format: uuid
          description: Delivery to which this attempt belongs.
        status:
          anyOf:
            - type: integer
            - type: 'null'
          description: Receiver HTTP status, or null for a transport failure.
        error:
          anyOf:
            - type: string
            - type: 'null'
          description: Transport or delivery error when present, otherwise null.
        createdAt:
          type: string
          format: date-time
          description: Attempt record time in UTC.
      required:
        - id
        - deliveryId
        - status
        - error
        - createdAt
      examples:
        - id: 00000000-0000-4000-8000-000000000004
          deliveryId: 00000000-0000-4000-8000-000000000003
          status: 200
          error: null
          createdAt: '2026-10-08T12:00:00.000Z'
  securitySchemes:
    ApiKey:
      type: http
      scheme: bearer
      bearerFormat: pd_<live|test>_<credential UUID>.<random secret>
      description: >-
        Issued in Developers. Workspace/owner/scopes come from credential, never
        acting-user headers. API keys cannot manage API credentials.

````

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