Skip to main content
A Plan defines what a tenant gets access to and how much they pay. Plans belong to a Product, which is a logical grouping (e.g., “Email Platform” or “Analytics Suite”).

Plan Fields

FieldTypeDescription
namestringDisplay name (e.g., “Pro”, “Enterprise”)
price_amountintegerPrice in smallest currency unit (cents)
billing_intervalenummonthly, yearly, or one-time
trial_daysintegerFree trial length. 0 means no trial.
featuresJSONBoolean feature flags
limitsJSONNumeric usage limits
test_modebooleanRoutes to test payment credentials if true

Features vs Limits

Features are boolean gates — a tenant either has access or doesn’t:
{
  "features": {
    "advanced_analytics": true,
    "custom_domain": true,
    "api_access": false,
    "sso": false
  }
}
Limits are numeric caps on usage:
{
  "limits": {
    "api_calls": 10000,
    "team_members": 5,
    "storage_gb": 20
  }
}

Seat-Based Plans

For B2B products where pricing scales with team size, plans can be seat-based:
FieldDescription
is_seat_basedEnables seat-based billing
base_priceFixed base fee (covers included_seats)
included_seatsSeats included in the base price
per_seat_priceExtra cost per seat beyond included_seats
min_seatsMinimum seats that must be purchased
max_seatsMaximum seats allowed (optional cap)
Pricing formula:
total = base_price + max(0, requested_seats - included_seats) × per_seat_price
Example: Base 50/monthfor10seats,50/month for 10 seats, 5/seat after that.
  • 8 seats → $50
  • 15 seats → 50+(5×50 + (5 × 5) = $75

Test Mode

Plans have a test_mode flag. When true, Crovver routes checkout through test payment credentials (e.g., Stripe test keys). This lets you test the full checkout flow without real charges. Use test cards like 4242 4242 4242 4242 for Stripe test mode.
Never use a production plan for testing. Always create a separate test plan with test_mode: true.