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.

14 properties
Schema

Properties

PropertyTypeModeDescriptionRequired
namestring
stored

Unique identifier for the plan (e.g., 'free', 'starter', 'professional', 'enterprise')

Example: "professional"

Required
labelstring
stored

Human-readable display name for the plan

Example: "Professional Plan"

Required
descriptionstring
stored

Marketing description of the plan and its benefits

Example: "Perfect for growing teams with advanced features and priority support"

Optional
pricingModelstring
stored

Pricing model type for this plan

Values: flat-rate, per-user, per-feature, usage-based, tiered, hybrid

Example: "per-user"

Required
basePriceMonetaryAmount
stored

Base price for the plan (per billing cycle)

Required
unitPriceMonetaryAmount
stored

Price per unit (for per-user or per-feature pricing models)

Optional
limitsjson
stored

Usage limits and quotas for this plan

Example: {"maxUsers":50,"maxStorage":107374182400,"maxApiCallsPerDay":5000,"maxProjects":25}

Optional
billingCyclesstring[]
stored

Available billing cycles for this plan

Example: ["monthly","annual"]

Optional
tiernumber
stored

Tier level for upgrade/downgrade ordering (higher = more premium)

Example: 3

Required
isActiveboolean
stored

Whether this plan is currently available for new subscriptions

Example: true

Required
isVisibleboolean
stored

Whether this plan is visible in public pricing pages

Example: true

Optional
trialDaysnumber
stored

Number of trial days offered with this plan (0 for no trial)

Example: 14

Optional
setupFeeMonetaryAmount
stored

One-time setup fee for this plan (null if no setup fee)

Optional
metadatajson
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
}