SubscriptionPlan
Represents a subscription tier or pricing plan that defines the features, limits, and pricing for tenant subscriptions in a multi-tenant SaaS platform. This entity serves as the product catalog for subscription offerings, specifying what capabilities and resources are included in each plan tier (free, starter, professional, enterprise). It defines usage quotas (max users, storage, API calls), enabled features, pricing models (per-user, flat-rate, usage-based), and billing configurations. Plans can be hierarchical, allowing upgrade/downgrade paths, and support multiple pricing variants for different billing cycles or regions. The entity enables flexible monetization strategies, A/B testing of pricing, plan versioning, and grandfathering of legacy plans. It serves as the reference for subscription entitlements and the foundation for plan-based feature gating across B2B SaaS platforms and enterprise applications.
Properties
| Property | Type | Mode | Description | Required |
|---|---|---|---|---|
| name | string | stored | Unique identifier for the plan (e.g., 'free', 'starter', 'professional', 'enterprise') Example: | Required |
| label | string | stored | Human-readable display name for the plan Example: | Required |
| description | string | stored | Marketing description of the plan and its benefits Example: | Optional |
| pricingModel | string | stored | Pricing model type for this plan Values: Example: | Required |
| basePrice | MonetaryAmount | stored | Base price for the plan (per billing cycle) | Required |
| unitPrice | MonetaryAmount | stored | Price per unit (for per-user or per-feature pricing models) | Optional |
| limits | json | stored | Usage limits and quotas for this plan Example: | Optional |
| billingCycles | string[] | stored | Available billing cycles for this plan Example: | Optional |
| tier | number | stored | Tier level for upgrade/downgrade ordering (higher = more premium) Example: | Required |
| isActive | boolean | stored | Whether this plan is currently available for new subscriptions Example: | Required |
| isVisible | boolean | stored | Whether this plan is visible in public pricing pages Example: | Optional |
| trialDays | number | stored | Number of trial days offered with this plan (0 for no trial) Example: | Optional |
| setupFee | MonetaryAmount | stored | One-time setup fee for this plan (null if no setup fee) | Optional |
| metadata | json | stored | Additional plan metadata (e.g., marketing tags, A/B test variants) | Optional |
Examples
Example 1
{
"@type": "SubscriptionPlan",
"name": "free",
"label": "Free Plan",
"description": "Get started with essential features at no cost",
"pricingModel": "flat-rate",
"basePrice": {
"@type": "MonetaryAmount",
"amount": 0,
"currency": {
"@type": "Currency",
"code": "USD"
}
},
"features": {
"basicReporting": true,
"apiAccess": false,
"prioritySupport": false
},
"limits": {
"maxUsers": 3,
"maxStorage": 1073741824,
"maxApiCallsPerDay": 100,
"maxProjects": 3
},
"billingCycles": [
"monthly"
],
"tier": 1,
"isActive": true,
"isVisible": true,
"trialDays": 0
}Example 2
{
"@type": "SubscriptionPlan",
"name": "starter",
"label": "Starter Plan",
"description": "For small teams getting started",
"pricingModel": "per-user",
"basePrice": {
"@type": "MonetaryAmount",
"amount": 29,
"currency": {
"@type": "Currency",
"code": "USD"
}
},
"unitPrice": {
"@type": "MonetaryAmount",
"amount": 10,
"currency": {
"@type": "Currency",
"code": "USD"
}
},
"features": {
"advancedReporting": false,
"apiAccess": true,
"customIntegrations": false,
"prioritySupport": false
},
"limits": {
"maxUsers": 10,
"maxStorage": 10737418240,
"maxApiCallsPerDay": 1000,
"maxProjects": 10
},
"billingCycles": [
"monthly",
"annual"
],
"tier": 2,
"isActive": true,
"isVisible": true,
"trialDays": 14
}Example 3
{
"@type": "SubscriptionPlan",
"name": "professional",
"label": "Professional Plan",
"description": "Advanced features for growing businesses",
"pricingModel": "per-user",
"basePrice": {
"@type": "MonetaryAmount",
"amount": 99,
"currency": {
"@type": "Currency",
"code": "USD"
}
},
"unitPrice": {
"@type": "MonetaryAmount",
"amount": 25,
"currency": {
"@type": "Currency",
"code": "USD"
}
},
"features": {
"advancedReporting": true,
"apiAccess": true,
"customIntegrations": true,
"whiteLabeling": false,
"prioritySupport": true,
"ssoSupport": false
},
"limits": {
"maxUsers": 50,
"maxStorage": 107374182400,
"maxApiCallsPerDay": 10000,
"maxProjects": 50
},
"billingCycles": [
"monthly",
"annual"
],
"tier": 3,
"isActive": true,
"isVisible": true,
"trialDays": 14,
"setupFee": {
"@type": "MonetaryAmount",
"amount": 199,
"currency": {
"@type": "Currency",
"code": "USD"
}
}
}Example 4
{
"@type": "SubscriptionPlan",
"name": "enterprise",
"label": "Enterprise Plan",
"description": "Full-featured solution for large organizations with custom requirements",
"pricingModel": "hybrid",
"basePrice": {
"@type": "MonetaryAmount",
"amount": 999,
"currency": {
"@type": "Currency",
"code": "USD"
}
},
"unitPrice": {
"@type": "MonetaryAmount",
"amount": 50,
"currency": {
"@type": "Currency",
"code": "USD"
}
},
"features": {
"advancedReporting": true,
"apiAccess": true,
"customIntegrations": true,
"whiteLabeling": true,
"prioritySupport": true,
"ssoSupport": true,
"dedicatedAccountManager": true,
"customSLA": true
},
"limits": {
"maxUsers": -1,
"maxStorage": -1,
"maxApiCallsPerDay": -1,
"maxProjects": -1
},
"billingCycles": [
"monthly",
"annual",
"custom"
],
"tier": 4,
"isActive": true,
"isVisible": true,
"trialDays": 30
}