Duplicate Transaction
What This Means
The bank detected this as a duplicate of a recent transaction and declined it to protect the cardholder from being charged twice. This can happen when your system sends the same charge request multiple times. SaaS businesses should verify their billing logic.
Retrying will likely fail again. The customer needs to update their payment method or contact their bank.
Common Causes
- 1Application code submitted the same payment request multiple times due to a bug or timeout retry
- 2Customer double-clicked the pay button before the first request completed
- 3Webhook handler processed the same event twice, triggering duplicate charges
Recovery Tactics
- 1Check your Stripe dashboard to verify if the first charge was already successful
- 2Implement idempotency keys in your Stripe API calls to prevent duplicates
- 3Add client-side button disabling after the first click to prevent double submissions
- 4Review webhook processing logic for duplicate event handling
How healthy is your Stripe account?
Get a free churn health report. Find pending cancellations, failed payments, and expiring cards putting your MRR at risk.
Run Free AuditRelated Decline Codes
FAQ
Was the customer actually charged?
Check your Stripe dashboard for successful charges. The duplicate decline means the second attempt was blocked, but the first may have gone through. Only retry if you confirm no successful charge exists.
How do I prevent duplicate transactions?
Use Stripe idempotency keys on every API request. These ensure that even if your code sends the same request twice, Stripe will only process it once. Also disable submit buttons after the first click.
How healthy is your Stripe account?
Get a free churn health report. Find pending cancellations, failed payments, and expiring cards putting your MRR at risk.
Run Free Audit