Plans: The Identity
A Plan represents a specific product offering (e.g., “Startup Plan”, “Enterprise Plan”). It acts as a container for your features and their pricing history. Key properties of a Plan:- Name: The display name of the plan.
- Slug: A unique identifier used in the API and SDK.
- Enterprise: A flag to indicate if this is a custom enterprise plan.
Plan Versions: The Logic
Every time you want to change the price of a plan or add/remove a feature, you create a new Plan Version. This is the core of the PriceOps workflow.Why use Versions?
- Immutability: Once a version is published, it cannot be changed. This guarantees that customers subscribed to that version will always have the same billing logic.
- Scheduled Changes: You can prepare a new version in advance and publish it when ready.
- A/B Testing: You can have multiple versions of the same plan active simultaneously to test different pricing strategies.
Version Lifecycle
- Draft: The version is being configured. It’s not visible to customers.
- Published: The version is active and can be used for new subscriptions.
- Archived: The version is no longer available for new subscriptions, but existing customers on this version remain unaffected.
Configuration Details
When configuring a Plan Version, you define:Billing Configuration
- Interval: How often the customer is billed (e.g., monthly, yearly).
- Currency: The currency for all prices in this version (e.g., USD, EUR).
- Trial Period: Optional number of days for a free trial.
Feature Assignment
For each feature included in the version, you specify:- Price: The cost based on the feature type (Flat, Tier, etc.).
- Limit: Optional hard limit on usage.
- Reset Logic: When the usage counter should reset (usually at the start of the billing cycle).
Unprice handles the complexity of “legacy” pricing automatically. If you increase the price of your “Pro” plan by creating a new version, your existing customers remain on the old version until you explicitly choose to migrate them.

