payment.pending
Payment initiated, awaiting provider confirmation.
When this fires
A subscriber initiates checkout and is redirected to the provider, but the charge is not yet confirmed (bank transfer, crypto settlement, hosted-checkout sessions).
Required ability
project-subscription:view-any — token must carry this at mint time to subscribe an endpoint to this event.
Payload
{
"id": "evt_01HX...",
"type": "payment.pending",
"created_at": "2026-05-18T10:05:00Z",
"api_version": "2026-05-01",
"project_id": "prj_01HX...",
"data": {
"provider": "stripe",
"plan_id": "pln_01HX...",
"subscriber_id": "usr_01HX...",
"session_id": "cs_test_..",
"order_id": null
}
}Field reference
| Field | Type | Notes |
|---|---|---|
id | string ULID | Unique event id, prefixed evt_. Use for idempotent processing. |
type | string | Always payment.pending for this event. |
created_at | ISO 8601 | Server-side emission time. |
api_version | string | Webhook API contract version. |
project_id | string ULID | Project this event belongs to. |
data.provider | string | Provider slug. |
data.plan_id | string ULID | Plan being purchased. |
data.subscriber_id | string ULID | Subscriber's project-scoped user id. |
data.session_id | string | null | Provider checkout-session id when applicable (Stripe Checkout, etc.). |
data.order_id | string | null | Provider order id when applicable (PayPal, etc.). |
Caveats
- A pending payment is not yet a subscription.
subscription_idis intentionally absent. - The same checkout may emit one
payment.pendingfollowed by eitherpayment.succeededorpayment.failed. Usesession_id/order_idto correlate. - Subscribers who close the provider page without completing will not produce a final outcome event — pending sessions can hang indefinitely.
Related events
payment.succeeded,payment.failed— terminal outcomes.subscription.created— fires alongside apayment.succeededthat creates a subscription.- Payment events overview — back to family overview.
How is this guide?