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", "data": "order-9f3a2" }, "previousStatus": "PENDING" }}Fields
Section titled “Fields”| Field | Meaning |
|---|---|
id | Unique event id. Stable across retries. Use it to deduplicate. |
type | payment.status_changed, or webhook.test for a test event. |
apiVersion | The payload contract this event was built against. |
createdAt | When the change happened, ISO 8601 UTC. |
data.payment.id | The Paydot payment id. |
data.payment.amount.value | Amount in minor units (cents for EUR). |
data.payment.amount.currency | ISO 4217 currency code. |
data.payment.reference | The reference shown to the payer. |
data.payment.status | One of EXECUTED, SETTLED, FAILED, CANCELLED. |
data.payment.createdAt | When the payment was created, ISO 8601 UTC. |
data.payment.updatedAt | When the status last changed, ISO 8601 UTC. |
data.payment.data | The data you sent when you generated the link, or null. Always present. |
data.previousStatus | The status before this change. |
Status vocabulary
Section titled “Status vocabulary”data.payment.status is always one of the four final statuses:
| Status | Meaning |
|---|---|
EXECUTED | The bank reported the payment as executed. |
SETTLED | Funds have settled. |
FAILED | The payment did not complete. |
CANCELLED | The 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. The full
vocabulary, and which values are final, is on
Checking payment status.