Retry a delivery

POST/api/v1/webhooks/{id}/deliveries/{deliveryId}/retry
Scope: webhooks:manageIdempotency-Key supported

Queues a failed or dead delivery for another attempt, right away. The attempt counter is kept, so a dead delivery gets one more attempt and dies again if it fails. A delivered or already pending delivery answers 409. Requires the "webhooks:manage" scope.

Path parameters#

FieldTypeDescription
idrequired
string

Awrora id (UUID) for the endpoint.

deliveryIdrequired
string

Awrora id (UUID) for the delivery.

Headers#

FieldTypeDescription
Idempotency-Key
string≥ 8 chars · ≤ 200 chars

Optional. A unique key, 8-200 characters. Retrying with the same key replays the first response verbatim instead of acting twice.

Example request#

bash

curl -X POST "https://your-site.awrora.app/api/v1/webhooks/id_8f2k3n/deliveries/delivery_8f2k3n/retry" \
  -H "Authorization: Bearer $AWRORA_API_KEY"

Responses#

  • 200The delivery, now queued.
  • 401Missing, invalid, revoked or expired API key — codes "api_key_missing", "api_key_invalid", "api_key_revoked", "api_key_expired".
  • 403The API app is off, the plan does not include the API, or the key lacks the required scope — codes "app_not_enabled", "plan_upgrade_required", "insufficient_scope" (the last carries "required_scope").
  • 404No such resource. The same response is returned for a resource that belongs to another organization — code "not_found".
  • 409The request conflicts with the current state — codes "insufficient_capacity" (carries "seats_available"), "conflict", or "idempotency_in_progress" when another request with the same Idempotency-Key is still running.
  • 429Rate limit exceeded — code "rate_limited". See the x-ratelimit-* headers.
  • 500Something went wrong on our side — code "internal_error".

Response 200

FieldTypeDescription
idrequired
string

Awrora id (UUID) for the delivery attempt record.

endpoint_idrequired
string

The endpoint this delivery goes to.

event_idrequired
string

The event being delivered. Also the id in the envelope.

event_typerequired
string

Event type, copied from the event for filtering.

statusrequired
string

pending = waiting for its next attempt; delivered = the endpoint answered 2xx; failed = given up early (the endpoint was disabled); dead = six attempts failed, we stopped trying. Retry a dead or failed delivery with the retry endpoint.

"pending""delivered""failed""dead"
attemptsrequired
integermin -9007199254740991 · max 9007199254740991

How many attempts have been made.

next_attempt_atrequired
string | null

When the next attempt is due, ISO 8601 with offset. Only meaningful while pending.

last_status_coderequired
integer | null

HTTP status from the last attempt, or null when the request never got a response.

last_errorrequired
string | null

Short description of the last failure. Never a copy of your response body.

response_msrequired
integer | null

How long the last attempt took, in milliseconds.

created_atrequired
string

ISO 8601 timestamp with offset.

delivered_atrequired
string | null

ISO 8601 with offset, or null.

200 response

{
  "id": "res_8f2k3n",
  "endpoint_id": "endpoint_8f2k3n",
  "event_id": "event_8f2k3n",
  "event_type": "string",
  "status": "pending",
  "attempts": -9007199254740991,
  "next_attempt_at": "string",
  "last_status_code": -9007199254740991,
  "last_error": "string",
  "response_ms": -9007199254740991,
  "created_at": "string",
  "delivered_at": "string"
}