In this guide 6 sections
Before the first real card payment on Stripe, finish account verification and swap in live API keys. Register a live webhook endpoint with its own signing secret. Test receipts and refunds, set tax and invoice details, and plan for failed payments. Run one small real purchase before announcing.
Finish the account before touching code
Stripe will not pay out until the account is verified. Plan for it. Complete the business details, the representative’s identity and the bank account for payouts. Do it early, because document reviews can take days.
Set the public business name, the support email and the statement descriptor. The descriptor is what appears on the cardholder’s bank statement. A vague one produces disputes from customers who do not recognise you.
Turn on the payment methods you intend to offer, and check which currencies your payout account can receive.
- Business and identity verification complete
- Payout bank account added
- Statement descriptor and support email set
- Payment methods and currencies chosen
Swap keys and rebuild the webhook
Test and live mode are separate worlds. Treat them so. Live mode has its own publishable key, secret key, products, prices and webhook endpoints. A price created in test mode does not exist in live mode.
Store the live secret key in your server’s environment variables, never in the repository or the browser code. Register a new webhook endpoint in live mode and copy its signing secret into your configuration. Verify the signature on every event, and reject anything that fails.
Subscribe only to the events you handle, such as checkout.session.completed, invoice.paid and charge.refunded. Return a 200 quickly, then process in the background, because Stripe retries slow endpoints and you will see duplicates.
- Live publishable and secret keys deployed
- Products and prices recreated in live mode
- Live webhook endpoint with its own signing secret
- Signature verification active
- Handlers safe to run twice for the same event
Walk the customer journey, including the bad parts
Check what the customer receives. Everything. Does the receipt show your name, the amount and a contact address? Decide whether Stripe sends it or your own system does, and make sure only one of them does.
Practise a refund from the dashboard and confirm your database changes too. Orders that stay marked paid after a refund cause awkward audits later.
Failed payments need a plan. Cards expire, banks decline and 3D Secure challenges get abandoned. Show a clear message, keep the cart, and for subscriptions decide how many retries happen and when access ends.
Tax, invoices and records
Check the tax settings for the countries where you sell. Stripe Tax can calculate and collect, but you still register where the law requires it. Ask your accountant, not a forum post.
Fill in the invoice template: legal name, address, tax number and a footer with your terms. Customers forward invoices to their finance teams, and a missing field becomes a support email.
Agree where payout reports go. Your bookkeeper will want the balance transaction export that matches each bank deposit.
Run one real payment before you announce
Buy your cheapest product with your own card in live mode. Watch the webhook arrive, the order change state, the receipt land and the dashboard show the charge. Then refund it.
Keep an eye on the dashboard logs for the first day. Failed webhook deliveries show up there. Add an alert on webhook failures so that a silent break reaches you.
Announce after that run. Not before. Write down who handles a dispute and how fast, then share the link with the team.
Stripe go live sheet
A one-page checklist in four blocks: account, keys and webhooks, customer journey, and first live run. Each row has a tick box, an owner and a date. Rows include verification status, descriptor, live key deployed, webhook secret stored, receipt sent once, refund tested, failed card handled and the refunded test purchase.
Open a blank worksheet to printQuestions owners ask
Can I reuse my test products in live mode?
No. Products, prices, coupons and webhooks do not carry over. Recreate them in live mode, or script the creation so both modes match.
Why does my live webhook fail when the test one worked?
Usually the signing secret is the test one. Each endpoint has its own secret. Check the live endpoint’s secret and the server’s environment variables.
Should the browser or the server confirm a payment?
The server, through the webhook. Browsers close tabs and lose connections. The event from Stripe is the reliable record that money moved.
Do I really need a real test payment?
Yes. Test card numbers do not exercise your bank, descriptor, live keys or payout setup. One small real charge, then a refund, proves the lot.
