On this page
Stripe processes hundreds of billions of dollars annually. When it goes down, the impact isn't just technical — it's a direct hit to revenue. Checkout flows fail, subscriptions don't renew, and every failed payment is a customer who might not come back. Understanding Stripe's status in real time, and building resilience into your integration, is essential for any business that takes payments seriously.
Here's how to diagnose a Stripe outage, understand what the errors actually mean, and protect your revenue when Stripe has issues.
Stripe Status Right Now
The fastest signal: Statusfield's Stripe status page monitors Stripe's API, webhooks, and dashboard continuously and alerts you within minutes of degradation — no manual checking required.
Is Stripe Down Right Now?
Check these sources in order:
- Statusfield — Stripe status: review the latest recorded status, available components and incident history.
- Stripe's official status page — status.stripe.com shows component-level status across all regions and products.
- Twitter/X — search
Stripe downorStripe payments failingsorted by Latest. - Stripe's developer Discord — discord.gg/stripe where the community often surfaces issues quickly.
What Breaks During a Stripe Outage
Stripe's infrastructure is modular — different components can fail independently. Knowing which one is affected tells you whether checkout is broken, whether webhooks are delayed, or whether your dashboard data is just stale.
| Component | What it handles | Impact when down |
|---|---|---|
| API | All Stripe API endpoints | Charges, customers, subscriptions — all API calls fail |
| Checkout | Stripe-hosted checkout pages | Hosted checkout flows break for customers |
| Payment Intents | 3DS / SCA payment flow | Modern payment flows fail; checkout may not complete |
| Webhooks | Event delivery to your endpoints | Payment confirmations delayed or not delivered |
| Dashboard | Web interface for merchants | Merchants can't manage payments but API may still work |
| Billing / Subscriptions | Recurring billing engine | Subscription renewals may fail or be delayed |
| Connect | Multi-party payments, marketplace flows | Payouts to connected accounts affected |
| Radar | Fraud detection | Payments may be blocked more aggressively or Radar rules not applying |
| Stripe.js | Client-side JavaScript library | Payment form won't load or tokenize cards |
Critical insight: Stripe separates Webhooks from the core API deliberately. During partial incidents, you may see API calls succeed but webhook delivery be delayed by hours. Never rely solely on webhooks to confirm payment success — always confirm via the API.
Stripe Error Codes During an Outage
Stripe's error system is detailed. Here's how to distinguish an outage error from a normal decline or integration error:
HTTP-level errors (infrastructure problems)
| HTTP Status | Meaning | Is it Stripe's fault? |
|---|---|---|
500 Internal Server Error | Stripe backend error | Yes — Stripe issue |
502 Bad Gateway | Gateway/proxy error | Yes — check status page |
503 Service Unavailable | Stripe is overloaded or maintenance | Yes — check status page |
504 Gateway Timeout | Stripe request timed out | Yes — often during incidents |
Stripe error codes (application-level)
| Stripe Error Code | Meaning | Outage-related? |
|---|---|---|
api_connection_error | Can't reach Stripe's API | Possibly — check network and Stripe status |
api_error | Something went wrong on Stripe's end | Yes — Stripe-side issue |
rate_limit_error | Too many requests | No — your integration is sending too fast |
card_declined | Card issuer declined the charge | No — not Stripe's fault |
do_not_honor | Card issuer decline | No — card issuer issue |
insufficient_funds | Customer has no funds | No — customer issue |
card_error | Various card-level errors | No — card/customer issue |
The key distinction: api_error and HTTP 5xx errors are Stripe's infrastructure failing. card_declined, insufficient_funds, and other card_error subtypes are normal decline logic — they're not outages, even during high-volume periods.
The Real Business Impact of a Stripe Outage
Stripe outages are rare but consequential. Consider what actually happens:
Lost checkout completions. A customer reaching payment is highly intent-to-buy. An error at checkout — especially one with a generic "payment failed" message — creates doubt and often results in abandonment, even after Stripe recovers.
Subscription renewal failures. Stripe retries failed subscription charges automatically (Smart Retries), but during an outage, a charge that would have succeeded may be marked as failed and trigger a retry cycle. Customers may see incorrect "payment failed" emails.
Delayed webhook delivery. If your fulfillment system relies on payment_intent.succeeded webhooks, a webhook outage means orders are accepted but not fulfilled. You need reconciliation logic to handle this.
Double charges. Without proper idempotency key usage, a timeout during an outage may cause your system to retry a charge that actually succeeded on Stripe's end. This results in duplicate charges.
Building Stripe-Resilient Integrations
Use Idempotency Keys — Always
This is the single most important thing you can do. Idempotency keys allow you to safely retry a request without risk of creating duplicate charges.
const charge = await stripe.paymentIntents.create(
{
amount: 2000,
currency: 'usd',
payment_method: paymentMethodId,
confirm: true,
},
{
idempotencyKey: `order_${orderId}_${userId}`, // unique, stable key per transaction attempt
},
);If the first request times out and you don't know if it succeeded, retry with the same idempotency key. Stripe will return the original result rather than creating a new charge.
Implement Retries with Exponential Backoff
For api_error and HTTP 5xx responses, retry with backoff. For card_declined and other card errors, do not retry — they will continue to fail.
import stripe
import time
def create_payment_intent_with_retry(amount, currency, payment_method, order_id, retries=3):
idempotency_key = f"pi_{order_id}"
for attempt in range(retries):
try:
return stripe.PaymentIntent.create(
amount=amount,
currency=currency,
payment_method=payment_method,
confirm=True,
idempotency_key=idempotency_key
)
except stripe.error.APIError as e:
# Stripe server-side error — safe to retry
if attempt == retries - 1:
raise
time.sleep(2 ** attempt) # 1s, 2s, 4s
except stripe.error.Timeout as e:
# Request timed out — safe to retry with same idempotency key
if attempt == retries - 1:
raise
time.sleep(2 ** attempt)
except stripe.error.CardError as e:
# Card declined — do NOT retry, surface error to user
raiseHandle Webhook Delivery Delays
Stripe retries webhooks for up to 3 days when your endpoint is unavailable. But what if your endpoint is up and Stripe's webhook delivery is delayed?
Build reconciliation into your system:
// Don't rely solely on webhooks for critical state changes.
// Periodically query Stripe to reconcile:
async function reconcileRecentPayments() {
const paymentIntents = await stripe.paymentIntents.list({
created: { gte: Math.floor(Date.now() / 1000) - 3600 }, // last hour
limit: 100,
});
for (const pi of paymentIntents.data) {
if (pi.status === 'succeeded') {
await fulfillOrderIfNotFulfilled(pi.metadata.order_id);
}
}
}Graceful Degradation for Checkout
When Stripe is unavailable, don't just show a generic error. Give customers confidence and a path forward:
try {
const result = await stripe.confirmPayment({ elements, confirmParams });
if (result.error) {
// Card error — show specific message
showCardError(result.error.message);
}
} catch (networkError) {
// Stripe.js couldn't reach Stripe — likely an infrastructure issue
showMessage(
"We're having trouble processing payments right now. " +
'Your card has not been charged. Please try again in a few minutes, ' +
'or contact support if this persists.',
);
logError('stripe_checkout_network_error', networkError);
}Set Up a Status Check Endpoint
Expose a health check in your app that verifies Stripe connectivity. Include it in your monitoring dashboard:
app.get('/health/stripe', async (req, res) => {
try {
// Lightweight call — just fetch account info
await stripe.accounts.retrieve();
res.json({ stripe: 'ok' });
} catch (err) {
res.status(503).json({ stripe: 'error', message: err.message });
}
});How to Get Stripe Outage Alerts
A Stripe outage is a revenue emergency. The worst scenario is finding out about it from a customer who couldn't complete checkout, or from your support queue filling up.
Monitor Stripe on Statusfield and get alerted when any Stripe component changes status, helping your team investigate and respond.
Configure alerts for the components that matter to your business: the API for developers, Webhooks if your fulfillment depends on event delivery, Billing for subscription businesses, and Connect if you run a marketplace.
Frequently Asked Questions
Is Stripe down for everyone or just me?
Compare Stripe status with the recorded Stripe status on Statusfield, then inspect your payment errors and request logs. An operational report does not rule out an account-specific or unreported problem. Card declines, configuration errors and platform failures require different responses.
Payments are failing but Stripe's status page shows "operational" — why?
A provider status report may not cover every account, region or payment method. Statusfield follows supported Stripe status reports; it does not inspect your private payment requests or independently establish the cause. Compare reported incidents with your request logs and affected payment methods.
My webhook isn't firing — is Stripe down?
Review supported Stripe components on Statusfield and inspect webhook delivery attempts in your Stripe Dashboard. Check the response from your endpoint and your application logs. A delayed webhook alone does not establish a Stripe outage.
A payment timed out — was the customer charged?
Possibly. A timeout does not establish whether the operation succeeded. Check the PaymentIntent and reconcile the outcome before starting a new payment attempt. Follow Stripe’s retry and idempotency guidance for your API version.
How do I prevent double-charging customers during a Stripe outage?
Use a stable idempotency key for retries of the same supported operation, keeping the request parameters unchanged. Check Stripe’s idempotency and retry guidance for retention windows and API-version differences. If the original outcome is uncertain, reconcile it before starting a new operation.
Does Stripe automatically retry failed subscription payments?
Stripe Billing supports configured automatic retries for failed subscription and invoice payments, but eligibility and failure type matter. Review your retry settings and invoice events rather than assuming every failed payment will be retried. See Stripe’s payment retry documentation.
How do I get alerted when Stripe goes down?
Select supported Stripe components in Statusfield, choose the detected changes you want to receive and configure a destination. Channels depend on your plan. Test delivery before relying on the rule; source reporting, processing and destination availability affect timing.
Keep your vendors in view.
Choose from 7,000+ services, follow the components you use, and configure alerts for your team.
Try any paid plan for 30 days, no credit card required. Free trial for first-time customers.