Customers can't check out.
Payments failing.
Payment failures almost always come from one of three places: the wrong API key is active, you're still in test mode on a live site, or a webhook isn't configured.
Check your Stripe dashboard first
Go to Stripe Dashboard โ Developers โ Logs. Find the failed charge. The error code tells you exactly what went wrong โ card_declined, invalid_api_key, webhook_error, etc.
Common causes & fixes
The most common cause. Your code uses sk_test_ keys but you're taking real payments. Swap to live keys (sk_live_) in your environment variables.
Stripe needs a webhook URL to confirm payments. Add your endpoint in Stripe Dashboard โ Webhooks and re-enable events.
Stripe requires identity verification before processing live payments. Check your dashboard for any pending verification steps.
European cards often require 3DS authentication. Make sure your checkout flow handles the redirect properly.
Verify your API key is valid:
# Test your Stripe keys:
curl https://api.stripe.com/v1/charges \
-u sk_test_YOUR_KEY:
# Should return {} not an auth error