---
title: "Replay an event"
method: POST
path: "/events/{id}/replay"
tags: ["Events"]
---

# Replay an event

`POST /events/{id}/replay`

Replays an event by re-ingesting the original request through the full pipeline, creating a new request and new events. The original event remains unchanged. By default, replays to the same connection as the original event. Optionally specify one or more connections via `webhook_ids` — any connections in the project. When the target connections span multiple sources, the replay fans out into one new request per target source. Alternatively 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.

## Path parameters

- `id` string, required — Event 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. Can be any connections in the project; when `source_id` is also provided, every connection must belong to that source. When target connections span multiple sources the replay fans out into one new request per target source. If not provided, replays to the original event's connection.

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

---

[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)
