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

# Replay a webhook delivery

> Queue a saved event for another delivery after correcting a receiver problem or restoring a downstream service. Requires `webhooks:manage` and the credential owning the subscription. The receiver must be active and verified. Send its subscription ID and a delivery ID from its history; no body is needed.

HTTP `202` means queued, not acknowledged by the receiver. The event and delivery IDs stay stable, the retry count restarts and a later send receives a new attempt ID. Existing attempt history and last-result fields remain until subsequent processing updates the delivery. The receiver must deduplicate by event identity so replay cannot duplicate business work.

Persist an `Idempotency-Key` and reuse it after an uncertain response. Current access and active/verified checks run before receipt replay: pausing or rotating the receiver can make a matching retry return `409 inactive_webhook`. Restore the receiver deliberately before retrying. `409 inactive_webhook` requires verification/enabling first. `409 delivery_in_progress` means an attempt is still running; wait before explicitly trying again. `404 not_found` means the delivery is missing or does not belong to this subscription. Inspect history afterward. Use a new operation key only when deliberately requesting another later replay.

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



## OpenAPI

````yaml /api/openapi.json post /webhooks/{id}/deliveries/{deliveryId}/replay
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}/replay:
    post:
      tags:
        - Webhook deliveries
      summary: Replay a webhook delivery
      description: >-
        Queue a saved event for another delivery after correcting a receiver
        problem or restoring a downstream service. Requires `webhooks:manage`
        and the credential owning the subscription. The receiver must be active
        and verified. Send its subscription ID and a delivery ID from its
        history; no body is needed.


        HTTP `202` means queued, not acknowledged by the receiver. The event and
        delivery IDs stay stable, the retry count restarts and a later send
        receives a new attempt ID. Existing attempt history and last-result
        fields remain until subsequent processing updates the delivery. The
        receiver must deduplicate by event identity so replay cannot duplicate
        business work.


        Persist an `Idempotency-Key` and reuse it after an uncertain response.
        Current access and active/verified checks run before receipt replay:
        pausing or rotating the receiver can make a matching retry return `409
        inactive_webhook`. Restore the receiver deliberately before retrying.
        `409 inactive_webhook` requires verification/enabling first. `409
        delivery_in_progress` means an attempt is still running; wait before
        explicitly trying again. `404 not_found` means the delivery is missing
        or does not belong to this subscription. Inspect history afterward. Use
        a new operation key only when deliberately requesting another later
        replay.


        See [replay safety](/guides/webhooks#delivery-history-and-replay).
      operationId: postWebhooksByIdDeliveriesByDeliveryidReplay
      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
        - name: Idempotency-Key
          in: header
          required: true
          schema:
            type: string
            pattern: ^[A-Za-z0-9._:-]{1,200}$
          description: >-
            Persist one key for this logical operation before sending it. Reuse
            the same value only with the same method, path and body after a
            timeout. A changed request returns 409 idempotency_conflict; a
            matching retry returns the original response.
          example: 9d6b623c-c132-4d2f-b8cf-7c65d4760dbe
      responses:
        '202':
          description: >-
            The existing delivery was queued again. Inspect its status later;
            acceptance does not mean successful receipt.
          headers:
            X-Request-Id:
              schema:
                type: string
                format: uuid
            RateLimit-Limit:
              schema:
                type: integer
            RateLimit-Remaining:
              schema:
                type: integer
            Idempotency-Replayed:
              schema:
                type: string
                enum:
                  - 'true'
                  - 'false'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReplayAccepted'
              example:
                id: 00000000-0000-4000-8000-000000000003
                eventId: 00000000-0000-4000-8000-000000000002
                state: pending
        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}"

            # Set this once per operation; reuse it with the same request after
            a timeout.

            : "${POWERDIALER_REQUEST_ID:?Set POWERDIALER_REQUEST_ID to a new
            UUID for this operation}"

            curl --request POST \
              --url 'https://api.migration.powerdialer.ai/api/public/v2/webhooks/00000000-0000-4000-8000-000000000001/deliveries/00000000-0000-4000-8000-000000000003/replay' \
              --header "Authorization: Bearer $POWERDIALER_API_KEY" \
              --header "Idempotency-Key: $POWERDIALER_REQUEST_ID"
components:
  schemas:
    ReplayAccepted:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: Existing delivery ID. Replay preserves it.
        eventId:
          type: string
          format: uuid
          description: Existing event ID. Replay preserves it for deduplication.
        state:
          type: string
          enum:
            - pending
          description: >-
            pending means the delivery is queued; it has not necessarily reached
            the receiver.
      required:
        - id
        - eventId
        - state
      examples:
        - id: 00000000-0000-4000-8000-000000000003
          eventId: 00000000-0000-4000-8000-000000000002
          state: pending
    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
  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.