GetItDoneGetItDone Docs
API ReferenceWebhook endpoints

Replay a webhook delivery

POST
/v1/webhook-endpoints/{endpoint_id}/deliveries/{delivery_id}/replay

Re-enqueues one delivery, Stripe-style: creates a FRESH PENDING WebhookDelivery row for the SAME event and endpoint (attempt count 0, next attempt now) that the worker picks up on its normal cycle — the original row is never mutated, so the log keeps the full history. Allowed only when the target delivery is in a terminal state (FAILED, SUCCEEDED or DISABLED — replaying a succeeded delivery is a deliberate resend). Answers 409 delivery_already_pending when ANY delivery for this event+endpoint pair is already PENDING or DELIVERING (no double-enqueue) — which also makes an accidental double-click naturally safe, so this route does not use the Idempotency-Key ledger. The replayed delivery carries the SAME webhook-id signature header as the original (the event id), so consumer-side dedup keeps working. Replaying does NOT re-enable a disabled endpoint — the worker only delivers to enabled endpoints; re-enable via the update route first.

Authorization

bearerAuth
headerAuthorizationBearer <token>

A gid_ API key (Profile → API Keys) or an OAuth 2.1 access token.

Path Parameters

endpoint_id*string
delivery_id*string

Response Body

The freshly enqueued replay delivery.

application/json
  1. response

One delivery-log row — REDACTED: never includes response bodies or the signing secret.

id*string

Stable id of the delivery row.

event_id*string

The owning WebhookEvent's id — also the webhook-id signature header on the wire.

event_type*string

The domain event type.

state*WebhookDeliveryState

Lifecycle state of one (event, endpoint) delivery.

Value in"PENDING""DELIVERING""SUCCEEDED""FAILED""DISABLED"
attempt_count*integer

Number of delivery attempts made so far.

Range-9007199254740991 <= value <= 9007199254740991
last_status*|

HTTP status of the most recent attempt, or null before any attempt has run.

next_attempt_at*|

When the next retry is scheduled, or null when not PENDING.

created_at*string

ISO-8601 UTC.

Match^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
Formatdate-time
Example Request
curl -X POST 'https://app.nowgetitdone.com/v1/webhook-endpoints/string/deliveries/string/replay'
Example Response
{  "id": "string",  "event_id": "string",  "event_type": "string",  "state": "PENDING",  "attempt_count": 1,  "last_status": 200,  "next_attempt_at": "2019-08-24T14:15:22Z",  "created_at": "2019-08-24T14:15:22Z"}