What card_velocity_exceeded means
The issuer enforces velocity controls — limits on how many charges a card can run, how much it can spend, or how many attempts can hit a single merchant in a rolling window. When you trip one, Stripe surfaces decline_code = "card_velocity_exceeded". The card is valid; the issuer is throttling.
Why it shows up in SaaS billing
- Customer's card just paid several other subscriptions on the same day.
- Smart Retries (yours or another merchant's) burned through the per-merchant attempt cap.
- Annual renewal hit the per-day amount ceiling on a corporate card.
The recovery play
- Hold retries for 24 hours. Velocity windows are rolling — hitting the issuer inside the window resets nothing.
- Email a hosted update-card link. If the cardholder can pay with a different card or push the bank to raise the limit, you recover today instead of tomorrow.
- Retry once after 24 hours. If it fails again, the customer has hit a hard limit and needs to swap cards.
Frequently asked questions
›What does card_velocity_exceeded mean?
The card has hit a usage limit set by the issuer — too many charges in a short window, too high a cumulative amount, or too many attempts at one merchant. The bank is rate-limiting, not refusing the card.
›How long until I can retry card_velocity_exceeded?
Most issuer velocity windows reset on a 24-hour rolling basis. Retrying inside the window will almost always fail with the same code. Wait at least 24 hours, and if it fails again, ask the customer to use a different card.
›Does Smart Retries help with card_velocity_exceeded?
Partially. Smart Retries will eventually retry outside the velocity window, but it has no view into when the window actually resets. A focused 24-hour retry plus customer outreach offering an alternative card recovers faster.
