What the single-use payment method error means
In Stripe, a payment method can be single-use or reusable depending on how it was created, attached and intended to be used. A single-use payment method is designed for exactly one transaction. If a workflow attempts to use it again after that transaction, or use it in a way it was not originally authorized for, Stripe will return an error.
In the context of WooCommerce security deposit workflows, this error can appear when the system tries to create a subsequent action (such as an additional authorization or capture) against a payment method that was not set up to allow it.
- A payment method is not always reusable. The reusability of a payment method depends on how it was created during checkout and whether it was attached to a Stripe Customer object for future use.
- The error is not caused by the card being declined. This is a configuration or workflow error, not a card issue. The customer’s card itself is fine. The problem is how the payment method is being referenced.
- Fixing it requires reviewing the workflow, not asking the customer to retry. Asking the customer to re-enter their card will not resolve a configuration mismatch. The fix is in how the payment method is created, attached and stored.
A single-use payment method error usually means the payment method cannot be reused the way the workflow expects. The fix depends on how the payment method was created, attached and intended to be used during checkout.
Why this can happen in WooCommerce deposit workflows
Security deposit workflows typically involve more than one Stripe action for the same order: the main payment and a separate deposit hold, or a capture or release action after checkout. If the security deposit is not being created, this kind of payment method error is one possible cause to check.
- Payment method not saved for later use. If the checkout did not save the payment method against a Stripe Customer, any attempt to reference it after the initial transaction will fail.
- Customer object missing or mismatched. Stripe ties reusable payment methods to a Customer object. If the customer was not created or matched correctly during checkout, the payment method cannot be reused.
- SetupIntent not created when required. Some workflows need a SetupIntent to properly save and confirm a payment method for future use. If this step was skipped, the payment method may be limited to one transaction.
- PaymentIntent created for one-time use. If the PaymentIntent was configured with setup_future_usage unset or set to a value that does not allow reuse, subsequent actions using the same method will fail.
- Stripe Gateway or plugin configuration mismatch. Different versions of the WooCommerce Stripe Gateway or SecureHold WP may handle payment method creation differently. A configuration mismatch between plugin versions can produce this error.
- Test mode and live mode objects mixed. A payment method or customer created in test mode cannot be used in live mode, and vice versa. This is a common mistake when moving from a test environment to production.
What to check first
Before making any changes, gather information about the failed order and its Stripe objects. This diagnostic process prevents making the wrong fix.
- 1Confirm whether the WooCommerce order payment succeeded. Check the order status and order notes for any Stripe error messages.
- 2Open the Stripe Dashboard and find the PaymentIntent for the order. Review its status, the payment method used and any error messages attached to it.
- 3Check whether the payment method is attached to a Stripe Customer. In the Stripe Dashboard, look at the Customer object associated with the order and confirm the payment method appears there.
- 4Confirm test mode or live mode consistency. Verify that the order, the PaymentIntent, the Customer and the payment method all belong to the same Stripe environment.
- 5Review the WooCommerce Stripe Gateway settings. Confirm that the save payment methods option is enabled if your workflow requires reusable payment methods.
- 6Run the SecureHold WP Health Check to identify any configuration issues that may be contributing to the error.
- 7Re-test with a fresh order in test mode after making any configuration changes, before applying them to production.
PaymentIntent vs SetupIntent
Understanding the difference between PaymentIntents and SetupIntents helps clarify why this error occurs and what may need to change.
- A PaymentIntent manages a payment. It handles the full flow: authorization, capture and settlement. It is used for charging the customer during checkout.
- A SetupIntent saves a payment method. It authenticates and saves a customer’s card for future use without immediately charging them. It is used when you need to store a payment method for a later transaction.
- Deposit workflows may need both. In some configurations, a SetupIntent or a PaymentIntent with setup_future_usage set correctly is needed to ensure the payment method can be referenced again for the deposit action after checkout.
- SetupIntents are not always required. Whether a SetupIntent is needed depends on your checkout flow, your WooCommerce Stripe Gateway configuration and how SecureHold WP interacts with the payment process. Check the plugin documentation rather than assuming this is always the cause.
Do not try to force-reuse a payment method that Stripe has marked as single-use. Instead, review how the payment method is created, attached and intended to be used. Forcing a reuse will continue to fail and will not resolve the underlying configuration issue.
How to fix the issue safely
The right fix depends on the specific cause identified in the diagnostic steps above. These are the most common resolutions.
- Enable save payment methods in the Stripe Gateway. If your workflow requires a reusable payment method and this setting is disabled, enabling it is often the first fix to try.
- Verify the customer ID is being set correctly. Check that your checkout flow creates or retrieves the Stripe Customer object for each order and attaches the payment method to it.
- Confirm test mode and live mode consistency. If you moved from test to production, re-create all Stripe objects in live mode. Test mode payment methods and customers cannot be used in live mode.
- Re-test with a complete fresh order. After making configuration changes, do not attempt to fix existing affected orders by retrying the same payment method. Place a new test order to confirm the flow works end to end.
- Do not modify a live site without a backup. Before changing any plugin configuration on a production site, ensure you have a recent backup and a way to revert if needed.
- Contact support with diagnostic details if the cause is unclear. If you cannot identify the cause from the steps above, contact SecureHold WP support with the relevant order and Stripe identifiers.
How SecureHold WP helps diagnose it
SecureHold WP provides several tools that make diagnosing payment method errors faster and more reliable.
- Health Check. The built-in Health Check verifies Stripe connectivity, API key validity, webhook delivery and configuration status. It can surface mismatches that contribute to payment method errors.
- Deposit status on the order screen. The hold status, Stripe identifiers and recent actions are visible directly on the WooCommerce order. This reduces the need to cross-reference the Stripe Dashboard for basic diagnostics.
- Faster support with structured diagnostics. When contacting support, the Health Check output and order-level Stripe identifiers allow the support team to identify the cause more quickly.
Troubleshoot Stripe deposit errors faster
SecureHold WP gives WooCommerce stores clearer deposit status, diagnostics and safer Stripe hold workflows.
FAQ
-
What does Stripe single-use payment method mean?
A single-use payment method can only be used for one transaction. If a workflow attempts to use it again, such as for a second authorization or a deposit action after checkout, Stripe will return an error. This is a configuration issue, not a card problem. -
Why does this happen in WooCommerce?
It usually happens when the payment method was not saved against a Stripe Customer during checkout, when a SetupIntent was not created for a workflow that requires future use, or when there is a mismatch between test mode and live mode objects. -
Is a SetupIntent always required?
Not necessarily. Whether a SetupIntent is required depends on your checkout flow, your WooCommerce Stripe Gateway configuration and how SecureHold WP is set up. Check the plugin documentation for your specific setup before assuming this is the cause. -
Can I fix this without asking the customer to pay again?
It depends on the cause. In many cases, correcting the configuration and placing a new order is the safest path. Attempting to force-reuse a payment method Stripe has marked as single-use will continue to fail. Do not retry the same method without first identifying and fixing the root cause. -
What information should I send to support?
Include the WooCommerce order ID, the Stripe PaymentIntent ID or error message, the payment method ID if available, whether you are in test or live mode, your plugin versions (SecureHold WP, WooCommerce, Stripe Gateway) and a clear description of what happened and what you have already tried.

