Skip to content
Loading keys…

Events

List and replay webhook events linked to your account.

Events are created on every state change. They correspond directly to webhook payloads.

Endpoints

MethodPathDescription
GET/eventsList events
GET/events/{id}Retrieve an event
POST/events/{id}/resendResend an event

The Event object

idstringoptional
Unique event identifier, evt_….
eventstringoptional
Event type (e.g. payment.succeeded, transfer.succeeded). The field is named event: there is no type field.
dataobjectoptional
Event payload, contains the resource object.
livemodebooleanoptional
true for a live event, false for a sandbox one.
pending_webhooksintegeroptional
How many deliveries of this event to your endpoints are still pending.
api_versionstringoptional
The API version data was serialised at, for example 2026-10-11.
requestobjectoptional
Not the request you sent: id is null, and idempotency_key is not your Idempotency-Key header.
createddatetimeoptional
When the event was recorded, ISO 8601. The field is named created: there is no created_at field.
An event, as GET /events/{id} returns it under event
{
"id": "evt_Nq8rT3vK6mX2pW9cB5jL7hYs",
"event": "payment.succeeded",
"data": {
"id": "trx_CSUGajfv9xh0XQ5wu2lx",
"reference": "order-1042",
"status": "succeeded"
},
"livemode": true,
"pending_webhooks": 0,
"api_version": "2026-10-11",
"request": {
"id": null,
"idempotency_key": "idem_kZ3qP8mWvL2xR7tB5nY4hC6dF9jS1aG0"
},
"created": "2026-01-15T10:31:00+00:00"
}

This is the envelope a webhook delivers, field for field. GET /events returns its items under events, not items.

Naming is uniform

Every event type uses dot notation, resource.action (e.g. payment.succeeded, refund.created, link.created). There is no exception.

Event catalog

Payments

TypeTrigger
payment.createdPayment initialized, awaiting customer action. For a prepared payment (deferred: true), on activation
payment.processingPayment submitted to the provider
payment.succeededPayment validated. Funds captured.
payment.failedPayment failed or declined
payment.cancelledCancelled by the customer or merchant
payment.expiredThe payment window closed before completion
payment.attempt_failedAn attempt was refused at once; the payment is pending again, data.attempt says why
payment.split.processingA payment split (installment) started processing
payment.split.succeededA payment split succeeded
payment.split.failedA payment split failed

Refunds

TypeTrigger
refund.createdRefund created
refund.processingRefund submitted to the operator. Live only: a sandbox refund starts processing
refund.succeededRefund confirmed
refund.failedRefund failed
refund.cancelledStopped by Wajub before it was sent. Today such a refund is announced as refund.failed

Transfers

TypeTrigger
transfer.createdTransfer created
transfer.processingSubmitted to the operator
transfer.succeededDelivered
transfer.failedFailed
transfer.cancelledStopped before it was sent. Today such a payout is announced as transfer.failed

Customers

TypeTrigger
customer.createdCreated
customer.updatedUpdated
customer.deletedDeleted

Beneficiaries

TypeTrigger
beneficiary.createdCreated, through the API, inline by a transfer, or in the Dashboard
beneficiary.updatedUpdated
beneficiary.deletedDeleted

Invoices

TypeTrigger
invoice.createdCreated
invoice.updatedUpdated (sent, marked paid, cancelled, …)
invoice.deletedDeleted
TypeTrigger
link.createdCreated
link.updatedUpdated
link.deletedDeleted
link.expiredIts expiry_date passed

Accounts (Sync / subaccounts)

TypeTrigger
account.createdSub-account created
account.updatedSub-account changed: by PUT /accounts/{id}, by POST /accounts/{id}/token putting a cancelled invitation back to pending, or by a Lite payout (last_payout_at). Not sent when nothing changes
account.deauthorizedSub-account removed or access revoked
account.payment_activatedPayment capability enabled
account.payment_suspendedPayment capability suspended

Disputes

TypeTrigger
dispute.createdNew dispute opened
dispute.updatedDispute updated
dispute.wonResolved in your favor
dispute.lostResolved against you
dispute.closedEnded. Sent right after dispute.lost, never after dispute.won
dispute.deadline_approachingDeadline two days away, dispute still open. Sent once
dispute.deletedDeleted

Webhook endpoints

TypeTrigger
webhook_endpoint.createdEndpoint registered
webhook_endpoint.updatedEndpoint updated
webhook_endpoint.deletedEndpoint removed

Other

TypeTrigger
balance.updatedAvailable/pending/reserved balance changed
fee.receivedA platform fee was collected (Sync)

What did you think of this content?