Stripe customer portal session will not open
Manage billing never reaches the Stripe customer portal? Stripe says to configure the portal in the Dashboard, then create the session on the server.
Reviewed October 15, 2026
What it means in plain English
The customer portal is a Stripe-hosted page where a customer updates a subscription or a card. It does not exist until you configure it. Stripe's integration guide says to define the portal's features in the Dashboard first, separately for sandboxes and for live mode, and then create a portal session from your server. The session's url is what you redirect to. A session that was never configured, or that was configured only in test mode, will not open for a live customer.
Likely causes
- The button calls Stripe from the browser, or it never calls
billing_portal/sessions. - The portal was saved in a sandbox and the live switch is still on View test data. Stripe says those configurations are separate, and a change in one mode does not change the other.
return_urlwas omitted. Stripe says it is required when the Dashboard configuration has no default return URL.- The route creates a session without checking that the signed-in person owns that Stripe customer.
How to fix it, step by step
- In the Stripe Dashboard, configure the portal for the mode you are using. Stripe says to pick the features, save, and use Preview. Preview is read-only. To try a real session, open a customer and use Actions, then Open customer portal, while the Dashboard is in a sandbox.
- Add a server endpoint that creates the session with your secret key, the customer id, and a
return_url. Stripe's example isPOST /v1/billing_portal/sessions. Authenticate the person on your site before you create the session. Redirect the browser to the returnedurl. - For production, turn off View test data, configure the portal again in live mode, and add the live webhook endpoint. Stripe lists
customer.subscription.updatedandcustomer.subscription.deletedamong the events that tell you the subscription changed. - Redeploy the server route. Do not put the secret key in the client.
How to check it worked
- The button lands on a
billing.stripe.comportal URL and returns to yourreturn_url. - A live customer hits the live configuration, not the sandbox one.
Sources
Related fixes
More Stripe fixes
Keep going on your own.
The guides stay free. A deep leak report is $15. Fix packs are $24, or $49 for all three. There is no done-for-you repair.