{
  "name": "Stripe decline codes, classified for subscription retry",
  "description": "One record per decline code RecoverFlow classifies. blocked_by_stripe marks the codes Stripe will not execute a retry for until a new payment method is attached. Generated from the same code that runs in the product.",
  "license": "CC0-1.0",
  "generated_by": "scripts/build_decline_dataset.py",
  "source_of_truth": "src/RecoverFlow.Domain/Services/DeclineCodeClassifier.cs",
  "documentation_checked_on": "2026-08-16",
  "record_count": 24,
  "codes": [
    {
      "code": "authentication_required",
      "blocked_by_stripe": true,
      "classification": "hard_decline",
      "requires_card_update": false,
      "recommended_action": "Trigger an authentication flow. The customer can pay once authenticated.",
      "test_card_number": null,
      "guide_url": "https://recoverflow.org/blog/stripe-authentication-required-recovery/",
      "source_url": "https://docs.stripe.com/billing/revenue-recovery/smart-retries#non-retryable-decline-codes",
      "verified_on": "2026-08-16"
    },
    {
      "code": "card_declined",
      "blocked_by_stripe": false,
      "classification": "soft_decline",
      "requires_card_update": false,
      "recommended_action": "Read the decline_code for the reason. card_declined is the error code Stripe returns alongside a decline code, not a decline code itself.",
      "test_card_number": "4000000000000002",
      "guide_url": null,
      "source_url": null,
      "verified_on": null
    },
    {
      "code": "card_velocity_exceeded",
      "blocked_by_stripe": false,
      "classification": "soft_decline",
      "requires_card_update": false,
      "recommended_action": "The customer should contact their issuer or use a different payment method.",
      "test_card_number": null,
      "guide_url": "https://recoverflow.org/blog/stripe-card-velocity-exceeded/",
      "source_url": "https://docs.stripe.com/declines/codes",
      "verified_on": "2026-08-16"
    },
    {
      "code": "do_not_honor",
      "blocked_by_stripe": false,
      "classification": "soft_decline",
      "requires_card_update": false,
      "recommended_action": "The customer needs to contact their card issuer.",
      "test_card_number": null,
      "guide_url": "https://recoverflow.org/blog/do-not-honor-stripe-decline/",
      "source_url": "https://docs.stripe.com/declines/codes",
      "verified_on": "2026-08-16"
    },
    {
      "code": "expired_card",
      "blocked_by_stripe": false,
      "classification": "soft_decline",
      "requires_card_update": true,
      "recommended_action": "The customer needs to use a different card.",
      "test_card_number": "4000000000000069",
      "guide_url": "https://recoverflow.org/blog/expired-card-stripe-retries/",
      "source_url": "https://docs.stripe.com/declines/codes",
      "verified_on": "2026-08-16"
    },
    {
      "code": "fraudulent",
      "blocked_by_stripe": false,
      "classification": "hard_decline",
      "requires_card_update": false,
      "recommended_action": "Present as a generic decline. Do not disclose the reason.",
      "test_card_number": null,
      "guide_url": "https://recoverflow.org/blog/stripe-fraudulent-decline-code/",
      "source_url": "https://docs.stripe.com/declines/codes",
      "verified_on": "2026-08-16"
    },
    {
      "code": "generic_decline",
      "blocked_by_stripe": false,
      "classification": "soft_decline",
      "requires_card_update": false,
      "recommended_action": "The customer needs to contact their card issuer.",
      "test_card_number": "4000000000000002",
      "guide_url": "https://recoverflow.org/blog/stripe-generic-decline-code/",
      "source_url": "https://docs.stripe.com/declines/codes",
      "verified_on": "2026-08-16"
    },
    {
      "code": "highest_risk_level",
      "blocked_by_stripe": true,
      "classification": "hard_decline",
      "requires_card_update": false,
      "recommended_action": "Present as a generic decline. Do not disclose the reason.",
      "test_card_number": null,
      "guide_url": null,
      "source_url": "https://docs.stripe.com/billing/revenue-recovery/smart-retries#non-retryable-decline-codes",
      "verified_on": "2026-08-16"
    },
    {
      "code": "incorrect_cvc",
      "blocked_by_stripe": false,
      "classification": "soft_decline",
      "requires_card_update": true,
      "recommended_action": "The customer should retry with the correct CVC.",
      "test_card_number": "4000000000000127",
      "guide_url": "https://recoverflow.org/blog/stripe-incorrect-cvc-decline/",
      "source_url": "https://docs.stripe.com/declines/codes",
      "verified_on": "2026-08-16"
    },
    {
      "code": "incorrect_number",
      "blocked_by_stripe": true,
      "classification": "hard_decline",
      "requires_card_update": true,
      "recommended_action": "The customer should retry with the correct card number.",
      "test_card_number": "4242424242424241",
      "guide_url": "https://recoverflow.org/blog/stripe-incorrect-number-vs-invalid-number/",
      "source_url": "https://docs.stripe.com/billing/revenue-recovery/smart-retries#non-retryable-decline-codes",
      "verified_on": "2026-08-16"
    },
    {
      "code": "insufficient_funds",
      "blocked_by_stripe": false,
      "classification": "soft_decline",
      "requires_card_update": false,
      "recommended_action": "The customer should use an alternative payment method.",
      "test_card_number": "4000000000009995",
      "guide_url": "https://recoverflow.org/blog/is-insufficient-funds-a-hard-decline/",
      "source_url": "https://docs.stripe.com/declines/codes",
      "verified_on": "2026-08-16"
    },
    {
      "code": "invalid_expiry_month",
      "blocked_by_stripe": false,
      "classification": "soft_decline",
      "requires_card_update": true,
      "recommended_action": "The customer should retry with the correct expiry date.",
      "test_card_number": null,
      "guide_url": null,
      "source_url": "https://docs.stripe.com/declines/codes",
      "verified_on": "2026-08-16"
    },
    {
      "code": "invalid_expiry_year",
      "blocked_by_stripe": false,
      "classification": "soft_decline",
      "requires_card_update": true,
      "recommended_action": "The customer should retry with the correct expiry date.",
      "test_card_number": null,
      "guide_url": null,
      "source_url": "https://docs.stripe.com/declines/codes",
      "verified_on": "2026-08-16"
    },
    {
      "code": "lost_card",
      "blocked_by_stripe": true,
      "classification": "hard_decline",
      "requires_card_update": true,
      "recommended_action": "Present as a generic decline. Do not disclose the reason.",
      "test_card_number": "4000000000009987",
      "guide_url": "https://recoverflow.org/blog/stripe-lost-card-stolen-card-declines/",
      "source_url": "https://docs.stripe.com/billing/revenue-recovery/smart-retries#non-retryable-decline-codes",
      "verified_on": "2026-08-16"
    },
    {
      "code": "merchant_blacklist",
      "blocked_by_stripe": false,
      "classification": "hard_decline",
      "requires_card_update": false,
      "recommended_action": "Present as a generic decline. Do not disclose the reason.",
      "test_card_number": null,
      "guide_url": null,
      "source_url": "https://docs.stripe.com/declines/codes",
      "verified_on": "2026-08-16"
    },
    {
      "code": "pickup_card",
      "blocked_by_stripe": true,
      "classification": "hard_decline",
      "requires_card_update": true,
      "recommended_action": "Present as a generic decline. The customer should contact their issuer.",
      "test_card_number": null,
      "guide_url": "https://recoverflow.org/blog/stripe-pickup-card-vs-restricted-card/",
      "source_url": "https://docs.stripe.com/billing/revenue-recovery/smart-retries#non-retryable-decline-codes",
      "verified_on": "2026-08-16"
    },
    {
      "code": "processing_error",
      "blocked_by_stripe": false,
      "classification": "soft_decline",
      "requires_card_update": false,
      "recommended_action": "Attempt the payment again. If it persists, retry later.",
      "test_card_number": "4000000000000119",
      "guide_url": "https://recoverflow.org/blog/stripe-processing-error-decline/",
      "source_url": "https://docs.stripe.com/declines/codes",
      "verified_on": "2026-08-16"
    },
    {
      "code": "restricted_card",
      "blocked_by_stripe": false,
      "classification": "hard_decline",
      "requires_card_update": false,
      "recommended_action": "Present as a generic decline. The customer should contact their issuer.",
      "test_card_number": null,
      "guide_url": "https://recoverflow.org/blog/stripe-pickup-card-vs-restricted-card/",
      "source_url": "https://docs.stripe.com/declines/codes",
      "verified_on": "2026-08-16"
    },
    {
      "code": "revocation_of_all_authorizations",
      "blocked_by_stripe": true,
      "classification": "hard_decline",
      "requires_card_update": false,
      "recommended_action": "The customer needs to contact their card issuer.",
      "test_card_number": null,
      "guide_url": null,
      "source_url": "https://docs.stripe.com/billing/revenue-recovery/smart-retries#non-retryable-decline-codes",
      "verified_on": "2026-08-16"
    },
    {
      "code": "revocation_of_authorization",
      "blocked_by_stripe": true,
      "classification": "hard_decline",
      "requires_card_update": false,
      "recommended_action": "The customer needs to contact their card issuer.",
      "test_card_number": null,
      "guide_url": null,
      "source_url": "https://docs.stripe.com/billing/revenue-recovery/smart-retries#non-retryable-decline-codes",
      "verified_on": "2026-08-16"
    },
    {
      "code": "security_violation",
      "blocked_by_stripe": false,
      "classification": "hard_decline",
      "requires_card_update": false,
      "recommended_action": "The customer needs to contact their card issuer.",
      "test_card_number": null,
      "guide_url": null,
      "source_url": "https://docs.stripe.com/declines/codes",
      "verified_on": "2026-08-16"
    },
    {
      "code": "stolen_card",
      "blocked_by_stripe": true,
      "classification": "hard_decline",
      "requires_card_update": true,
      "recommended_action": "Present as a generic decline. Do not disclose the reason.",
      "test_card_number": "4000000000009979",
      "guide_url": "https://recoverflow.org/blog/stripe-lost-card-stolen-card-declines/",
      "source_url": "https://docs.stripe.com/billing/revenue-recovery/smart-retries#non-retryable-decline-codes",
      "verified_on": "2026-08-16"
    },
    {
      "code": "transaction_not_allowed",
      "blocked_by_stripe": true,
      "classification": "hard_decline",
      "requires_card_update": false,
      "recommended_action": "The customer needs to contact their card issuer.",
      "test_card_number": null,
      "guide_url": "https://recoverflow.org/blog/stripe-transaction-not-allowed-decline/",
      "source_url": "https://docs.stripe.com/billing/revenue-recovery/smart-retries#non-retryable-decline-codes",
      "verified_on": "2026-08-16"
    },
    {
      "code": "try_again_later",
      "blocked_by_stripe": false,
      "classification": "soft_decline",
      "requires_card_update": false,
      "recommended_action": "Attempt the payment again. If it persists the customer should contact their issuer.",
      "test_card_number": null,
      "guide_url": "https://recoverflow.org/blog/stripe-try-again-later-decline/",
      "source_url": "https://docs.stripe.com/declines/codes",
      "verified_on": "2026-08-16"
    }
  ]
}
