Manually retry a failed or dead delivery
POST
/api/v1/webhook_deliveries/{id}/retry
webhooks:write
Async
Resets the delivery to pending and re-enqueues it immediately, outside the automatic retry schedule. Refuses to re-deliver a row that already succeeded or is currently in flight. Requires webhooks:write.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired |
integer |
Webhook delivery id. Scoped to the calling api_client's subscriptions. |
Responses
-
202 Retry enqueued
application/json-
dataWebhookDeliverySchema: WebhookDelivery
-
idinteger -
objectstring -
webhook_subscription_idinteger -
event_typestring Lifecycle events Cascades can deliver. See `x-webhooks` for each payload. One ofexecution.completedexecution.failedadverse_action.triggeredadverse_action.completedadverse_action.failedadverse_action.retry_scheduled -
statusstring One ofpendingretryingsucceededfaileddead -
attemptsinteger -
max_attemptsinteger -
last_response_statusinteger, nullable -
last_attempted_atstring (date-time), nullable -
next_retry_atstring (date-time), nullable -
delivered_atstring (date-time), nullable -
created_atstring (date-time) -
updated_atstring (date-time)
-
-
metaMetaSchema: Meta
-
request_idstring required Correlation id for this request. Also sent as the `X-Request-Id` response header; quote it when contacting support.
-
202 example{ "data": { "id": 1, "object": "webhook_delivery", "webhook_subscription_id": 1, "event_type": "execution.completed", "status": "pending", "attempts": 1, "max_attempts": 6, "last_response_status": 1, "last_attempted_at": "2026-05-08T18:41:05Z", "next_retry_at": "2026-05-08T18:41:05Z", "delivered_at": "2026-05-08T18:41:05Z", "created_at": "2026-05-08T18:41:05Z", "updated_at": "2026-05-08T18:41:05Z" }, "meta": { "request_id": "7d4c2f48-9a1b-4c3d-8e2f-1a2b3c4d5e6f" } } -
-
401 Missing, malformed, expired or revoked bearer token. The
WWW-Authenticateheader carries the RFC 6750 challenge.application/json401 example{ "error": { "code": "unauthorized", "message": "A valid bearer token is required.", "details": [], "request_id": "7d4c2f48-9a1b-4c3d-8e2f-1a2b3c4d5e6f", "doc_url": "https://cascades.crscreditapi.com/docs/api/errors/unauthorized" } } -
403 Token does not hold the required scope.
detailslists the scope(s) that were checked.application/json403 example{ "error": { "code": "insufficient_scope", "message": "This token does not have the required scope.", "details": [ { "field": "scope", "message": "executions:write" } ], "request_id": "7d4c2f48-9a1b-4c3d-8e2f-1a2b3c4d5e6f", "doc_url": "https://cascades.crscreditapi.com/docs/api/errors/insufficient_scope" } } -
404 Resource does not exist or belongs to another tenant / api_client
application/json404 example{ "error": { "code": "not_found", "message": "The requested resource was not found.", "details": [], "request_id": "7d4c2f48-9a1b-4c3d-8e2f-1a2b3c4d5e6f", "doc_url": "https://cascades.crscreditapi.com/docs/api/errors/not_found" } } -
409
delivery_not_retryableapplication/json409 example{ "error": { "code": "delivery_not_retryable", "message": "Delivery is in status succeeded and cannot be retried.", "details": [], "request_id": "7d4c2f48-9a1b-4c3d-8e2f-1a2b3c4d5e6f", "doc_url": "https://cascades.crscreditapi.com/docs/api/errors/delivery_not_retryable" } } -
429 Rate limit exceeded (60 req/min per IP on
/api/v1, 600 req/hour per token prefix, or 300 req/5 min per IP globally). The body is the standard error envelope andRetry-Aftergives the seconds until the window resets.application/json429 example{ "error": { "code": "rate_limited", "message": "Rate limit exceeded. Retry later.", "details": [], "request_id": "7d4c2f48-9a1b-4c3d-8e2f-1a2b3c4d5e6f", "doc_url": "https://cascades.crscreditapi.com/docs/api/errors/rate_limited" } }