Stripe Decline Code · Glossary
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.
What It Means
What It 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
Why It Happens
What NOT to Do
What NOT to Do
✕ 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
Retry Timing
approve_with_id follows a fast-retry-first, bank-contact-second structure — with a tighter retry window than most soft declines.
Recovery Benchmark
Recovery Benchmark
| Metric | Result |
|---|---|
| Overall recovery rate | 40–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 + retry | 20–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
At Scale
Automated
Manual Escalation
FAQs
FAQs
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.
What to do next
You are here
approve_with_id
Decline code reference
Check recoverability
Stripe Failure Lookup
See what's recoverable — and what isn't →
Then
Sign up for Recurflux
Automate recovery for every decline code →
Before you retry
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.
Stop leaving revenue on the table
Recurflux handles code-specific retry scheduling, adaptive dunning, and dispute intelligence across all 30 Stripe decline codes. Connect in under 5 minutes.