Sandbox subscription checkout, renewal failure, and recovery verification

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?

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_ERRORtherefore 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.