Error codes
Soft decline
Stripe
duplicate_transaction
A transaction with identical amount and credit card information was submitted very recently.
What does duplicate_transaction mean?
The duplicate_transaction decline code is returned when the card network detects that a transaction with identical amount, merchant, and card details has been submitted very recently. This is a protective measure designed to prevent merchants from accidentally charging customers twice.
Is it a soft or hard decline?
Classified as a soft decline. The customer's card is valid and the charge is simply being blocked as a safety measure — not refused outright.
Common root causes
Integration bug causing the same charge to be submitted twice
Retry logic firing before the original authorization result returned
Customer clicking "submit" multiple times during checkout
Webhook handling creating duplicate charge attempts
Race conditions in subscription billing systems
Recommended recovery steps
Check if a charge already succeeded. The duplicate detection likely indicates the first charge actually went through — verify in your Stripe dashboard before attempting recovery.
If the first charge failed, wait 10+ minutes before retrying to exit the duplicate detection window.
Audit your retry logic for race conditions or double-firing events.
Use idempotency keys on Stripe API calls to prevent accidental duplicates.
How FlyCode handles duplicate_transaction
FlyCode's retry engine is designed to prevent duplicate charges by default. Each recovery attempt uses proper idempotency keys and spaced timing that respects network deduplication windows. When duplicate_transaction does occur, FlyCode first verifies whether the original charge succeeded before taking any further recovery action — ensuring customers are never accidentally double-charged.
What does duplicate_transaction mean?
The duplicate_transaction decline code is returned when the card network detects that a transaction with identical amount, merchant, and card details has been submitted very recently. This is a protective measure designed to prevent merchants from accidentally charging customers twice.
Is it a soft or hard decline?
Classified as a soft decline. The customer's card is valid and the charge is simply being blocked as a safety measure — not refused outright.
Common root causes
Integration bug causing the same charge to be submitted twice
Retry logic firing before the original authorization result returned
Customer clicking "submit" multiple times during checkout
Webhook handling creating duplicate charge attempts
Race conditions in subscription billing systems
Recommended recovery steps
Check if a charge already succeeded. The duplicate detection likely indicates the first charge actually went through — verify in your Stripe dashboard before attempting recovery.
If the first charge failed, wait 10+ minutes before retrying to exit the duplicate detection window.
Audit your retry logic for race conditions or double-firing events.
Use idempotency keys on Stripe API calls to prevent accidental duplicates.
How FlyCode handles duplicate_transaction
FlyCode's retry engine is designed to prevent duplicate charges by default. Each recovery attempt uses proper idempotency keys and spaced timing that respects network deduplication windows. When duplicate_transaction does occur, FlyCode first verifies whether the original charge succeeded before taking any further recovery action — ensuring customers are never accidentally double-charged.
What does duplicate_transaction mean?
The duplicate_transaction decline code is returned when the card network detects that a transaction with identical amount, merchant, and card details has been submitted very recently. This is a protective measure designed to prevent merchants from accidentally charging customers twice.
Is it a soft or hard decline?
Classified as a soft decline. The customer's card is valid and the charge is simply being blocked as a safety measure — not refused outright.
Common root causes
Integration bug causing the same charge to be submitted twice
Retry logic firing before the original authorization result returned
Customer clicking "submit" multiple times during checkout
Webhook handling creating duplicate charge attempts
Race conditions in subscription billing systems
Recommended recovery steps
Check if a charge already succeeded. The duplicate detection likely indicates the first charge actually went through — verify in your Stripe dashboard before attempting recovery.
If the first charge failed, wait 10+ minutes before retrying to exit the duplicate detection window.
Audit your retry logic for race conditions or double-firing events.
Use idempotency keys on Stripe API calls to prevent accidental duplicates.
How FlyCode handles duplicate_transaction
FlyCode's retry engine is designed to prevent duplicate charges by default. Each recovery attempt uses proper idempotency keys and spaced timing that respects network deduplication windows. When duplicate_transaction does occur, FlyCode first verifies whether the original charge succeeded before taking any further recovery action — ensuring customers are never accidentally double-charged.
Understanding This Decline Code
Extended content body
Frequently Asked Questions
What does duplicate_transaction mean?
Should I retry a duplicate_transaction decline?
Not immediately. First verify whether the earlier charge actually succeeded. If it did not, wait at least 10 minutes before retrying to exit the network's duplicate detection window.
How does FlyCode prevent duplicate_transaction errors?
FlyCode's retry engine includes deduplication logic that prevents accidental re-submission of identical charges. This avoids duplicate_transaction errors entirely while still recovering genuinely separate failed payments.

