KamoCRM

Core-plan pickers, flat plans, grace periods, bank payments, paid/ended events

FeatureBillingService
Shipped
November 11, 2026 at 6:12 AM UTC
Author
Kamo
Commit
cfbee29

- Mailbox/PBX controllers and reconcilers, LicenseUsageService, OrgPlanService: the CORE subscription via CorePlans (never a flat product's Stripe sub); flat plans stay out of seat totals, ceilings, seat rows and assignment. - resolveBillingMarketId: the market holding the business Free plan, else the lowest SUBSCRIPTION market selling seats — never display order alone. - AccountSubscriptionService: row persisted before the setup-fee and Subscription idempotency keys (was "null:..."); ONE_TIME add-ons charged once as an invoice item or refused; fallbackToFree only from the subscription's own market; a first payment by bank debit is kept INCOMPLETE until it clears. - Per-market agreements in SetupFeeBiller, SelfPlanService, ConsumerCheckout and the agreement admin (marketId). - Opt-in grace periods: seller endpoints **************** AUTO start on invoice.payment_failed, StripeGraceSweep, payment lifts it. - billing.subscription.paid (purchase / invoice.paid) and .ended (Stripe canceled). - Invoice checkout takes card + us_bank_account, counted only when paid; SetupIntents accept us_bank_account; async_payment_* webhook events.

All changes

Like what you see shipping?

All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.

Start Free ForeverView Pricing