← Decline Codes
Soft Decline

Stripe Decline Code · Glossary

approve_with_id

approve_with_id fires when the issuing bank's authorization system could not complete an automatic approval for the transaction — the bank's system processed the request but returned a conditional response indicating the payment requires additional identification or manual review before it can be fully authorized.

Recoverable·40–60%·Updated May 2026

What It Means

What approve_with_id actually means.

approve_with_id fires when the issuing bank's authorization system could not complete an automatic approval for the transaction — the bank's system processed the request but returned a conditional response indicating the payment requires additional identification or manual review before it can be fully authorized. It sits in a unique middle ground in the decline taxonomy: not a hard rejection, not a clean soft decline — it is a manual-review-pending authorization state where the bank's automated system has stepped back and flagged the charge for human or system-level follow-up at the issuer.

Not sure if this code is recoverable for your specific situation? Use the Stripe Failure Lookup →

Why It Happens

The root causes.

  • 1Bank's automated authorization system returned an inconclusive resultThe issuer's real-time authorization engine evaluated the transaction but could not reach a definitive approve or deny decision — the charge sits in a pending state awaiting resolution
  • 2Cardholder identity verification required at issuer levelThe bank requires additional identification to be presented before authorizing the transaction — typically relevant in physical POS environments but occasionally surfacing in CNP and subscription contexts for high-risk or first-time merchant interactions
  • 3Issuer system returned an ambiguous authorization codeThe network-level authorization code 08 ("honor with identification") maps to approve_with_id — the card network is signaling that the transaction could be approved if identification is verified at the point of sale
  • 4Transaction flagged for manual issuer reviewThe bank's risk engine escalated this specific charge to a manual review queue rather than returning an automatic approve or decline — common on high-value charges, first subscription charges, or charges from merchant categories with elevated issuer scrutiny
  • 5Rare edge case in recurring billingOn subscription billing specifically, approve_with_id surfaces infrequently as a transient authorization edge case — the charge parameters passed the initial fraud checks but stalled in the bank's authorization pipeline

What NOT to Do

Common mistakes that make it worse.

Don't treat it as a permanent hard decline

approve_with_id explicitly indicates the payment can be authorized — the bank has not rejected it. Routing it into your hard-decline workflow (zero retries, immediate payment method switch email) discards a recoverable authorization state prematurely.

Don't wait long before retrying

Unlike try_again_later where spacing retries is critical, approve_with_id is an inconclusive state — the bank's manual review or system resolution typically completes within hours. Waiting multiple days before retrying allows the authorization window to close and reduces recovery probability.

Don't send an alarming customer email on the first occurrence

The first retry attempt resolves approve_with_id in the majority of cases — it is frequently a transient authorization pipeline state, not a cardholder-action-required event. Sending a payment failure email before attempting a retry generates unnecessary customer anxiety over a payment that may succeed on the very next attempt.

Retry Timing

Optimal retry schedule.

approve_with_id follows a fast-retry-first, bank-contact-second structure — with a tighter retry window than most soft declines.

Recovery Benchmark

What good looks like.

MetricResult
Overall recovery rate40–60%
Recovery on Silent Retry 1 (1–3 hrs)35–45% of all occurrences
Recovery on Silent Retry 2 (24 hrs)+10–15% additional
Recovery via bank contact + retry20–30% of remaining cases
Recovery via alternate payment method+10–12% additional lift
Recovery with immediate retry (< 30 mins)15–20% — authorization window may still be open

A 50–55% overall recovery rate is achievable with a fast 1–3 hour silent retry as the primary action. The key insight is that approve_with_id behaves like a hybrid between try_again_later (transient, silent-retry-first) and call_issuer (bank-contact-required as fallback) — your workflow must sequence them in exactly that order to maximize recovery.

At Scale

How to handle it at scale.

Automated

  • Webhook trigger: invoice.payment_failed → check failure_code === 'approve_with_id' → route to a fast-retry soft-decline track — not a hard decline track, not a standard dunning sequence
  • Silent Retry 1 at 1–3 hours: Fire a background charge attempt within 1–3 hours — this captures the transient authorization pipeline resolutions that make up the majority of approve_with_id occurrences; no customer notification at this stage
  • Silent Retry 2 at 24 hours: If Retry 1 fails, schedule a second silent attempt at the 24-hour mark — still no customer email
  • Email Day 2 — bank contact prompt (only if both silent retries fail): Subject: "Quick action needed — your bank needs to confirm your payment" — body explains the bank was unable to automatically process the charge and asks the customer to call the number on the back of their card; include a clear script: "Please confirm authorization for a recurring payment to [Company Name] for [amount]"
  • Confirmation-gated Retry 3: Build a one-click "I've contacted my bank" confirmation link in the Day 2 email → fires an immediate retry upon click → if it fails, auto-route to alternate payment method flow
  • Alternate method parallel track — Day 3: Surface PayPal, bank transfer, and UPI alongside the bank contact prompt — customers who can't resolve the authorization issue quickly need a parallel exit path

Manual Escalation

  • High-ACV accounts: If both silent retries fail, personal human outreach on Day 2 — warm message from a CSM with bank call script included; high-value accounts warrant the personal touch
  • Cluster monitoring: If approve_with_id spikes across multiple customers from the same issuer simultaneously, it may indicate a bank-side authorization system issue — monitor and schedule a batch retry for the affected cohort once the issuer system resolves rather than triggering individual customer outreach
  • Annual plan customers: Any approve_with_id on an annual charge warrants a proactive Day 1 personal notification alongside the silent retry — customers who committed to a full year deserve more than automated silence while their authorization pends

FAQs

Frequently asked questions.

What does the Stripe approve_with_id decline code mean?

approve_with_id means the issuing bank's authorization system could not complete an automatic approval for the transaction. The bank has not rejected the payment — it has returned an inconclusive authorization state requiring additional identification or manual review before a final decision is made. It is recoverable through fast silent retries and, if needed, a bank contact step.

What are the most common causes of an approve_with_id error in Stripe?

Common causes include the bank's automated authorization system returning an inconclusive result, a network-level 'honor with identification' code (code 08) requiring identity verification, the transaction being escalated to a manual issuer review queue, a transient stall in the bank's authorization pipeline on high-value or first-time merchant charges, and rare edge cases in recurring subscription billing authorization.

Should I retry a payment after an approve_with_id decline?

Yes — retry quickly. Schedule a silent retry within 1–3 hours of the failure, which resolves 35–45% of all occurrences. Follow with a second silent retry at 24 hours. Only if both silent retries fail should you prompt the customer to contact their bank. Limit total retries to 3 attempts.

Should I notify my customer immediately when Stripe returns approve_with_id?

No. Attempt two silent retries first — at 1–3 hours and 24 hours. The majority of approve_with_id occurrences resolve silently through fast retries without any customer awareness. Only send a customer-facing email if both silent retries fail, and even then frame it as a bank confirmation step rather than a payment failure.

What is the recovery rate for Stripe approve_with_id failures?

Overall recovery rates are 40–60%. The first silent retry within 1–3 hours resolves 35–45% of all occurrences. A second 24-hour retry adds 10–15% more. Bank contact after both silent retries recovers an additional 20–30% of remaining cases. Alternate payment method options provide a further 10–12% lift.

Before you retry

Most approve_with_id failures are retried on the wrong schedule — which recovers the payment about 30% of the time. The other 70% leaves permanently. See what this code is actually costing at your MRR before deciding how to handle it.

See what approve_with_id costs me →

Stop leaving revenue on the table

approve_with_id is recoverable. Most teams don't have the retry logic to prove it.

Recurflux handles code-specific retry scheduling, adaptive dunning, and dispute intelligence across all 30 Stripe decline codes. Connect in under 5 minutes.