Testing in sandbox
Run a complete purchase against Paddle sandbox before you take real money.
Test the whole path, not just the checkout. Most problems live after the payment.
Before you start#
- Sandbox switched on in Settings, with sandbox API key, client token, and webhook secret.
- A sandbox product and price in Paddle.
- A plan in the panel carrying that sandbox price ID.
- At least one uploaded version for the product.
- Working SMTP, or a way to read
storage/logs/laravel.log.
Reaching a local install#
Paddle cannot deliver a webhook to localhost. Put a tunnel in front of it and use the public URL as your notification destination while testing.
The run#
- Open the checkout page for your plan and complete it with a Paddle test card.
- Webhook logs should show
transaction.completedwith status processed. - Users should show a new customer with a Paddle customer ID.
- Orders should show a paid order with source paddle.
- Subscriptions should show an active subscription with a license key and an update expiry date.
- The welcome email should have arrived. Follow its link and set a password.
- Sign in as that customer, download the version, and confirm the file is intact.
- Call the license API with that key and confirm it returns
"valid": true. See the API reference.
Also worth testing#
- Cancel the subscription from the customer panel and confirm the status changes and downloads stop.
- Trigger a payment failure with Paddle’s failing test card and confirm the past-due email arrives.
- Activate more domains than the plan allows and confirm the limit is enforced.
Going live#
Switch sandbox off, replace all three credentials with live ones, add a live notification destination and paste its secret in, and update every plan’s price ID to the live equivalent.
That last step is the one people forget. Sandbox and live price IDs are different strings, and a plan still carrying a sandbox ID will never match a live purchase — the webhook arrives, finds no plan, and the sale is not fulfilled.