Customer Portal & Requests
The customer portal is your customers' self-service window into their account: balances, invoices, subscriptions, and wallet — no login for them to remember, nothing for you to script. And when they want to make a change (cancel, switch plan), they submit a portal request that lands in your operations inbox for review. Nothing changes until a human approves it.
When should I read this?
- A customer keeps emailing asking for invoices as PDFs.
- You want customers to update their own cards instead of reading numbers over the phone.
- A customer asked to cancel, and you want that request tracked, auditable, and deliberate.
Use cases
| Scenario | What you do |
|---|---|
| Onboarding a new customer | Generate their portal link and share it — they see balances, invoices, and subscriptions immediately. |
| Customer wants to cancel | They submit a cancellation request in the portal; you triage it in Portal Requests, then act on the subscription deliberately. |
| Customer outgrows their plan | They submit a plan-change request with the target plan and quantity; you confirm and apply the amendment. |
| Card on file keeps declining | The customer updates their own payment method from the portal via a secure Stripe link. |
Generate a portal link
On a customer's detail page, click Generate Portal Link. Floatless returns a secure link (the token is valid for 7 days) with the note to share it securely. Opening the link signs the customer into their portal — no password, no account creation.

What customers see
The portal has four tabs:

| Tab | Contents |
|---|---|
| Overview | Open balance, overdue amount, active subscriptions, next bill estimate, payment-method card with an Update payment method button, recent invoices, current usage per meter, and account credit. |
| Invoices | Full billing history with Download PDF per invoice. |
| Subscriptions | Active and past subscriptions with status, billing cycle, next billing date, current period, and per-subscription actions. |
| Wallet | Prepaid balance, monthly spend against cap, spend status, and the transaction ledger (see Prepaid wallets). |

Portal requests: cancellation and plan changes
When a customer acts on a subscription in the portal, they are making a request, not a change:
- Request Cancellation — they add an optional reason and a timing preference (cancel at period end or immediate).
- Change Plan / Upgrade Plan — they name the requested plan and quantity, plus notes.
Both create a request in your queue. The portal tells customers plainly that the request is recorded for review and does not change anything by itself.
Triage requests in the console
Open Billing → Portal Requests. Stats across the top track Submitted / In review / Resolved / Rejected; the operations inbox lists each request with its type badge (cancellation in red, plan change in blue), the payload summary, customer, subscription, and status.

Click a request to open the drawer:
| Action | When |
|---|---|
| Mark in review | You picked it up. |
| Mark resolved | You completed the underlying change (with an optional resolution note). |
| Reject request | You declined it (say why in the note — it helps support later). |
| Move to submitted | Sent it back to the queue. |
| Open subscription | Jump to the subscription to actually perform the cancellation or amendment. |
Security model
- Portal links are scoped to one customer and expire after 7 days; generate a fresh link any time.
- Payment-method updates go through Stripe's hosted page via a separate single-purpose token (valid 24 hours), so card data never touches your servers.
- Customers see only their own data — the token maps to exactly one customer record.
Common issues
- The link expired. Generate a new one; the old token stops working immediately after expiry.
- "Update payment method" errors in the portal. Stripe keys are not configured for your organization yet — see Settings.
- A request sits in review forever. It stays until a human resolves it — that's the design. Use the stats row to spot aging requests.