Re-sends the stored payload to your endpoint with a fresh signature. Safe to retry (Idempotency-Key supported).
- Credential
- An API key in
x-api-key - Scopes
webhooks:manage
Parameters
idpath · stringrequiredIdempotency-Keyheader · string (uuid)Unique key for idempotent requests. If you retry a request with the same key within 24 hours, you receive the original response. The key is bound to the request payload: reusing it for a different payload returns 422
idempotency_key_reuserather than the original response, so a changed request is never silently dropped. The binding is over the JSON's content, not its bytes — keys in another order or other whitespace are the same request. Generate a new key for each new request. On an operation that moves money (an order, a batch, an item, a shipping or address change, a cancellation's refund), a key that cannot be checked because the idempotency ledger is unreachable is answered 503idempotency_unavailablewithRetry-After, and nothing runs or is charged: retry with the same key.
Request
POST /api/v1/webhooks/deliveries/{id}/redeliver
curl -X POST "https://portal.printedsimply.com/api/v1/webhooks/deliveries/ccbkfrz5r3gcby08k4iqiuxwb/redeliver" \
-H "x-api-key: ps_test_YOUR_KEY" \
-H "Idempotency-Key: redeliver-webhook-$(date +%s)"Response 200
The result of making the attempt. A 200 here means the attempt was MADE — read redelivered to learn whether your endpoint accepted it.
data
delivery_idstringrequiredThe attempt that was replayed. A redelivery does not create a new id here.
redeliveredbooleanrequiredWhether YOUR endpoint accepted it this time. False is a successful call to this operation reporting a failed delivery — the 200 is about the attempt being made, not about it landing.
status_codeinteger | nullrequiredWhat your endpoint answered. Null when it could not be reached at all.
errorstring | nullrequiredWhy it did not land. Null when
redeliveredis true.
meta
pageintegertotalintegerlimitintegerThe page size actually applied, which is not necessarily the one asked for — the operation's own ceiling wins.
pagesintegertotaloverlimit, rounded up.next_cursorstring | nullOn a cursor-paged operation: send this back as
cursorfor the next page. Null on the last page. Absent on operations that do not page by cursor.has_morebooleanOn a list operation whose
metaisListMeta: whether another page follows this one.
{
"status": "success",
"data": {
"delivery_id": "ccbkfrz5r3gcby08k4iqiuxwb",
"redelivered": true,
"status_code": 200,
"error": null
},
"request_id": "4e3753e1-48dd-4313-bfd8-48e4af4e116a"
}Errors
Missing, invalid or expired API key:
missing_api_key(none sent),invalid_api_key(unknown or revoked),key_expired(past the expiry set when it was created; create a new key).404Resource not found
Rate limit exceeded. Two windows can produce this status and
error.codesays which:rate_limit_exceededfor the per-minute sliding window,daily_quota_exceededfor the plan's daily quota. Both carryRetry-After; the daily one also carriesX-Daily-LimitandX-Daily-Remaining. The per-minute limits are plan-based — see Rate Limits above, or call GET /v1/me for this credential's own figures.