RaabtaHQ
Redeliver an event

Redeliver an event

POST/api/v1/webhooks/{id}/deliveries/{delivery_id}/redeliver

scope webhooks:manage

Sends the same event to the endpoint again, right now, and returns the settled delivery. The row is reset and retried — never duplicated. A delivery that is in flight returns 409 conflict.

Path parameters

NameTypeDescription
idrequired
string (uuid)Webhook endpoint id
delivery_idrequired
string (uuid)Delivery id
Request
curl -X POST "https://your-crm.example.com/api/v1/webhooks/3a4b5c6d-7e8f-4a9b-8c0d-1e2f3a4b5c6d/deliveries/7c8d9e0f-1a2b-4c3d-8e4f-5a6b7c8d9e0f/redeliver" \
  -H "Authorization: Bearer $RAABTA_API_KEY"
Response · 200 OK
{
  "data": {
    "id": "7c8d9e0f-1a2b-4c3d-8e4f-5a6b7c8d9e0f",
    "event_id": "evt_5f1c2a9e8b7d4c3f9a2b1c0d9e8f7a6b",
    "event_type": "contact.created",
    "status": "succeeded",
    "attempts": 1,
    "next_attempt_at": null,
    "last_status_code": 200,
    "last_error": null,
    "response_snippet": "{\"ok\":true}",
    "duration_ms": 182,
    "delivered_at": "2026-09-02T10:06:00.000Z",
    "created_at": "2026-09-02T10:05:59.000Z",
    "payload": {
      "contact": {
        "id": "9d7e4c11-5a2b-4f7c-8e3d-2a1b0c9d8e7f",
        "name": "Ayesha Khan"
      }
    }
  }
}

Response

Wrapped in { data: … }
NameTypeDescription
idrequired
string (uuid)UUID
event_idrequired
stringThe `evt_…` id in the envelope this delivery carries
event_typerequired
stringAn event type from the catalogue, e.g. contact.created
statusrequired
string (enum)pending = waiting for its next attempt; claimed = in flight; succeeded; failed = permanent; exhausted = out of attemptspendingclaimedsucceededfailedexhausted
attemptsrequired
integer
next_attempt_atrequired
string (date-time) | nullWhen a pending delivery is next due
last_status_coderequired
integer | nullHTTP status of the last attempt
last_errorrequired
string | null
response_snippetrequired
string | nullFirst 1 KB of the last response body
duration_msrequired
integer | null
delivered_atrequired
string (date-time) | null
created_atrequired
string (date-time)ISO 8601 timestamp
payloadrequired
anyThe `data` that was (or will be) sent

Errors

StatusCodeWhen
400validation_errorThe body or query failed validation. `details` lists each failing field with a `path` and a `message`.
401unauthorizedNo usable API key: the Authorization header is missing or malformed, or the key is unknown, revoked or expired. The three are deliberately indistinguishable.
403forbiddenThe key is valid but lacks the scope this endpoint requires, or the request came from an address outside the key’s IP allowlist. The message says which.
403account_suspendedThe account this key belongs to is suspended. Rotating the key will not help; contact support.
404not_foundNo such resource in this account. A resource that exists in another account also returns this.
409conflictThe request conflicts with current state: a duplicate phone number on create, an invalid state transition, or an idempotent request that is still in flight.
429rate_limitedThe per-key budget, or the per-IP budget for failed authentication, is exhausted. Honour `Retry-After` before retrying.
500internalSomething failed on our side. Safe to retry with the same Idempotency-Key; quote `request_id` if it persists.