Webhook endpoints
The webhook delivery object
One event sent to one endpoint, with its attempts.
One event sent to one endpoint, with its attempts. Deliveries are kept with the endpoint’s log.
Endpoints
GET /v1/webhook_deliveries/{id}: Retrieve a deliveryPOST /v1/webhook_deliveries/{id}/retry: Resend a deliveryGET /v1/webhook_endpoints: List webhook endpointsPOST /v1/webhook_endpoints: Create a webhook endpointGET /v1/webhook_endpoints/{id}: Retrieve a webhook endpointPATCH /v1/webhook_endpoints/{id}: Update a webhook endpointDELETE /v1/webhook_endpoints/{id}: Delete a webhook endpointGET /v1/webhook_endpoints/{id}/deliveries: List deliveries of an endpointPOST /v1/webhook_endpoints/{id}/rotate_secret: Rotate the signing secretPOST /v1/webhook_endpoints/{id}/test: Send a test event
Attributes
idstringUnique identifier (
wdl_…).objectstringlivemodebooleanendpointstringeventstringevent_typestring | nullstatusstringOne of:
pending,succeeded,failedpending: waiting for the next attempt.failed: gave up after 3 days (or a single manual attempt failed).attemptsintegermanualbooleanA resend or test event (one attempt, not retried).
next_attempt_atstring (date-time) | nullNext automatic attempt (pending only).
last_attempt_atstring (date-time) | nullLast attempt.
last_status_codeinteger | nulllast_errorstring | nullcreatedstring (date-time)Creation time (the event's fan-out).
completed_atstring (date-time) | nullWhen it succeeded or was given up.
attempt_logarray of objectsEvery attempt (retrieve only).
Attributes of attempt_log
attemptintegerstarted_atstring (date-time)When the request was sent.
duration_msintegerstatus_codeinteger | nullerrorstring | nullresponse_bodystring | nullFirst 1 KB of your endpoint's response.
Example
{
"id": "wdl_8Tq3Zm1Xk6Pv9Rw2Lb4Ns7Hd",
"object": "webhook_delivery",
"livemode": false,
"endpoint": "we_2Lk9Qm4Xz7Pv1Rt8Wb3Ns6Hd",
"event": "evt_7Hq2Zp9LwK4mXr8Vb3Ns1Td5",
"event_type": "payment.succeeded",
"status": "succeeded",
"attempts": 1,
"manual": false,
"next_attempt_at": null,
"last_attempt_at": "2026-09-28T14:02:41.000Z",
"last_status_code": 200,
"last_error": null,
"created": "2026-09-28T14:02:40.000Z",
"completed_at": "2026-09-28T14:02:41.000Z",
"attempt_log": [
{
"attempt": 1,
"started_at": "2026-09-28T14:02:41.000Z",
"duration_ms": 182,
"status_code": 200,
"error": null,
"response_body": "{\"received\":true}"
}
]
}