How to place a hold on a customer’s payment method and handle delayed subscriptions
This guide explains how to place a hold on a customer’s payment method, which is particularly useful when you need to verify something (like a prescription approval) before charging the customer.
A payment hold:
You will need to manually release the hold on the user’s card at a later date to complete the payment.
This is not handled by Embeddables, since it happens at a later stage when the user is no longer interacting with the Embeddable.
Stripe only supports placing a hold on one-time payments, not recurring payments.
To achieve the effect of a hold on a recurring payment, you’ll need to use a combination of a one-time payment and a delayed subscription, as explained below.
A common use case for payment holds is when you need to verify a prescription before charging the customer. Here’s how this typically works:
This approach ensures that:
Set up the one-time payment hold
Handle the prescription approval
When you place a hold on a payment, Stripe automatically creates a customer record and stores the payment method. This means you can later attach a subscription to this customer without requiring them to re-enter their payment details.
Clear Communication:
Error Handling:
Subscription Management:
For more information on how placing a hold works in Stripe, see the Stripe documentation.
Can't I just place a hold on the subscription itself?
No, Stripe does not support placing holds on subscriptions. This is a limitation of Stripe’s API. The only way to place a hold on a payment is to use a one-time payment, which is why we recommend the combination of a one-time payment hold followed by a delayed subscription.
Why not cancel the on-hold payment and replace it with a subscription that starts straight away?
This approach isn’t recommended because there can be a delay in processing the refund from the on-hold payment. During this time, the customer might not have enough funds available to cover both the refund and the new subscription charge. This could lead to failed payments and a poor customer experience.
What if I just collect card details at checkout?
This is a viable approach, and would be simpler because it would enable you to begin a regular subscription as soon as the prescription is approved.
However, this wouldn’t guarantee that the customer has sufficient funds to cover the subscription.
Can Embeddables handle the release of funds when we're ready to take the payment?
No, Embeddables cannot handle the release of funds. This needs to be handled by your backend system when you’re ready to take the payment. This is because the release of funds typically happens after the user has completed their interaction with the Embeddable (e.g., after prescription approval).
Can Embeddables handle setting up the subscription for me?
We recommend that you handle the subscription setup in your own backend system. This is because if Embeddables were to set up the subscription for you, the 30-day delay would begin at checkout, rather than when the funds are relased and the customer’s first month begins.
When you release the hold on the payment, we recommend that you also create the subscription with a 30-day delay using Stripe’s API.
Do I need to collect the customer's payment details again when setting up the subscription?
No, you don’t need to collect the payment details again. When you place a hold on a payment, Stripe automatically creates a customer record and stores the payment method. You can use this same payment method when creating the subscription.
What happens if the prescription is not approved?
If the prescription is not approved, you should cancel the hold on the payment. The customer will not be charged, and no subscription will be created.
Can I use this approach for other types of verification, not just prescriptions?
Yes, this approach can be used for any scenario where you need to verify something before charging the customer. The same principles apply - place a hold on a one-time payment, verify the necessary information, then release the hold and set up the subscription when ready.
Why use a delayed subscription instead of a free trial?
While both approaches can achieve a similar result, delaying the subscription’s first invoice is generally preferred over using a free trial. This is because:
Stripe supports this through the billing_cycle_anchor
parameter, which lets you set a future date for the first full invoice. This can be combined with prorations if needed.
How to place a hold on a customer’s payment method and handle delayed subscriptions
This guide explains how to place a hold on a customer’s payment method, which is particularly useful when you need to verify something (like a prescription approval) before charging the customer.
A payment hold:
You will need to manually release the hold on the user’s card at a later date to complete the payment.
This is not handled by Embeddables, since it happens at a later stage when the user is no longer interacting with the Embeddable.
Stripe only supports placing a hold on one-time payments, not recurring payments.
To achieve the effect of a hold on a recurring payment, you’ll need to use a combination of a one-time payment and a delayed subscription, as explained below.
A common use case for payment holds is when you need to verify a prescription before charging the customer. Here’s how this typically works:
This approach ensures that:
Set up the one-time payment hold
Handle the prescription approval
When you place a hold on a payment, Stripe automatically creates a customer record and stores the payment method. This means you can later attach a subscription to this customer without requiring them to re-enter their payment details.
Clear Communication:
Error Handling:
Subscription Management:
For more information on how placing a hold works in Stripe, see the Stripe documentation.
Can't I just place a hold on the subscription itself?
No, Stripe does not support placing holds on subscriptions. This is a limitation of Stripe’s API. The only way to place a hold on a payment is to use a one-time payment, which is why we recommend the combination of a one-time payment hold followed by a delayed subscription.
Why not cancel the on-hold payment and replace it with a subscription that starts straight away?
This approach isn’t recommended because there can be a delay in processing the refund from the on-hold payment. During this time, the customer might not have enough funds available to cover both the refund and the new subscription charge. This could lead to failed payments and a poor customer experience.
What if I just collect card details at checkout?
This is a viable approach, and would be simpler because it would enable you to begin a regular subscription as soon as the prescription is approved.
However, this wouldn’t guarantee that the customer has sufficient funds to cover the subscription.
Can Embeddables handle the release of funds when we're ready to take the payment?
No, Embeddables cannot handle the release of funds. This needs to be handled by your backend system when you’re ready to take the payment. This is because the release of funds typically happens after the user has completed their interaction with the Embeddable (e.g., after prescription approval).
Can Embeddables handle setting up the subscription for me?
We recommend that you handle the subscription setup in your own backend system. This is because if Embeddables were to set up the subscription for you, the 30-day delay would begin at checkout, rather than when the funds are relased and the customer’s first month begins.
When you release the hold on the payment, we recommend that you also create the subscription with a 30-day delay using Stripe’s API.
Do I need to collect the customer's payment details again when setting up the subscription?
No, you don’t need to collect the payment details again. When you place a hold on a payment, Stripe automatically creates a customer record and stores the payment method. You can use this same payment method when creating the subscription.
What happens if the prescription is not approved?
If the prescription is not approved, you should cancel the hold on the payment. The customer will not be charged, and no subscription will be created.
Can I use this approach for other types of verification, not just prescriptions?
Yes, this approach can be used for any scenario where you need to verify something before charging the customer. The same principles apply - place a hold on a one-time payment, verify the necessary information, then release the hold and set up the subscription when ready.
Why use a delayed subscription instead of a free trial?
While both approaches can achieve a similar result, delaying the subscription’s first invoice is generally preferred over using a free trial. This is because:
Stripe supports this through the billing_cycle_anchor
parameter, which lets you set a future date for the first full invoice. This can be combined with prorations if needed.