subscription.plan_changed
Fired when a subscription changes plans
Payload
All webhook payloads follow a consistent top-level structure with event-specific data nested within the data object.
subscriptionIdstring
The subscription ID.
customerIdstring
The customer ID.
externalIdstring | null
Your external ID for this customer.
previousPlanobject
The previous plan (id and name).
currentPlanobject
The new plan (id and name).
billingIntervalstring | null
The billing interval (monthly, yearly).
creditnumber | null
Prorated credit in cents from the previous plan.
chargenumber | null
Prorated charge in cents for the new plan.
totalChargednumber | null
Total amount charged in cents.
{
"event": "subscription.plan_changed",
"timestamp": "2026-04-15T12:00:00.000Z",
"organizationId": "org_abc123",
"data": {
"subscriptionId": "sub_1a2b3c4d",
"customerId": "cus_8h9i0j",
"externalId": "user_123",
"previousPlan": {
"id": "plan_starter",
"name": "Starter"
},
"currentPlan": {
"id": "plan_pro",
"name": "Pro"
},
"billingInterval": "monthly",
"credit": 1500,
"charge": 4900,
"totalCharged": 3400
}
}How is this guide?