← 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 result — The 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 level — The 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 code — The 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 review — The 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 billing — On 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.