- Shipped
- August 11, 2026 at 12:15 AM UTC
- Author
- Kamo
- Commit
- 1c1ba66
Two things stopped an organization ever buying a first subscription. Plan lists were reachable only through sub.marketId on a subscription the org already held, so an org with none could not see a plan anywhere in the product. GET /api/billing/markets/for-org resolves the market from the caller's entitlement root — the same org whose Free plan already supplies their baseline, so plans and entitlements cannot come from different catalogs. And the plan DTO read **************** which nothing ever populates: they are NULL for every KamoCRM plan, because the seeder writes prices into **************** A buying surface therefore showed no price at all, and the account recorded a null charge. It now reads the price rows, with the plan columns as a fallback for catalogs that carry them. Also exposes the add-on unit size so a buying surface can say "per 10 GB" without hardcoding it.