Start with the order status
Before diagnosing Stripe or SecureHold WP, confirm that WooCommerce completed the checkout successfully. A deposit hold cannot be created if the underlying order did not reach the expected status.
- Check the WooCommerce order status. Open the order in the WooCommerce admin and confirm it reached Processing or Completed, depending on how your store is configured. A Pending, Failed or Cancelled order will typically not trigger the deposit workflow.
- Confirm the main payment succeeded. The primary payment through the WooCommerce Stripe Gateway must complete before any deposit logic runs. If the main payment failed, the deposit hold was most likely never attempted.
- Review order notes. WooCommerce logs payment and webhook events in the order notes section. Look for any error messages from Stripe or SecureHold WP that explain what happened during checkout.
This step avoids chasing a Stripe or configuration problem when the real issue is that checkout did not finish correctly on the WooCommerce side.
A missing security deposit is usually caused by a setup, webhook, payment method or timing issue. Start with the WooCommerce order status, then check Stripe, then use the SecureHold WP Health Check to isolate the problem.
Common reasons the deposit was not created
Most cases fall into one of the following categories. Working through this list in order will identify the cause in most situations.
- Stripe is not connected correctly. If the API keys are invalid, expired or pointing to the wrong Stripe account, Stripe calls will silently fail. Confirm the keys in SecureHold WP settings and in the WooCommerce Stripe Gateway settings.
- Test mode and live mode mismatch. Using test API keys on a live site (or live keys on a test site) will cause Stripe requests to fail. Confirm that both SecureHold WP and the Stripe Gateway are in the same mode.
- The payment method does not support authorization holds. Not all Stripe payment methods support pre-authorization holds. If order notes mention a Stripe single-use payment method error, review how the payment method was created and stored before retrying.
- Webhook events are missing or failing. SecureHold WP may rely on Stripe webhook events to confirm hold status. If the webhook is not configured, is pointing to the wrong URL, or is blocked by the server, events will not arrive. Review how to set up a Stripe webhook before retesting the deposit workflow.
- Deposit rules are disabled or misconfigured. If the global deposit amount is set to zero, or if the deposit rule is not enabled for the product or order type involved, no hold will be placed.
- The order is still pending or failed. As described above: if the main payment did not succeed, the deposit workflow does not run.
- Hold creation timing is misaligned. Some configurations place the hold at checkout, others after order confirmation. If the timing setting does not match the order flow, the hold may be attempted at the wrong moment.
Check Stripe and webhook configuration
After confirming the WooCommerce order status, the next step is to verify that Stripe and the webhook are set up correctly.
- Verify your Stripe API keys. In the WooCommerce Stripe Gateway settings, confirm that the publishable and secret keys are correct and belong to the intended Stripe account.
- Confirm test mode or live mode. Both the Stripe Gateway and SecureHold WP should be in the same mode. A mismatch will cause API calls to fail without a clear error in WooCommerce.
- Check that the Stripe webhook exists. In your Stripe Dashboard, under Developers > Webhooks, confirm that a webhook endpoint pointing to your site exists and is active.
- Verify the webhook URL matches your site. If your site URL changed, or if you are running a staging environment, the webhook URL may point to a different server. Stripe events will be delivered to the old URL, not the current one.
- Check for recent webhook errors in Stripe. The Stripe Dashboard shows delivery attempts and error responses for each webhook event. If errors appear, use diagnosing a webhook that is not delivering as your next troubleshooting step.
- Confirm the server is reachable. Maintenance mode, aggressive caching plugins, firewall rules or CDN configurations can block incoming Stripe webhook requests. Test whether your webhook endpoint responds to a direct HTTP request.
Use SecureHold WP Health Check
The SecureHold WP Health Check is the fastest way to identify configuration issues without manually cross-referencing Stripe and WooCommerce settings. Run it before contacting support.
- 1Open the SecureHold WP Health Check from the plugin settings or the WooCommerce admin panel.
- 2Review the Stripe connection section: confirm that the API keys are valid and that the connection test passes.
- 3Check the webhook status if shown: confirm that recent webhook events were delivered successfully and that no errors are reported.
- 4Review the WooCommerce compatibility section: confirm that the Stripe Gateway version and WooCommerce version are within the supported range.
- 5Look at recent deposit events or diagnostic output: the Health Check may list recent hold attempts, errors or skipped events that point directly to the cause.
- 6Place a new test order using a Stripe test card after resolving any flagged issues, and confirm the hold is created correctly before going back to live mode.
Payment method and card limitations
Not every payment method behaves the same way when it comes to authorization holds. This is one of the most common sources of confusion when a deposit is not created.
Authorization behavior depends on the payment method, card network and Stripe configuration. For many standard card payments, uncaptured PaymentIntents are canceled after a set number of days, 7 days by default. The exact authorization window can depend on the payment method, card network and Stripe configuration. Always check current Stripe documentation for the methods you support.
- Not all payment methods support holds. Some Stripe payment methods do not support pre-authorization. If a customer uses one of these methods, Stripe may charge rather than hold, or may decline the pre-authorization entirely.
- Debit cards may behave differently from credit cards. Debit card authorization windows and rules vary by card network and issuing bank. Testing with a credit card test number does not guarantee that all debit cards will behave the same way in production.
- International cards may have different rules. Card networks outside the main Visa and Mastercard programs may have different authorization hold behaviors. Test with the payment methods your customers are most likely to use.
- Always test before going live with a new payment method. Use Stripe test mode with the specific payment method type you intend to support, and confirm that the deposit hold is created as expected before enabling it in production.
Test safely before going live
Reproducing the problem in Stripe test mode is the safest way to confirm both the cause and the fix. Never test deposit behavior directly on a real customer order.
- Switch SecureHold WP and the Stripe Gateway to test mode.
- Place a new WooCommerce order using a Stripe test card (for example, 4242 4242 4242 4242).
- After checkout, confirm the hold appears in the WooCommerce order and in the Stripe test dashboard under PaymentIntents.
- Test the capture flow: capture the hold from the WooCommerce order admin and confirm the funds are settled in Stripe.
- Test the release flow: on a separate order, release the hold and confirm the pending line clears without a charge.
- Test a failure scenario: use a Stripe test card that is configured to decline to confirm your store handles failed holds gracefully.
Once all test scenarios pass, switch back to live mode and place a low-value real order to confirm the behavior in production before enabling it fully.
When to contact support
If the Health Check and the steps above do not resolve the issue, contact SecureHold WP support. To get a faster and more accurate response, include the following information in your support request.
- WooCommerce order ID. The specific order where the deposit was not created.
- Stripe PaymentIntent ID. Found in the WooCommerce order notes or in the Stripe Dashboard. This allows support to look up the exact transaction.
- Health Check output. Copy the full output of the SecureHold WP Health Check, including any warnings or error messages.
- WooCommerce order status. The status shown on the order at the time the deposit should have been created.
- Stripe webhook error if any. The exact error message shown in the Stripe Dashboard webhook delivery log for the relevant event.
- Plugin versions. SecureHold WP version, WooCommerce version and WooCommerce Stripe Gateway version.
- A clear description of what happened. What you expected, what actually happened, and the steps you have already tried.
Diagnose deposit issues faster
SecureHold WP includes Health Check tools to help you identify configuration, webhook and Stripe hold issues without guessing.
FAQ
-
Why was my WooCommerce security deposit not created?
The most common causes are incomplete Stripe setup, missing or failing webhook events, a payment method that does not support authorization holds, a failed or pending order, or misconfigured deposit rules in SecureHold WP. -
Do I need webhooks for WooCommerce security deposits?
Webhook events are often important for reliable payment and deposit workflows. You should verify that Stripe can send events to your site successfully, and that the webhook endpoint is reachable and correctly configured. -
Can a failed WooCommerce order create a deposit hold?
Usually not. If the main checkout payment fails or the order does not reach the expected status in WooCommerce, the deposit workflow may not run. Check the WooCommerce order status and order notes first. -
Can all Stripe payment methods create authorization holds?
No. Authorization behavior depends on the payment method, card network and Stripe configuration. Not every method supports pre-authorization holds. You should test each payment method you plan to accept before enabling it in production. -
What should I send to support?
Include the WooCommerce order ID, the Stripe PaymentIntent ID if available, the full SecureHold WP Health Check output, the webhook error from the Stripe Dashboard if any, your plugin versions (SecureHold WP, WooCommerce, Stripe Gateway) and a clear description of what happened.

