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

# Redeliver Webhook

> Manually re-attempt a delivery for an existing event

## Overview

Queues a new delivery attempt for the same underlying event as the original delivery. The new
attempt carries a fresh `webhook-timestamp` (so freshness checks on your side pass) and a new
`delivery_attempt_id`, but the same `webhook-id` as the original, so your handler can still
dedupe on it. This endpoint is billable.

Requires the `portfolios:manage` scope.

## Only terminal deliveries are redeliverable

Redelivery is accepted only when the delivery's automatic retry chain has
reached a **terminal** state: `delivered`, `exhausted`, or a `failed`
attempt with no scheduled retry. If the chain is still live — the attempt
is `pending`, or `failed` with an automatic retry still scheduled — the
request returns **409** with error type `redelivery_conflict`. The
automatic retry schedule (7 attempts over \~24 hours) is already working
that delivery; redelivering mid-chain would race it. Poll
[`GET /v1/webhooks/{id}/deliveries/{did}`](/api-reference/monitoring/webhooks/retrieve-delivery)
until the attempt is terminal, then redeliver.

Repeated redelivery of the same terminal attempt is idempotent: the API
returns the existing queued attempt's `delivery_attempt_id` instead of
creating a duplicate.

## Path Parameters

<ParamField path="id" type="string" required>Endpoint ID (`whk_*`).</ParamField>
<ParamField path="did" type="string" required>Original delivery attempt UUID.</ParamField>

## Response

<ResponseField name="object" type="string">Always `"webhook_redelivery"`.</ResponseField>
<ResponseField name="delivery_attempt_id" type="string">UUID of the newly queued attempt.</ResponseField>
<ResponseField name="request_id" type="string">Request identifier.</ResponseField>

## Errors

| Status | `type`      | When                                                          |
| ------ | ----------- | ------------------------------------------------------------- |
| 404    | `not_found` | Endpoint or delivery doesn't exist, or belongs to another org |

## Code Examples

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "https://api.signa.so/v1/webhooks/whk_2mR8vNkT/deliveries/018f9b2e-0000-7000-8000-000000000010/redeliver" \
    -H "Authorization: Bearer sig_YOUR_KEY" \
    -H "Idempotency-Key: redeliver-018f9b2e-2026-06-12"
  ```

  ```typescript TypeScript theme={null}
  import { Signa } from "@signa-so/sdk";
  const signa = new Signa({ api_key: process.env.SIGNA_API_KEY });

  const result = await signa.webhooks.redeliver(
    "whk_2mR8vNkT",
    "018f9b2e-0000-7000-8000-000000000010",
  );
  ```
</CodeGroup>

<ResponseExample>
  ```json theme={null}
  {
    "object": "webhook_redelivery",
    "delivery_attempt_id": "018f9b2e-0000-7000-8000-000000000020",
    "request_id": "req_4nRvXq2T"
  }
  ```
</ResponseExample>

## Related Endpoints

* [List Webhook Deliveries](/api-reference/monitoring/webhooks/list-deliveries) - find the delivery to redeliver
* [Test Webhook Endpoint](/api-reference/monitoring/webhooks/test) - send a synthetic ping instead of replaying a real event
