Skip to main content
POST
Retry (resend) a webhook delivery

Authorizations

Authorization
string
header
required

Your secret API key as a Bearer token: Authorization: Bearer vxn_sk_.... Keys are created and scoped in the dashboard - see Authentication.

Headers

Idempotency-Key
string
required

Required on every mutating POST. See Idempotency.

Required string length: 8 - 255

Path Parameters

id
string
required

Endpoint identifier (whk_ prefix).

Pattern: ^whk_[A-Za-z0-9]+$
delivery_id
string
required

Delivery identifier (whd_ prefix) of the delivery to resend.

Pattern: ^whd_[A-Za-z0-9]+$

Response

Retry accepted - a new delivery attempt (same event id) has been queued.

One delivery attempt record. Retained 90 days. High-volume listing: one row per attempt including retries. We store the response STATUS CODE only. No response headers, no response body bytes, and no request-body hash are retained, by design: see the privacy note in the Webhooks guide. Each attempt records its number, timestamp, status code, error string and duration. Replay is available over the API: POST /v1/webhook_endpoints/{id}/deliveries/{delivery_id}/retry. There is intentionally no single-delivery GET-by-id endpoint - list + retry only.

id
string
required

Delivery record id (whd_ prefix). Used as the pagination cursor.

Pattern: ^whd_[A-Za-z0-9]+$
Example:

"whd_01HW9RCZ4HJ7N8MTX1RVWHDDEF"

object
string
required

Always "webhook_delivery".

Allowed value: "webhook_delivery"
webhook_endpoint_id
string
required

The endpoint this delivery targeted.

Example:

"whk_01HW9RBZ4GH7N8MTX1RVWHKDEF"

event_id
string
required

The event ULID - stable across retries; your receiver deduplicates on this.

Pattern: ^evt_[A-Za-z0-9]+$
Example:

"evt_01HW9RDZ4JK7N8MTX1RVEVTDEF"

event_type
enum<string>
required

The locked v1 event catalog - 22 events across 9 subjects. Names follow resource.action with past-participle actions (transaction.created), never the dotted verb-stems used by transaction types - the two vocabularies never mix. product.created/product.updated fire for dashboard and API-created catalog changes; POS-synced catalog changes do not emit (they mirror the till, and a first sync would flood your endpoint).

Available options:
customer.created,
customer.updated,
customer.deleted,
customer.pass_installed,
customer.pass_uninstalled,
card.created,
card.updated,
card.deleted,
custom_field.created,
custom_field.updated,
custom_field.deleted,
product.created,
product.updated,
transaction.created,
transaction.reversed,
notification.sent,
notification.delivery_updated,
location.updated,
team_member.added,
team_member.updated,
team_member.removed,
webhook_endpoint.delivery_failed
Example:

"transaction.created"

status
enum<string>
required

delivered = receiver returned 2xx within 10 s. retrying = on the backoff curve. failed = all 12 attempts exhausted (also fires webhook_endpoint.delivery_failed to other subscribed endpoints).

Available options:
pending,
delivered,
retrying,
failed
Example:

"delivered"

attempts
integer
required

Attempt count so far (max 12 across 24 hours).

Example:

1

created_at
integer
required

Unix seconds when the event was first dispatched to this endpoint.

Example:

1750691720

response_code
integer | null

HTTP status the receiver returned on the most recent attempt. Null when the attempt never got a response (timeout, TCP/TLS error).

Example:

200

next_retry_at
integer | null

Unix seconds of the next scheduled attempt. Null when delivered or failed.

Example:

null

delivered_at
integer | null

Unix seconds of successful delivery. Null otherwise.

Example:

1750691720