plan.* events
Fires on every change to a plan's state, pricing or storefront position.
Fires on every change to a plan's state, pricing or storefront position. Consumers commonly use these to keep a pricing-page cache or a CRM field in sync.
| Event | Fires when |
|---|---|
plan.created | A plan is first created on a project. |
plan.updated | Any mutable plan field changes (price, interval, trial, eligibility filters). |
plan.activated | An inactive plan is flipped to active. |
plan.deactivated | An active plan is flipped to inactive (still viewable, not purchasable). |
plan.sold_out | A plan hit its sales cap, or a pass series filled its last seat, and paused itself. |
plan.order_changed | The creator arranged the order plans appear in on the portal and in the bot, or reset it. |
plan.deleted | The plan is soft-deleted (row retained with deleted_at set; reads return 404). |
plan.sync_completed | A plan is synced to the external payment-provider catalog (Stripe, PayPal, CoinPayments, Razorpay). |
Example envelope
{
"id": "evt_01HX...",
"type": "plan.updated",
"created_at": "2026-05-18T10:05:00Z",
"api_version": "2026-05-01",
"project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",
"data": {
"plan": {
"id": "c4e82f16-93a7-4d5b-b81c-6e0f27a94d3b",
"name": "Premium Monthly",
"price": "29.0000",
"currency_id": "8f27a0d4-63be-4915-8c07-1a5d9e34b628",
"billing_cycle": "month",
"active": true
},
"changes": {
"price": { "from": "25.0000", "to": "29.00" }
}
}
}The data.changes block is present on plan.updated and identifies the fields that changed. For other events it is omitted. Each from is the plan's previous value after model casting, so price is a string and an enum column is its backed string value, while each to is the caller-supplied value exactly as validated.
Required ability
Tokens subscribing to plan.* events must carry project-subscription-plan:view at mint time.
Events
plan.created
A plan is first created on a project.
plan.updated
Any mutable plan field changes.
plan.activated
Inactive plan flipped active.
plan.deactivated
Active plan flipped inactive.
plan.sold_out
A plan hit its sales cap, or a pass series filled its last seat, and Subscriby paused it automatically.
plan.order_changed
The creator arranged the order plans appear in on the portal and in the bot, or reset it.
plan.deleted
Plan soft-deleted (removed from the catalog).
plan.sync_completed
Plan synced to the payment-provider catalog (Stripe, PayPal, CoinPayments or Razorpay).
Compare with the current pages
How is this guide?