You try to pay for a subscription or a purchase, and Stripe returns do_not_honor, generic_decline, or insufficient_funds. These codes are not a verdict — they are a hint: sometimes the card issuer is responsible, sometimes the merchant's settings, and sometimes your balance. Below is what each means and how to act so repeated attempts don't make things worse.

Step 1. Understand what the code means

Stripe passes along the decline code from the card issuer. The three most common:

  • do_not_honor — the issuer declined the transaction without specifying a reason. Often triggered by fraud prevention or restrictions on the type of operation (e.g., recurring payment or foreign merchant).
  • generic_decline — a general decline. The bank doesn't provide details; the cause could be anything from a limit to mismatched data.
  • insufficient_funds — not enough funds in the account (including a possible hold for verification).

If you're paying with a virtual card, first check the balance and limits in the issuer's app. For VirtCardPay, as with other services, check the website for limits and terms — numbers change.

Step 2. Verify your details and settings

Before retrying the payment, check:

  • Whether the cardholder name, expiry date, and CVV match what's on the card.
  • Whether your issuer supports recurring payments (if you're setting up a subscription).
  • Whether the daily or monthly limit on the card has been reached.
  • Whether you have enough funds with a buffer: some merchants temporarily hold a larger amount for verification.
  • Whether the merchant accepts cards from your payment region (Visa/Mastercard, issuer country).

Step 3. Act based on the code

do_not_honor

Contact your card issuer's support and ask whether the bank is blocking the transaction. If it's a virtual card, check that online payments and cross-border payments are enabled. Sometimes changing the amount or currency helps if the merchant allows it. Don't make more than 2–3 attempts in a row: frequent declines can lead to a temporary card block.

generic_decline

Check whether the card has expired and whether the limit has been exceeded. Try placing the order again after some time. If the decline repeats, ask your issuer for information about the cause — sometimes the bank sees more than Stripe shows.

insufficient_funds

Top up your balance with a buffer (e.g., 10–20% more than the amount). Keep in mind that some services hold an amount for card verification — it will be returned, but you need enough funds in the balance.

Table: what to check on decline

CodeLikely causeWhat to do
do_not_honorBank fraud prevention, restriction on operation typeContact issuer support, check card settings
generic_declineGeneral decline: limit, data, expiryVerify details, check limits, retry later
insufficient_fundsNot enough fundsTop up balance with a buffer

If the payment didn't go through: common mistakes

  • Many repeated attempts in a row. This increases the risk of blocking the card and the merchant.
  • Ignoring limits. Even with sufficient balance, the daily limit may be exhausted.
  • Incorrect cardholder details. Check how the name is written on the card: first/last name order, transliteration.
  • Trying to pay at a merchant that doesn't accept cards from your region. Check the merchant's website for accepted cards.

FAQ

Can I find out the exact reason for the decline?

Stripe shows the code passed by the bank. Often only the issuer knows the exact reason — contact support.

How many times can I retry the payment?

It's recommended to make no more than 2–3 attempts, then pause and contact support. Frequent declines can lead to a temporary block.

What if the balance is sufficient but the payment still fails?

Check the card limits and settings, and whether the merchant accepts cards from your region. If the problem persists, contact your issuer.

Service names are the property of their respective owners and are mentioned only to describe the payment scenario; VirtCardPay is not affiliated with them.

Payment guides

VirtCardPay

A virtual card in 2 minutes

Pay for subscriptions, AI tools, travel, and international stores. Top up with USDT or TON.

Open in Telegram Learn more about the service →

Sources

This material is for informational purposes only and is not financial advice. Data and service terms may change, so check primary sources before making a payment or investment decision. Mentions of third-party brands and services do not imply official partnership, support, or endorsement by VirtCardPay; partner platforms are marked with a “Partner” badge.
Back