Guides

Plans & Pricing

Create and manage subscription plans with multi-currency pricing and billing intervals.

Plans & Pricing

Plans define the products or services you offer to customers along with their pricing, billing frequency, and included features. NovaBilling supports multi-currency pricing and flexible billing intervals.

Plan Object

FieldTypeDescription
idstringUnique identifier (e.g., plan_abc123)
namestringDisplay name for the plan
codestringUnique code for the plan (e.g., pro)
billingIntervalstringBilling frequency: MONTHLY, QUARTERLY, YEARLY
featuresstringList of features included in the plan
isActivebooleanWhether the plan is available for new subscriptions
createdAtstringISO 8601 creation timestamp

Creating Plans

Basic Plan

curl -X POST http://localhost:3000/api/plans \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk_live_a1b2c3d4..." \
  -d '{
    "name": "Starter",
    "code": "starter",
    "billingInterval": "MONTHLY",
    "features": [
      "5 projects",
      "10 team members",
      "Email support",
      "1 GB storage"
    ]
  }'

Adding Prices to a Plan

After creating a plan, add one or more prices for different currencies:

curl -X POST http://localhost:3000/api/plans/plan_abc123/prices \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk_live_a1b2c3d4..." \
  -d '{
    "currency": "UGX",
    "amount": 50000
  }'

Multi-Currency Pricing

NovaBilling supports 17 currencies. Add multiple prices to a single plan for different markets.

Supported Currencies

CodeCurrencyExample Amount
UGXUgandan Shilling180,000
NGNNigerian Naira15,000
KESKenyan Shilling2,500
GHSGhanaian Cedi150
ZARSouth African Rand350
TZSTanzanian Shilling35,000
RWFRwandan Franc15,000
EGPEgyptian Pound500
USDUS Dollar29
EUREuro25
GBPBritish Pound22

Billing Intervals

IntervalDescriptionUse Case
MONTHLYBilled every monthStandard recurring billing
QUARTERLYBilled every 3 monthsModerate commitment with slight discount
YEARLYBilled every 12 monthsLong-term commitment with significant discount

Updating Plans

Update plan details. Changes apply to new subscriptions; existing subscriptions retain their original terms unless explicitly changed.

curl -X PATCH http://localhost:3000/api/plans/plan_abc123 \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk_live_a1b2c3d4..." \
  -d '{
    "name": "Starter v2",
    "features": [
      "10 projects",
      "20 team members",
      "Email support",
      "5 GB storage"
    ]
  }'
Price changes to a plan do not automatically update existing subscriptions. To change pricing for an existing subscription, update the subscription's plan or create a new plan version.

Listing Plans

curl -X GET "http://localhost:3000/api/plans?page=1&limit=20" \
  -H "Authorization: Bearer sk_live_a1b2c3d4..."

Best Practices

  1. Use descriptive names -- Plan names appear on invoices and customer-facing interfaces. Use clear, descriptive names like "Pro Plan (Monthly)" rather than internal codes.
  2. Version your plans -- When making significant pricing changes, create a new plan version instead of modifying the existing one. Use the code field to track plan versions.
  3. Offer annual discounts -- Annual plans reduce churn and improve cash flow. A 15-20% discount compared to monthly billing is a common approach.
  4. Add multiple currency prices -- For each plan, add prices in all currencies you want to support. This enables automatic currency matching for customers.
Copyright © 2026