Send an event again
To one endpoint, or to every endpoint that subscribes to the event type now. Each call creates new deliveries; the body is byte-identical to the original.
Authorization
Section titled “Authorization”Send your API key as a bearer token in the Authorization header. Secret API key: Authorization: Bearer ctp_live_sk_…. A publishable key (ctp_…_pk_…) is accepted by these operations only, which serve reference data: getRate, listAssets, listNetworks (each marked x-publishable-key: true). Every other operation refuses it with 403 publishable_key_not_allowed, whatever Origin the request carries: that header binds browsers, not other clients, and nothing on this API relies on it.
Path parameters
Section titled “Path parameters”| Name | Type | Description |
|---|---|---|
id required |
string | At most 100 characters. |
Headers
Section titled “Headers”| Name | Type | Description |
|---|---|---|
Idempotency-Key |
string | Makes the request safe to retry: the same key with the same request replays the first response (Idempotent-Replayed: true) for 24 hours; the same key with a different request is 422 idempotency_key_reused; while the first request is still running, 409 idempotency_request_in_progress with Retry-After. Only POST honours it. At most 255 characters. Pattern ^[!-~]+$. |
Request body
Section titled “Request body”The body is optional.
| Field | Type | Description |
|---|---|---|
webhook_endpoint_id |
string | Only this endpoint. At most 100 characters. |
Example request
Section titled “Example request”curl -X POST "https://api.ctpeway.com/v1/events/{id}/redeliver" \ -H "Authorization: Bearer $CTPEWAY_API_KEY" \ -H "Idempotency-Key: <a-unique-key>"import { CtpeWay } from '@ctpeway/sdk';
const ctpeway = new CtpeWay(process.env.CTPEWAY_API_KEY);
const result = await ctpeway.events.redeliver('<id>');Response
Section titled “Response”200 OK
Section titled “200 OK”| Field | Type | Description |
|---|---|---|
data |
array of objects | |
data[]. |
string | 24 hexadecimal characters. |
data[]. |
string | |
data[]. |
string | |
data[]. optional |
string | The invoice the event is about, if any. 24 hexadecimal characters. |
data[]. optional |
string | The payment the event is about, if any. 24 hexadecimal characters. |
data[]. |
string | 24 hexadecimal characters. |
data[]. |
string | event: the original delivery. resend: a redelivery. test: a test ping. One of event, resend, test. |
data[]. |
string | One of pending, succeeded, failed. |
data[]. |
integer | |
data[]. |
array of objects | |
data[]. |
string (date-time) | |
data[]. optional |
integer | |
data[]. optional |
string | Why the attempt failed, e.g. http_500, timeout. |
data[]. |
integer | |
data[]. |
object | What was sent. The body is the event itself (GET /events/{id}), the same on every attempt. |
data[]. |
map of string to string | The headers the attempt was sent with, by lowercase name. ctpeway-signature shows its timestamp and [redacted] in place of the signature itself. |
data[]. optional |
object | What the endpoint answered. Present only where one delivery is read by its id, never in lists, and only for an attempt the endpoint answered. |
data[]. |
map of string to string | Response headers by lowercase name. Headers that carry a credential (set-cookie, authorization, …) are never kept. |
data[]. optional |
string | The first 4,096 characters of the response body, with secret-looking JSON fields replaced by [redacted]. |
data[]. |
boolean | The body was longer than what is kept. |
data[]. optional |
string (date-time) | |
data[]. optional |
string (date-time) | |
data[]. optional |
string (date-time) | |
data[]. |
string (date-time) |
{ "data": [ { "id": "0123456789abcdef01234567", "event_id": "string", "event_type": "string", "invoice_id": "0123456789abcdef01234567", "payment_id": "0123456789abcdef01234567", "webhook_endpoint_id": "0123456789abcdef01234567", "trigger": "event", "status": "pending", "attempts": 0, "attempt_log": [ { "at": "2026-01-01T00:00:00.000Z", "http_status": 0, "error": "string", "duration_ms": 0, "request": { "headers": {} }, "response": { "headers": {}, "body": "string", "body_truncated": true } } ], "next_attempt_at": "2026-01-01T00:00:00.000Z", "last_attempt_at": "2026-01-01T00:00:00.000Z", "delivered_at": "2026-01-01T00:00:00.000Z", "created_at": "2026-01-01T00:00:00.000Z" } ]}The values are placeholders generated from the schema. They show the shape, not real data.
Errors
Section titled “Errors”A failed request answers with the error format described under Errors.
Besides the codes any endpoint can return, this endpoint can answer with these code values:

