Redeliver a webhook event

Send a failed delivery again, with a full set of retries. We make one initial attempt and retry up to three times. If all four attempts fail, the delivery is marked `failed`. Once your endpoint is healthy, this is how you send it again. Only a delivery that has `failed` can be sent again; anything else returns `409`. The delivery keeps its identifier, so this is the same event arriving a second time rather than a new one — your endpoint will see the same `X-Event-ID` it saw before, which is exactly why it should be safe to receive twice. The signature is recalculated for the new attempt, so always check the signature that arrives with the request rather than one you kept. The response comes back straight away with the delivery marked `pending`; the send itself follows a moment later. Requires the `webhooks.update` permission.

POST
/webhooks/{webhookId}/events/{eventId}/redeliver
AuthorizationBearer <token>

The access token returned after a successful sign-in, sent as Authorization: Bearer <access_token>.

It identifies the person and the organization they are working in, and it lasts about fifteen minutes. When it runs out, use their refresh token at POST /auth/refresh-token instead of asking them to sign in again.

In: header

Path Parameters

webhookId*string

Identifier of the webhook, the same value sent as the X-Webhook-ID header.

eventId*string

Identifier of the webhook delivery, the same value sent as the X-Event-ID header.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://api.dual.network/webhooks/665f1c2d4b1a2c3d4e5f6ae0/events/665f1c2d4b1a2c3d4e5f6a40/redeliver"
{
  "id": "665f1c2d4b1a2c3d4e5f6a41",
  "webhook_id": "665f1c2d4b1a2c3d4e5f6a7b",
  "type": "template_activity",
  "url": "https://hooks.example.com/dual",
  "status": "pending",
  "payload": "{\"id\":\"665f1c2d4b1a2c3d4e5f6a41\",\"type\":\"template_activity\",\"event\":{\"name\":\"burn\"},\"when_created\":\"2026-03-02T11:00:00Z\"}",
  "signature": "t=1772449200,v1=1a2b3c4d5e6f70819293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f9",
  "when_created": "2026-03-02T11:00:00Z",
  "when_modified": "2026-03-02T15:30:05Z"
}
{
  "code": 3,
  "message": "Key: 'limit' Error:Field validation for 'limit' failed on the 'lte' tag"
}

{
  "code": 16,
  "message": "no auth provided"
}

{
  "code": 5,
  "message": "object not found"
}
{
  "code": 10,
  "message": "conflict"
}
{
  "code": 13,
  "message": "internal error"
}