- Shipped
- August 27, 2026 at 8:06 PM UTC
- Author
- Kamo
- Commit
- e6d5c5c
The phone server's extensions tab showed the organization-wide figure and nothing else, so an empty KamoPBX server displayed "21 billable extensions — $63.00 / month" — the 21 being on a FreePBX server elsewhere in the same org. /api/billing/extensions/summary now carries an `instances` list: one line per live server with its class, its billable count, its free count, the rate and its own monthly total. The organization totals are unchanged and still returned. Built from the INSTANCE list, not the breakdown. A server with no extensions contributes nothing to a breakdown and would otherwise be absent from its own screen — which is precisely the case that started this. Free counts come from the per-instance map added in kamo-shared-library a5b131d1, and the class rules are what make the two provider kinds read differently: a hosted server charges every active extension whether anyone is assigned or not, so its free count is always zero; a third-party server charges only assigned ones and reports the queues, IVRs and spares as free. Shared library pushed first — consumers clone its main at build time, so a service commit needing a new method is only buildable once that method is on the default branch. 256 tests pass.