# Stripe: card_velocity_exceeded (card limit reached)

> Stripe declined the card with card_velocity_exceeded: the customer hit a balance, credit or amount limit on the card. Ask for another card, not a retry loop.

Canonical: https://app369.com/fix/stripe-card-velocity-exceeded/
Last updated: 2026-11-09

card_velocity_exceeded is the Stripe decline code for a card that hit a balance, credit or amount limit set by the bank. The integration isn’t broken. The customer needs another card or a call to the bank, and retrying the same card right away rarely helps.

**Short answer**

Show a clear message that asks for another card or for the customer to contact the bank. Don’t retry the same card in a loop. For subscriptions, let your retry schedule try again later and email the customer a link to update the card.

Rather not fix it yourself? [**Stripe Billing Fix and Setup**](https://app369.com/fixed-price/stripe-billing-setup/) handles it at a fixed price, agreed before work starts.

## **What the code means, and the fix**

1. 01 ### **The customer reached a limit on the card**
  > “The customer has exceeded the balance, credit limit, or transaction amount limit available on their card.” [**Stripe, Decline codes (card_velocity_exceeded)**](https://docs.stripe.com/declines/codes) The bank set the limit, so only the cardholder can change it. It can be the credit limit, the available balance, or a limit on the transaction amount.
2. 02 ### **The app needs to read the decline code** The error type is card_error with code card_declined, and decline_code says why. On a PaymentIntent it is in last_payment_error. In Stripe.js, confirmCardPayment doesn’t throw: it resolves with { error }, and the code is error.decline_code. Show a message for this code instead of a generic failure.```
// server side (Node); piId and pmId: your PaymentIntent id and the new payment method id
try {
  await stripe.paymentIntents.confirm(piId, { payment_method: pmId });
} catch (err) {
  if (err.type === 'StripeCardError' && err.decline_code === 'card_velocity_exceeded') {
    // ask for another card, or for the customer to contact the bank
  }
}
```
3. 03 ### **Retrying the same card right away**
  > “The customer needs to contact their card issuer for more information.” [**Stripe, Decline codes (card_velocity_exceeded)**](https://docs.stripe.com/declines/codes) A limit doesn’t reset in seconds, so repeated tries fail the same way. Many failed tries in a row can also look like card testing. Stop after the decline and ask for another payment method, and attach it to the same PaymentIntent instead of creating a second one, so one order stays tied to one charge.
4. 04 ### **Renewals fail at the start of the month** A renewal may fail when other charges have used up the card’s limit that day. Let Smart Retries or your retry schedule try again on a later day, and send the customer a link to update the card, such as the customer portal.

Checked against the vendor’s docs on November 9, 2026: [Stripe docs: Decline codes](https://docs.stripe.com/declines/codes).

## **Rather hand it over?**

Fixed scope, fixed price, paid upfront. The work happens in writing; no call needed.

- [$950**Stripe Billing Fix and Setup**Subscriptions, webhooks, customer portal and failed payments set up or fixed, tested in Stripe test mode.**See scope and start**](https://app369.com/fixed-price/stripe-billing-setup/)
- [from $450**App Fix Ticket**One reproducible bug in an existing mobile or web app, diagnosed and fixed.**See scope and start**](https://app369.com/fixed-price/flutter-firebase-bug-fix/)
- [from $450**AI-Built App Rescue**A 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. This applies to the first 10 Launch Checks bought after October 30, 2026.**See scope and start**](https://app369.com/fixed-price/ai-app-rescue/)

[**All 127 Fiverr reviews**](https://app369.com/reviews/)

Related: [**Stripe insufficient_funds**](https://app369.com/fix/stripe-insufficient-funds/) · [**Stripe do_not_honor**](https://app369.com/fix/stripe-do-not-honor/) · [**Stripe generic_decline**](https://app369.com/fix/stripe-card-declined-generic-decline/) · [**Stripe card_not_supported**](https://app369.com/fix/stripe-card-not-supported/)

Questions

## **More on this error**

<details>

<summary>**Is card_velocity_exceeded fraud? **+</summary>

Not by itself. It means a limit on the card was reached. Treat it like any decline: ask for another card and don’t retry in a loop.

</details>

<details>

<summary>**Can I fix it in Stripe? **+</summary>

No. The bank sets the limit. Your part is a clear message, a way to add another card, and retries spaced out over days for renewals.

</details>

<details>

<summary>**Can you fix it for me? **+</summary>

If one bug is the whole problem, the App Fix Ticket covers it: a written diagnosis first, then the fix. If the app has more going on, the Launch Check is a written check of the whole app. Each issue found is rated critical, high, medium or low, with where it is and how it was confirmed. 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. This applies to the first 10 Launch Checks bought after October 30, 2026.

</details>

A different error?

## **Describe it and get a written quote**

Send the error and what you were doing. You get a written scope, a fixed price and a timeline; Simon replies by email, usually within one business day.

[**Describe your problem **→](https://app369.com/contact/) [**All fixes**](https://app369.com/fix/)