Specifically, the Subscription Plan Checkout doc article makes absolutely no mention of plan variations and the steps include setting the price when creating the subscription plan.
Whereas the Subscription Plans and Variations doc article says you explicitly need a subscription plan variation.
I’m Square Dev AI, here to help answer your question!
Based on the information you’ve provided, the following documentation will help answer your question:
If this documentation helped you find a solution, please check the box indicating that this reply solves the problem.
Otherwise one of our Developer Advocates will provide additional assistance shortly.
What if there is a trial period or initial setup fee - that all needs to be associated with the Subscription Plan Variation first and then the Quick Pay information passed to create the payment link and includes the recurring cost via the price_money?
If it’s not set you’ll get a MISSING_REQUIRED_PARAMETER error. The quick_pay amount will need to total the amount the amount that the customer will be charged for the subscription.
This is expected when testing payment link subscriptions in sandbox. It’s an incomplete experience and won’t actually create the subscription you see in the Dashboard. In production it works as expected.
Oh boy, so no way to confirm actual subscriptions are being created until we do live payments? That’s a bit bonkers to me.
If I set the Subscription Plan Variation to have a phase at $150 per year and the Quick Pay to be $100 for the initial amount - all it shows me is a payment for $100 and no mention of the $150 anywhere on the actual payment page. Here is what I see: CleanShot 2025-01-14 at 16.30.07 · CleanShot Cloud
Without subscriptions being shown in the Dashboard, I have absolutely no way to know if this is actually working.
Also, if no subscriptions ever get created how can I test receiving successful recurring payment webhooks?
Unfortunately, due to the way the payment links work in sandbox there isn’t a way to test webhooks and seeing it in Dashboard. What I do to test is to set every phase to $1 and use production to create the subscription. We’re constantly working to improve our features based on feedback like this, so I’ll be sure to share your request to the API product team.
Ok, but how on earth am I supposed to know if I am making these subscription payment links correctly? There is nothing in the UI to indicate the recurring amount. Users absolutely need to know the exact terms they are subscribing to on that checkout payment link.
Oh my, I have been going round and round pulling my hair out for days. There needs to be a very clear mention that nothing about subscriptions works in Sandbox and you have to test in Live. It would have saved me an immense amount of stress and time.
That said, I do see the subscription terms now on the checkout when using Live - however, they are the wrong subscription payment amounts. It is only using the initial payment as the recurring payment and does not indicate a difference between the two.
So how do I differentiate an initial payment amount and then recurring amount? For example, $150 for the first payment and then $100 each month there after.
You gave me an example of setting up two phases earlier, but one was was for a 1 week phase and then every month which did not align with my example so I wasn’t clear on what the point of that was.
Do I have to create two phases every time in this situation, 1) $150 yearly with 1 period ordinal 0 and 2) $100 yearly with unlimited periods ordinal 2? I have tried this and it still only returns $100/year - I cannot get the $150 fee to show as the current payment.
What is the difference between setting the prices for the plan variation phases and the Quick Pay price for making the payment link?
How can I update the pricing, periods for a subscription plan variation after one has been created without adding new ones indefinitely for every checkout link generated? Is it the UpsertCatalogObjectRequest()?
The point of the multiple phases was to give an example of what you can do with phases. What are the phases you need?
The reason for setting a quick pay amount and having the price set in the plan variation is requirement when using the payment links to create subscriptions. It’s just the way it’s engineered. If you’d like to create a custom UI and checkout experience that display’s all aspects when customers setup subscriptions we recommend using the Subscriptions API, Web Payments SDK, Customers API, and Cards API.
Any updates to subscriptions after they’ve been created will be with the Subscriptions API. You can swap plans with the adjusted periods.
The point of the multiple phases was to give an example of what you can do with phases. What are the phases you need?
I need the ability to set up an initial payment that is $150 at time of checkout and then $100 on a recurring yearly basis after that. This is just one example - I need to be able to set up any kind of subscription scenario but I am starting with this one to get my head wrapped around this API.
The reason for setting a quick pay amount and having the price set in the plan variation is requirement when using the payment links to create subscriptions.
That’s fine, but in my scenario where do I put the initial payment and where do I put the recurring amount? I have tried lots of things and nothing is yet working.
Any updates to subscriptions after they’ve been created will be with the Subscriptions API.
If I need to change my above example from $150 to start and $100 recurring every year to $75 to start and $50 recurring every month - how do I do that? I am not looking to change existing customer subscriptions, but the pricing and/or timing of the core subscription plan variation for future customers who sign up for it.
When the customer pays through the generated link they will be charged $150. Then a year from the date they signed up they’ll be charged $100.
If you need to change the amount to start with $75 and then go to $50 you’ll create a new SUBSCRIPTION_PLAN_VARIATION with those prices in the phases and pass the newly generated ID in when creating the payment link.