/dashboard/commerce/subscriptions/, with data in crm_subscriptions.
Subscription types
- Flat recurring
- Tiered plans
- Usage-based
- Hybrid (base + usage)
A fixed price billed on a fixed cadence. The simplest type — most retainers and SaaS plans.Example: “$3,000/month for SEO retainer.”
Setting up a subscription
Pick the client
Subscriptions tie to a CRM contact or company. The same client can have multiple active subscriptions (different services, different plans).
Pick the plan or product
From your Products catalog, pick the recurring product. For tiered plans, the plan-picker shows all
is_plan: true products grouped together.Set the start date
Today, a future date, or backdated. The first invoice generates on the start date (or on the next billing-cycle anchor — see proration below).
Set the billing frequency
Monthly, quarterly, semi-annual, or annual. Most retainers are monthly; SaaS-style plans are often monthly or annual with a discount for annual.
Set the billing anchor
The day of the month invoices generate. Day 1 is common; some businesses prefer the day-of-month matching the start date so each client has their own anchor.
Add line items
The base plan plus any add-ons. Each line item can have its own quantity and price overrides.
Subscription statuses
active— Billing on schedule, no issues.past_due— A generated invoice is unpaid past the dunning policy. The subscription stays active but the status flag warns you.paused— Manually paused. No invoices generate until you resume.canceled— Canceled by you or the client. No future invoices; keeps history for reporting.trialing— In a free-trial period before the first paid invoice.
Plan changes
Three flavors of plan changes:- Upgrade (immediate)
- Downgrade (at next renewal)
- Same-day swap (no proration)
Move to a higher-priced plan effective immediately. The current cycle is prorated — client gets a credit for the unused portion of the old plan and is charged for the prorated remainder of the new plan. The next full cycle bills at the new plan price.
Pausing and canceling
- Pause — Stops invoice generation but keeps the subscription record. Resume any time. Useful for seasonal clients or contractor breaks.
- Cancel at end of cycle — Honors the current cycle (client got what they paid for) and stops at renewal. The default cancellation flow.
- Cancel immediately — Stops billing on the spot. Optionally issues a prorated refund for the unused portion of the current cycle.
Failed payments and dunning
When an invoice generated by a subscription fails to charge, the dunning policy kicks in:First retry (24 hours)
Automatic retry the next day, in case the failure was transient (insufficient funds that since cleared, etc.).
Second retry (3 days)
Another automatic retry, paired with an email to the client asking them to update their payment method.
Mark past_due
Subscription is flagged
past_due. No more auto-retries. Your team is notified to follow up directly.Usage-based billing
For usage-priced subscriptions, record usage against the subscription throughout the cycle:- Manual — Enter usage in the subscription’s UI before the cycle closes.
- API —
POST /api/crm/subscriptions/:id/usageto record usage events from your application. - Imported — Periodic CSV upload for usage tracked elsewhere.
MRR and ARR
Active subscriptions roll up into:- MRR (Monthly Recurring Revenue) — Sum of all monthly-equivalent subscription value.
- A 99.
- A 83.25 ($999 ÷ 12).
- ARR (Annual Recurring Revenue) — MRR × 12.
- New MRR — From new subscriptions this period.
- Expansion MRR — From upgrades on existing subscriptions this period.
- Churn MRR — From cancellations and downgrades this period.
- Net MRR change — New + Expansion − Churn.
API patterns
Common operations against/api/crm/subscriptions:
POST /api/crm/subscriptions— create a subscriptionPOST /api/crm/subscriptions/:id/activate— activate a draftPOST /api/crm/subscriptions/:id/pause— pause billingPOST /api/crm/subscriptions/:id/resume— resume from pausedPOST /api/crm/subscriptions/:id/cancel— cancel (at end of cycle by default)POST /api/crm/subscriptions/:id/change-plan— upgrade/downgradePOST /api/crm/subscriptions/:id/usage— record usage event
Best practices
- Standardize billing anchors. Either everyone bills on the 1st, or everyone bills on their start date. Mixing is operationally painful.
- Use plans (
is_plan: true) for tiers, not for one-off retainers. Plans imply self-serve change-ability; bespoke retainers usually don’t have that. - Don’t backdate subscriptions casually. Backdating generates immediate invoices for past cycles and confuses MRR reporting. If you need to backfill billing for completed work, send standalone invoices instead.
- Match your usage-record cadence to your billing cycle. If you bill monthly but only sync usage quarterly, you’ll under-bill three months in a row.
Troubleshooting
Subscription is active but no invoice generated
Subscription is active but no invoice generated
Check the next-billing-date — it may not have arrived yet. Check the subscription’s activity log for any generation errors. Also verify the client’s payment method is on file (Stripe/Authorize.Net) and that the payment processor connection is healthy.
Plan change didn't prorate the way I expected
Plan change didn't prorate the way I expected
Proration math depends on the change type — upgrades prorate, downgrades-at-renewal don’t. Double-check which option you picked. The activity log shows the prorated amounts so you can verify the math.
MRR number looks wrong
MRR number looks wrong
Annual subscriptions divide by 12. Multi-month (quarterly) divides by 3. Trialing subs aren’t counted. If your MRR is missing recent expansion or showing churn that didn’t happen, check the subscription’s status — past_due and paused are still active for MRR purposes, while canceled isn’t.
Failed payment retries aren't running
Failed payment retries aren't running
Check the dunning policy in Payment Settings. Also check that your processor connection is authorized — Stripe OAuth tokens can expire, and a disconnected processor can’t retry.
Usage line item didn't appear on the invoice
Usage line item didn't appear on the invoice
Usage must be recorded before the cycle’s billing date. Late entries don’t backfill. If you need to charge for missed usage, add it as an ad-hoc line item on the next invoice with a clear description.
What’s next?
Set Up Recurring Subscriptions
Hands-on walkthrough of creating your first recurring sub.
Products Catalog
Build the recurring products subscriptions reference.
Reports & Analytics
MRR, ARR, and churn dashboards.
Payment Processing
Failed-payment policy and dunning configuration.