Skip to main content
Source snapshot: 13 October 2026. These pages describe the current implementation, including unfinished controls. See coverage and review notes.

Tenant billing operations

Host: control.<ROOT_DOMAIN> · Route: /tenants/[tenantId]/billing

Purpose and access

Manage the persisted subscription, invoices, and payment records for one tenant.You need an account session and platform access. Platform privileges are separate from tenant roles; privileged writes remain subject to endpoint role checks.

Screen layout

The screen groups Subscription, Invoices, and Payments. Subscription selects a plan and status. Invoice creation asks amount, description, and due date; payment recording asks amount, method, and reference.

Fields and displayed information

Fields and filters: Tenant subscription editor

Displayed table columns: Amount, Description, Status, Issued, Due.

Fields and filters: Create invoice dialog

Displayed table columns: Amount, Method, Reference, Recorded.

Fields and filters: Record payment dialog

Actions

Linked navigation

Interaction sequence

Assign plan or change status → refresh. Issue invoice → enter amount/details → save. Mark paid or Void operates on an invoice. Record payment creates a separate payment record.

States and rules

Display amounts are converted to minor units before posting. Invoice status changes and payment recording are distinct API calls; do not assume recording a payment automatically settles an invoice. This is separate from the tenant’s static billing UI.The rendered action controls bind loading indicators to pending state. Failed API saves keep their documented error/notification path; a loading indicator alone does not establish persistence.

Implementation references

Paths below are relative to the application repository. This is source-reviewed behavior, not a recorded browser test.
  • apps/web/src/app/sites/control/(app)/tenants/[tenantId]/billing/page.tsx
  • apps/web/src/features/platform/tenant-subscription-editor.tsx
  • apps/web/src/features/platform/invoices-panel.tsx
  • apps/web/src/features/platform/create-invoice-dialog.tsx
  • apps/web/src/features/platform/payments-panel.tsx
  • apps/web/src/features/platform/record-payment-dialog.tsx
Data and access helpers: apps/web/src/lib/session.ts, apps/web/src/lib/server-api.ts, apps/web/src/lib/platform.ts, apps/web/src/lib/billing.ts, apps/web/src/lib/api-client.ts

API behavior references

  • apps/api/src/platform/platform-tenant-access.controller.ts
  • apps/api/src/platform/platform.controller.ts
  • apps/api/src/billing/plans.controller.ts
  • apps/api/src/billing/tenant-billing.controller.ts
  • apps/api/src/features/features.controller.ts
  • apps/api/src/features/tenant-features.controller.ts
  • apps/api/src/forms/forms.controller.ts
  • apps/api/src/analytics/analytics.controller.ts
  • apps/api/src/analytics/tenant-analytics.controller.ts