Skip to content

The event

Paydot sends payment.status_changed when a payment becomes EXECUTED, SETTLED, FAILED or CANCELLED. The body is JSON:

{
"id": "evt_9Nq1cQ2rTt6xKz0vB4mH7w",
"type": "payment.status_changed",
"apiVersion": "2026-08-09",
"createdAt": "2026-08-18T10:15:30Z",
"data": {
"payment": {
"id": "pay_4KdR8s2Xn1QwZ7",
"amount": { "value": 2599, "currency": "EUR" },
"reference": "ORDER 1042",
"status": "EXECUTED",
"createdAt": "2026-08-18T10:14:02Z",
"updatedAt": "2026-08-18T10:15:30Z"
},
"previousStatus": "PENDING"
}
}
FieldMeaning
idUnique event id. Stable across retries. Use it to deduplicate.
typepayment.status_changed, or webhook.test for a test event.
apiVersionThe payload contract this event was built against.
createdAtWhen the change happened, ISO 8601 UTC.
data.payment.idThe Paydot payment id.
data.payment.amount.valueAmount in minor units (cents for EUR).
data.payment.amount.currencyISO 4217 currency code.
data.payment.referenceThe reference shown to the payer.
data.payment.statusOne of EXECUTED, SETTLED, FAILED, CANCELLED.
data.previousStatusThe status before this change.

data.payment.status is always one of the four final statuses:

StatusMeaning
EXECUTEDThe bank reported the payment as executed.
SETTLEDFunds have settled.
FAILEDThe payment did not complete.
CANCELLEDThe payment was cancelled.

data.previousStatus is not restricted to those four values. It can also be PENDING, AUTHORISED, INCOMPLETE or UNKNOWN. Treat it as an opaque string, not an enum you match exhaustively.