How It Works
Sending Portal Access
Via Dashboard
Send a portal link directly to a customer:- Navigate to Customers → [Customer Name]
- Click Send Portal Link or Send Billing Email
- Customer receives an email with a secure link
- The link is short-lived and single-use
Via Your Application
Create a portal session withPOST /customer-portal-sessions and redirect the customer to the url it returns.
See Customer Portal for the request shape and the per-section settings.
What Customers Can Do
View Invoices
Customers can see all their invoices:- Current and past invoices
- Invoice status (paid, pending, overdue)
- Download invoice PDFs
- View line item details
Update Payment Method
Customers can manage their payment methods:- Add new credit card
- Update existing card
- Set default payment method
- Add bank account (if enabled)
View Subscription
Customers can see their subscription details:- Current plan and pricing
- Billing cycle dates
- Next invoice date
- Contract terms
Self-Service Changes
If enabled, customers can:- Upgrade to a higher plan
- Downgrade to a lower plan
- Add or remove seats
- Cancel subscription
Portal Configuration
Settings → Customer Portal
Configure what customers can do:
These are your organization’s defaults. A portal session can override any of them for a single customer.
Enabling Self-Service
- Navigate to Settings → Customer Portal
- Enable self-serve plan changes and, if you want it, self-cancellation
- Save settings
plan_overview_settings.allow_self_serve_change on the sessions where it should be available.
Branding
Customize the portal appearance:- Navigate to Settings → Branding
- Upload your logo
- Set primary colors
- Configure footer text
- Preview the portal
Portal Sessions
Session Expiration
Each session carries anexpires_at and is single-use. Create a session when the customer clicks through to billing rather than emailing a link you generated earlier.
Security
- Each link is unique and single-use
- Sessions are tied to a specific customer
- No login required, so the link is the credential: treat it as a secret
Webhooks
Receive notifications when customers take action:
Configure webhooks in Settings → Webhooks. See Webhooks for the full event list and payloads.
Common Use Cases
”Manage Billing” Button
Add a button in your app that takes customers to the portal:- Create a
/billingroute in your application - When it is accessed, create a portal session and redirect to the session
url - Because sessions are single-use, create a fresh one on every visit
Payment Method Only
To narrow the portal to payment details, hide the other sections on the session:plan_overview_settings.show_section:falseinvoice_list_settings.show_section:falsebilling_details_settings.allow_payment_method_edit:true
Invoice Access
To give customers invoices and nothing else, show only the invoice list:invoice_list_settings.show_section:trueplan_overview_settings.show_section:false
Troubleshooting
Portal Link Not Working
- Check the session’s
expires_at— it may have lapsed - Check whether the link has already been used; sessions are single-use
- Verify the customer exists, then create a new session
Customer Can’t See Invoices
- Verify the customer has invoices
- Check that
invoice_list_settings.show_sectionis not set tofalseon the session, and that the section is enabled in your organization defaults
Self-Service Changes Not Available
- Check that self-service is enabled in Settings → Customer Portal
- Verify the plans allow self-service changes
- Ensure the customer’s current plan permits changes
Best Practices
Easy Access
Add a clear “Manage Billing” link in your app navigation.
Brand Consistently
Configure branding so the portal matches your app.
Limit Self-Service
Control which changes customers can make on their own.
Handle Webhooks
Listen for portal events to keep your app in sync.
Next Steps
Customer Portal
Full portal configuration and API reference.
Hosted Checkout
Set up hosted checkout pages.