You can't test a Paddle subscription cancel webhook until Paddle has verified your business. That takes days.
Paddle's billing API handles subscriptions, payments, and the entire checkout flow. The API is clean and the docs are solid.
The problem is the sandbox.
Verification before testing
To get a Paddle sandbox account, you need to:
- Sign up and create a separate sandbox login
- Wait for Paddle to verify your business (this can take days)
- Set up products and prices in the sandbox dashboard
- Configure webhook URLs
- Use test card numbers for checkout
All of this before you can test whether your code correctly handles a subscription.canceled webhook.
If you're building a billing integration and you want to test the full lifecycle — create subscription, pause, resume, cancel — you're waiting on Paddle's verification process before you can write a single test.
The lifecycle is the hard part
The individual API calls are straightforward. The hard part is the lifecycle:
- Create a subscription → status is
active - Pause it → status changes to
paused, webhook fires - Resume it → status changes back to
active, webhook fires - Cancel it → status changes to
canceled, webhook fires
Each transition produces a webhook event. If your handler doesn't process them in the right order, or misses one, your app's subscription state drifts from Paddle's.
You can't test this sequence without a working sandbox. And you can't get a working sandbox without verification.
Testing the lifecycle without waiting
FetchSandbox has a Paddle sandbox with the full subscription lifecycle. No verification, no account setup, no test cards.
The workflow:
-
POST /subscriptions— create a subscription -
POST /subscriptions/{id}/pause— pause it, webhook fires -
POST /subscriptions/{id}/resume— resume it, webhook fires -
POST /subscriptions/{id}/cancel— cancel it, webhook fires
Each step is stateful. The subscription ID chains between requests. The status transitions follow Paddle's actual state machine. Webhooks fire at each step.
Why this matters for billing
Billing bugs are silent. A missed subscription.canceled webhook doesn't throw an error — it just means a cancelled customer keeps access. You find out weeks later when you're reconciling revenue and the numbers don't match.
Testing the full lifecycle — not just the happy path, but pause/resume/cancel — is how you catch these before they cost you money.
Try the Paddle sandbox — no signup, no verification, runs in your browser.
Top comments (0)