pro version 1 and pro version 2 are two prices of one plan, not two plans.
This is how every organization works; there is nothing to turn on. To change the price for existing subscribers too, change the current version for everyone (below).
When a change creates a version
In the dashboard, saving a priced change of a plan with subscribers asks which of the first two you want, and says how many subscriptions it affects. With the API,
PUT /plans/{code} saves a version unless you send disable_version: true; force_version: true saves a version even when nothing billed changes.
Only the current version can be edited. An older version is the pricing its subscribers are billed on: its page in the dashboard is read-only, and an API edit of it is refused with 409 plan_version_not_current. That also catches a form opened before someone else saved a newer version.
What sells which version
- Everything that names a plan code gets the current version.
GET /plans, the pricing table, checkout, signup,POST /subscriptionsand the SDKs’subscribeall sell the current version.GET /plansandGET /plans/{code}return current versions only. - The same code again never moves a subscriber. Sending
POST /subscriptions(or a checkout) for an existing subscription with its own plan code changes nothing, even when the current version is cheaper. Moving between versions only happens through a migration. - You can sell an older version on purpose. Pass
plan_versiontoPOST /subscriptions(orplanVersion/plan_version/PlanVersionto the SDKs’ subscribe), for example to honour an old quote. Another version for an existing subscription is refused with422 plan_version_change_not_supported; an unknown version returns404 plan_version_not_found. - Read an older version with a secret key:
GET /plans/{code}?version=1. List every version, its price and its active subscriptions withGET /plans/{code}/versions.
Move subscribers to a newer version
A version migration moves the active subscriptions of one version to another (the current version by default).- Preview.
POST /plans/{code}/version-migrations/previewwithfrom_versionlists each subscription:move, with the day it moves and its current and new plan amounts, orskipwith the reason. Nothing is written. In the dashboard, the Versions tab shows the same list before you confirm. - Start.
POST /plans/{code}/version-migrationsruns in the background. Each subscription moves at the end of its current billing period, the way a scheduled downgrade is applied. - Follow.
GET /plans/{code}/version-migrations/{id}returns one item per subscription. A scheduled move’smove_statusispendinguntil it happens, thenmoved;effective_atis the day it does. - Cancel with
POST /plans/{code}/version-migrations/{id}/cancel. Moves that have not happened are unscheduled and those subscribers stay on their version.
skip_reason:
One migration of a plan code runs at a time; another one returns
409 plan_version_migration_running. Running a migration again is safe: subscriptions already moved are not moved twice, and failed ones are retried.
Credits when a subscriber moves
For plans that grant credits, Settings → Billing → “Credits when customers move to a new plan version” (plan_version_credits) decides what a moved customer keeps of the old version’s grant when that grant period is still open at the move:
A grant whose period ends with the billing period (the usual monthly case) has already expired at the move, so the new version grants its first period in full under every setting. Top-ups and manual grants are never touched.
How versions work with the rest of Nozle
- Plan families. Each interval plan of a family (monthly, yearly) has its own versions. A family-wide feature change saves a version of each plan that has subscribers. A switch from an older version to another interval of the family is a normal plan change.
- Transition policies follow the current version: a re-price moves them to the new version, and a subscriber on an older version uses them too.
- Coupons that apply to a plan code apply to every version of it.
- Deleting a plan deletes every version and unschedules every pending move.
- Webhooks.
plan.version_createdis sent when a change saves a version. Subscriptions carryplan_version,previous_plan_version,next_plan_versionandplan_version_migration_id.
SDKs
@nozle-js/node 0.16.0, nozle-sdk 0.16.0 or nozle-go 0.15.0. The React <CurrentPlan /> component (0.15.0) does not show the current version’s usage limits to a customer on an older version. See the API reference for every field.