payment.* events
Payment lifecycle — succeeded, failed, pending, refunded.
payment.succeeded and payment.failed are emitted by the provider webhook listeners, which all funnel through the same abstract listener (app/Listeners/AbstractPaymentEventListener.php) so their shapes stay consistent. payment.pending is emitted earlier, by the per-provider checkout-initiation actions, and its shape varies by provider. payment.refunded is emitted by a single shared refund action. Not every provider emits every event — see the per-event pages.
Events
payment.succeeded
Provider confirms a successful charge.
payment.failed
Provider rejects a charge.
payment.pending
Payment initiated, awaiting provider confirmation.
payment.refunded
A charge is refunded, in full or in part.
| Event | Fires when |
|---|---|
payment.succeeded | A payment provider confirms a successful charge. |
payment.failed | A provider rejects a charge (invalid card, insufficient funds, risk rules). |
payment.pending | A checkout is initiated and the subscriber is sent to the provider; the charge is not yet confirmed. Fires for every provider, including card checkouts. |
payment.refunded | A charge is refunded, fully or partially. |
See the dedicated pages above for full payload, field reference, and caveats per event.
Example payload
{
"id": "evt_01HX...",
"type": "payment.succeeded",
"created_at": "2026-05-18T10:05:00Z",
"api_version": "2026-05-01",
"project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",
"data": {
"subscription_id": "5b7e2d40-1a86-4c39-97f2-e83d0b16c5a4",
"plan_id": "c4e82f16-93a7-4d5b-b81c-6e0f27a94d3b",
"subscriber_id": "2a91c4e7-6f38-4b52-8e0d-9c1a7b3f5d80",
"provider": "stripe",
"external_payment_id": "pi_3Nxy..",
"amount": "29.00",
"currency": "USD",
"billing_reason": "subscription_create"
}
}What you don't get
- Card numbers / PAN / CVV. Any provider-specific credentials are stripped.
- Stripe raw webhook payloads. Use Stripe's own webhooks if you need provider internals.
- Merchant fee breakdowns. Those are an internal accounting concern surfaced only in the Subscriby dashboard.
Required abilities
Tokens subscribing to payment.* events must carry project-subscription:view.
How is this guide?