Prompt
Why are my card payments getting marked as failed after authorization?
Latest observation
Oct 15, 2026
OpenAI APIWeb search: off
If a card payment is authorized but later gets marked as failed, it usually means the payment made it through the initial card check, but something went wrong before capture/settlement or during a later risk/processor step.
Common causes:
- Authorization approved, capture failed
- The card issuer reserved funds, but your system or payment processor couldn’t complete the capture.
- Delayed fraud/risk review
- The payment may pass initial auth, then be rejected by fraud checks, velocity rules, AVS/CVV review, or 3D Secure requirements.
- Issuer reverses the auth
- The bank can later decline the transaction or void the authorization.
- Expired or invalid auth window
- Some authorizations expire if not captured quickly enough.
- Partial/unsupported capture flow
- If you’re doing manual capture, the amount, currency, or capture timing may not match the original authorization.
- Processor/network issue
- Timeouts or errors between your app and the processor can make a successful auth look failed in your system.
- Order state mismatch
- Your backend may mark the payment failed if webhook events arrive out of order or aren’t handled correctly.
What to check:
- Payment lifecycle logs
- Look at the auth, capture, void, and refund events separately.
- Processor/PSP response codes
- Find the exact decline/error after auth.
- Webhook delivery
- See whether capture success/failure webhooks are being received and processed correctly.
- Risk/fraud settings
- Check whether post-auth review or rules are canceling the payment.
- Capture timing
- Confirm you’re capturing within the auth validity window.
- Amount/currency consistency
- Make sure capture matches the authorized transaction rules.
- Idempotency and retries
- Duplicate or failed retries can cause confusing “failed” states.
If you want, I can help you diagnose it more precisely if you share:
- your payment provider,
- whether you use automatic or manual capture,
- a sample error/status code,
- and the sequence of events you’re seeing.