---
title: "Replay a request"
method: POST
path: "/requests/{id}/replay"
tags: ["Requests"]
---

# Replay a request

`POST /requests/{id}/replay`

Replays a request through the full pipeline, creating a new request and new events. The original request and its events remain unchanged. Transformations, filters, and other pipeline rules are re-evaluated with the current configuration. By default, replays to all currently active connections on the request source — this also backfills traffic onto connections added after the original request was ingested. If the source has no active connections, the replay still creates a new request, rejected with cause `NO_CONNECTION`. Optionally specify `source_id` to target another source — alone it replays onto all of that source’s active connections, or combine it with `webhook_ids` to target specific connections on that source. `webhook_ids` without `source_id` may target any connections in the project; when they span multiple sources the replay fans out into one new request per target source.

## Path parameters

- `id` string, required — Request ID

## Request body

- object
  - `source_id` string — Optional target source ID. Without `webhook_ids`, replays onto all of the source’s active connections, resolved at replay time — a source with no active connections produces a rejected `NO_CONNECTION` request.
  - `webhook_ids` string[] — Optional list of connection IDs to replay to. When `source_id` is also provided, every connection must belong to that source. Defaults to all currently active connections on the request source.

## Response `200`

The new requests and events created from the replay

- ReplayRequest
  - `requests` Request[], required — New requests created by the replay. One request per distinct target source — replays targeting connections on multiple sources fan out into multiple requests.
    - `id` string, required — ID of the request
    - `team_id` string, required — ID of the project
    - `verified` boolean, nullable, required — Whether or not the request was verified when received
    - `original_event_data_id` string, nullable, required — ID of the request data
    - `rejection_cause` 'SOURCE_DISABLED' | 'NO_CONNECTION' | 'VERIFICATION_FAILED' | 'UNSUPPORTED_HTTP_METHOD' | 'UNSUPPORTED_CONTENT_TYPE' | 'UNPARSABLE_JSON' | 'PAYLOAD_TOO_LARGE' | 'INGESTION_FATAL' | 'UNKNOWN', required
    - `ingested_at` string, date-time, nullable, required — The time the request was originally received
    - `source_id` string, required — ID of the associated source
    - `events_count` integer, nullable, required — The count of events created from this request (CLI events not included)
    - `cli_events_count` integer, nullable, required — The count of CLI events created from this request
    - `ignored_count` integer, nullable, required
    - `updated_at` string, date-time, required — Date the event was last updated
    - `created_at` string, date-time, required — Date the event was created
    - `data` ShortEventData, nullable — Request data
      - `path` string, required — Request path
      - `query` string, nullable, required — Raw query param string
      - `parsed_query` union, required — JSON representation of query params
        - string, nullable
        - object
      - `headers` union, required — JSON representation of the headers
        - string
        - object
      - `body` union, required — JSON or string representation of the body
        - string
        - object
        - unknown[]
          - unknown
      - `is_large_payload` boolean, nullable — Whether the payload is considered large payload and not searchable
  - `events` Event[], required — All new events created by the replay across the fanned-out requests
    - `id` string, required — ID of the event
    - `team_id` string, required — ID of the project
    - `webhook_id` string, required — ID of the associated connection (webhook)
    - `source_id` string, required — ID of the associated source
    - `destination_id` string, required — ID of the associated destination
    - `delivery_group` string, nullable — Delivery group computed from the destination delivery groups config
    - `event_data_id` string, required — ID of the event data
    - `request_id` string, required — ID of the request that created the event
    - `attempts` integer, required — Number of delivery attempts made
    - `last_attempt_at` string, date-time, nullable, required — Date of the most recently attempted retry
    - `next_attempt_at` string, date-time, nullable, required — Date of the next scheduled retry
    - `response_status` integer, nullable — Event status
    - `error_code` 'BAD_RESPONSE' | 'CANCELLED' | 'TIMEOUT' | 'NOT_FOUND' | 'CANCELLED_PAST_RETENTION' | 'CONNECTION_REFUSED' | 'CONNECTION_RESET' | 'MISSING_URL' | 'CLI' | 'CLI_UNAVAILABLE' | 'SELF_SIGNED_CERT' | 'ERR_TLS_CERT_ALTNAME_INVALID' | 'ERR_SSL_WRONG_VERSION_NUMBER' | 'NETWORK_ERROR' | 'NETWORK_REQUEST_CANCELED' | 'NETWORK_UNREACHABLE' | 'TOO_MANY_REDIRECTS' | 'INVALID_CHARACTER' | 'INVALID_URL' | 'SSL_ERROR_CA_UNKNOWN' | 'DATA_ARCHIVED' | 'SSL_CERT_EXPIRED' | 'BULK_RETRY_CANCELLED' | 'DNS_LOOKUP_FAILED' | 'HOST_UNREACHABLE' | 'INTERNAL_ERROR' | 'PROTOCOL_ERROR' | 'PAYLOAD_MISSING' | 'UNABLE_TO_GET_ISSUER_CERT' | 'SOCKET_CLOSED' | 'OAUTH2_HANDSHAKE_FAILED' | 'Z_DATA_ERROR' | 'UNKNOWN' — Error code of the delivery attempt
    - `status` 'SCHEDULED' | 'QUEUED' | 'HOLD' | 'SUCCESSFUL' | 'FAILED' | 'CANCELLED', required
    - `successful_at` string, date-time, nullable, required — Date of the latest successful attempt
    - `cli_id` string, nullable, required — ID of the CLI the event is sent to
    - `updated_at` string, date-time, required — Date the event was last updated
    - `created_at` string, date-time, required — Date the event was created
    - `data` EventData, nullable — Event data if included
      - `url` string, required
      - `method` string, required
      - `path` string, nullable, required — Raw path string
      - `query` string, nullable, required — Raw query param string
      - `parsed_query` union, required — JSON representation of query params
        - string, nullable
        - object
      - `headers` union, required — JSON representation of the headers
        - string
        - object
      - `appended_headers` string[] — List of headers that were added by Hookdeck
      - `body` union, required — JSON or string representation of the body
        - string
        - object
        - unknown[]
          - unknown
      - `is_large_payload` boolean — Whether the payload is considered large payload and not searchable

## Other responses

- `400` — Bad Request
- `404` — Not Found
- `422` — Unprocessable Entity

---

[API](https://skmtc.dev/hookdeck/apis/hookdeck-admin-rest-api.md) · [All operations](https://skmtc.dev/hookdeck/apis/hookdeck-admin-rest-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/hookdeck/hookdeck-admin-rest-api/revisions/091808eac7fa/schema)
