# Sandbox subscription checkout, renewal failure, and recovery verification

**URL:** <https://developer.squareup.com/forums/t/sandbox-subscription-checkout-renewal-failure-and-recovery-verification/28244>\
**Category:** Questions\
**Created:** [October 17, 2026, 4:29pm UTC](https://developer.squareup.com/forums/t/sandbox-subscription-checkout-renewal-failure-and-recovery-verification/28244 "2026-10-17T16:29:18Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Symmetry](https://avatars.discourse-cdn.com/v4/letter/s/e95f7d/32.png) [@Symmetry](https://developer.squareup.com/forums/u/Symmetry)\
**Post date:** [October 17, 2026, 4:29pm UTC](https://developer.squareup.com/forums/t/sandbox-subscription-checkout-renewal-failure-and-recovery-verification/28244/1 "2026-10-17T16:29:18Z")

</div>

We need help completing pre-launch verification for a US/USD subscription integration using Square API version 2026-09-16.

Verified:  
• Sandbox $20 activation and $5 checkout payments map correctly to our test account.  
• A separate API-created monthly subscription is ACTIVE with a PAID invoice.  
• Application tests cover failure, recovery, refunds, and access expiration.

Blocked:  
• Hosted Sandbox checkout completes a payment but does not verify recurring subscription enrollment.  
• Creating a subscription with ccof:customer-card-id-declined returns INTERNAL\_SERVER\_ERROR.

What is your currently supported procedure for verifying hosted recurring enrollment, renewal failure webhooks, and payment recovery without charging a real customer?

---

<div class="post-metadata">

**Author:** ![helner-square](https://avatars.discourse-cdn.com/v4/letter/h/d9b06d/32.png) [@helner-square](https://developer.squareup.com/forums/u/helner-square)\
**Post date:** [October 21, 2026, 6:07pm UTC](https://developer.squareup.com/forums/t/sandbox-subscription-checkout-renewal-failure-and-recovery-verification/28244/3 "2026-10-21T18:07:23Z")

</div>

Hi @Symmetry,

**Supported procedures:**

Hosted recurring enrollment: Square documents creating a payment link with `checkout_options.subscription_plan_id` set to the subscription plan variation ID. After checkout, verify the resulting subscription using `SearchSubscriptions` for the customer and inspect its associated billing records.

Renewal failure webhooks: `ccof:customer-card-id-declined` is documented as a test `source_id` for `CreatePayment`, not as a supported failure fixture for `CreateSubscription`. The `INTERNAL_SERVER_ERROR`therefore does not demonstrate a renewal decline. For actual subscription charge failures, Square documents monitoring `payment.updated` with payment status `FAILED`.

Payment recovery without a real customer paying: Square’s webhook test tooling and your application tests can validate how your integration handles failure and recovery notifications. However, test webhooks do not create a real failed renewal or exercise Square’s billing/recovery lifecycle. Recovery needs confirmation against the relevant invoice/payment and not just an `ACTIVE` subscription status.
