Short answer
Test mode (Stripe now calls it a sandbox) and live mode have separate API keys, products, prices, customers and webhook endpoints, and nothing created in one exists in the other. Put the live keys in your production app’s settings, recreate your products and prices in live mode and switch their IDs in your code, add a live webhook endpoint with its own signing secret, then redeploy.
What to switch, in order
01
The live app still has test keys
“Each mode has its own set of API keys, and objects in one mode aren't accessible to the other.” Stripe, API keys
Replace pk_test_ with pk_live_ in the front end, and sk_test_ or rk_test_ with the live secret or restricted key on the server. Change them in your host’s production settings, not only in a preview or your local .env file. Front-end keys are built into the code, so redeploy afterwards.
02
Your price IDs are from test mode
A price_ ID copied from the sandbox doesn’t exist in live mode, so checkout fails with a "No such price" error. Create the products and prices again in live mode and switch the IDs in your code or settings. Customer IDs saved while testing won’t work in live mode either.
03
No live webhook endpoint, or the test signing secret
“If you're using webhooks, make sure you've defined live endpoints in your Stripe account.” Stripe, Go-live checklist
Webhook endpoints are set up separately in each mode. Add your endpoint again in live mode and put that endpoint’s signing secret on the server. With the test secret, every live event fails verification, so customers pay but their accounts never unlock.
04
Don’t test live mode with your own card
“The Stripe Services Agreement prohibits testing in live mode using real payment method details.” Stripe, Testing
Test card numbers only work in a sandbox, and Stripe doesn’t allow testing live mode with real card details. Check each step above in the sandbox. Once you’ve switched, open the Dashboard logs and the webhook delivery log when your first real customer pays, and confirm your app unlocked their account. Stripe’s go-live checklist covers the rest.
Checked against the vendor’s docs on : Stripe docs: API keys, sandbox versus live mode; Stripe docs: Go-live checklist; Stripe docs: Testing.
Rather hand it over?
Fixed scope, fixed price, paid upfront. The work happens in writing; no call needed.
- $950Stripe Billing Fix and SetupSubscriptions, webhooks, customer portal and failed payments set up or fixed, tested in Stripe test mode.See scope and start
- from $450App Fix TicketOne reproducible bug in an existing mobile or web app, diagnosed and fixed.See scope and start
- from $450AI-Built App RescueA Lovable, Bolt or Cursor app checked end to end in 3 days, then its worst problems fixed at a fixed price.No issues worth fixing, no charge. If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way.See scope and start
Related: Stripe paid but account not upgraded · Stripe webhook signature error · Stripe "No such customer" in test or live mode