Use sandbox accounts
Build and test your Paddle integration without creating production entities and accepting real payments.
You can build and test your integration without creating and affecting real data, including accepting real payments and money. Use a sandbox account to help you locally develop, stage changes, and identify bugs or errors before going live to ensure your integration works as expected.
How it works
Paddle has two types of accounts:
Use sandbox accounts to build and test your integration without affecting real data.
Use live accounts to accept real payments and money.
Sandbox and live accounts have the same features, but totally separate datasets. This means sandbox accounts provide a risk-free environment where you can accurately experiment, build, and test your integration without affecting real customer data or processing actual transactions.
We strongly recommend using a sandbox account when building your initial integration or new workflows. By first implementing and testing in sandbox, you ensure a smoother transition when launching your integration and avoid issues that could impact your business and customers.
Differences between accounts
Core functionality is the same between live and sandbox accounts. However, there are a few differences to be aware of which make sandbox accounts useful for development and testing.
Summary
Feature | Sandbox | Live |
---|---|---|
Website approval | No approval required. | Approval required. |
Default payment link | Any domain, no verification. | Verified, approved domain. |
Card payments | Requires test cards, no real money. | Requires real cards, real money. |
Checkout appearance | 'Test Mode' watermark. | No watermark. |
Adjustment approvals | Refunds auto-approved every 10 mins. | Paddle approval needed for most refunds. |
Webhook retries | 3 retries in 15 mins. | 60 retries in 3 days. |
Email delivery | Sent to your account's domain, others forwarded to your main email address. | Sent to customer's email or provided email address. |
Paddle Retain | Simulate to test only. | Works to reduce churn. |
Breakdown
In order to sell products on Paddle, you need to have a website that's approved. Website approval makes sure you own the domains where you use Paddle Checkout, and that the products sold meet the Paddle acceptable use policy.
- For live accounts, you need to have a verified domain that goes through an approval process.
- For sandbox accounts, your website is automatically approved right away.
Website approval may take a few days as the Paddle verification team check your website. To learn more, see Website verification FAQs.
You must add a default payment link on Paddle > Checkout > Checkout settings. Payment links to customer checkout forms use this domain by default.
- For live accounts, this must be a verified domain that goes through an approval process.
- For sandbox accounts, this can be any domain including localhost with no verification nor approval required.
Paddle Checkout supports card payments as a payment option.
- For live accounts, you need to use a real card and real money to make payments.
- For sandbox accounts, you need to use test cards to make payments which don't use real money.
Test cards won't work in live accounts, and real cards won't work in sandbox accounts. This prevents you from using real money when working with your Paddle sandbox account.
Open a checkout, then use these card details to test payment by card:
Card type | Card number | CVC |
---|---|---|
Valid Visa debit card | 4000 0566 5566 5556 | 100 |
Valid card without 3DS | 4242 4242 4242 4242 | 100 |
Valid card with 3DS | 4000 0038 0000 0446 | 100 |
Declined card | 4000 0000 0000 0002 | 100 |
Successful initial transaction, subsequent declined transactions | 4000 0027 6000 3184 | 100 |
Enter any cardholder name and a valid expiry date in the future.
You can integrate a checkout in your frontend using using Paddle.js to let customers make purchases.
- For live accounts, the checkout loads without a watermark label.
- For sandbox accounts, a watermark label is displayed in the checkout saying the checkout is in Test Mode, indicating that the checkout is using sandbox credentials.
If this is unintentionally displayed to customers, you should check the client-side token that you used when initializing Paddle.js and change it to one created within a live Paddle account.
Adjustments record actions that impact revenue for a transaction after it's been billed, such as refunds, credits, or chargebacks.
- For live accounts, most refunds require approval from Paddle.
- For sandbox accounts, refunds are automatically approved every 10 minutes.
You can subscribe to be sent webhook notifications when certain events happen in your Paddle account. These webhooks are sent to the URL you've configured in Paddle > Developer tools > Notifications.
If you respond to the notification with anything other than a 200
HTTP status code, or fail to respond within five seconds, Paddle automatically retries sending these events.
- For live accounts, we retry 60 times within 3 days.
- For sandbox accounts, we retry 3 times within 15 minutes.
Your sandbox account is intended to mimic a production environment, so we send emails for events that would trigger an email in live accounts. For example, we might email a customer when a transaction is completed or to incentivize them to return to an abandoned checkout. You can also subscribe to receive email notifications for events that take place in your Paddle account.
- For live accounts, emails are sent to the email address associated with the customer or the email address you've provided.
- For sandbox accounts, emails are only sent to domains that match the domain of your main email address in Paddle > Business account > Account settings.
If you use a different domain when testing, emails are forwarded to the main email address on your account. If you use a free email service, like gmail.com
or hotmail.com
, we only send to the main email address on your account rather than match by username.
For example, if your main email address is team@aeroedit.com
:
Email for testing | Email sent to | Notes |
---|---|---|
team@aeroedit.com | team@aeroedit.com | Sent because it matches your main email address. |
sam@aeroedit.com | sam@aeroedit.com | Sent because aeroedit.com is the registered domain for your main email address. |
jo@example.com | team@aeroedit.com | Forwarded to your main email address as the domain doesn't match the domain of your main email address. |
Paddle Retain combines subscription expertise with algorithms that use billions of data points to automatically reduce churn. It automatically triggers payment recovery, cancellation flows, and other interventions for your customers.
- For live accounts, you can set up Retain as it uses your live billing data to work.
- For sandbox accounts, you can't set up Retain as it doesn't use sandbox data, but you can simulate its frontend interventions for testing.
When you simulate Retain interventions in your frontend, any underlying checkout or payment form uses your Paddle sandbox account. This means you can use test card details to complete the test flows.
Set up a sandbox account
As sandbox accounts are totally separate from live accounts, you need to create a new sandbox account even if you already have a live account.
Go to the Paddle sandbox signup page.
Enter your personal and business details.
Click Continue to create your account.
Integrate with sandbox accounts
You can use the same implementation and core code for both sandbox and live accounts. However, you need to provide different variables for each environment.
Make sure to integrate using sandbox in all places where you don't want to use real data or accept real payments, like in your local and staging environments. We advise using environment variables to switch between sandbox and live.
Backend
You may want to integrate with the Paddle API to create and manage your products, customers, transactions, and subscriptions.
Authentication
Both sandbox and live accounts require authentication credentials when making calls to the Paddle API. Backend authorization uses API keys.
Sandbox and live accounts use different API keys which are created in their own accounts. Cross-environment API keys don't exist. Sandbox API keys created after May 6, 2025 contain _sdbx
so you can identify them easily.
11pdl_sdbx_apikey_01jt3bpm61fltrr8ammc13579t_4d3M3f7Lx2kzgPqrBwnXhP_A4c
Base URLs
The Paddle API has different base URLs for sandbox and live accounts.
11https://api.paddle.com
11https://sandbox-api.paddle.com
Environment
If you're integrating using SDKs, you need to tell the SDK which environment to use. By default, Paddle.js uses the live environment. The method for setting the environment to sandbox varies across SDKs.
123451import { Paddle, Environment } from '@paddle/paddle-sdk-node';
2
3const paddle = new Paddle('PADDLE_API_KEY', {
4 environment: Environment.sandbox // or Environment.production for accessing live API
5})
Using a sandbox API key for requests to the live API, or vice versa, results in a
forbidden
error (403). Check your API key, the base URL used for requests, or the environment set for the SDK.
Frontend
You may want to integrate with Paddle.js to create checkouts and manage your customers.
Authentication
Both sandbox and live accounts require authentication credentials when initializing Paddle.js in your frontend. Frontend authorization uses client-side tokens.
Sandbox and live accounts use different client-side tokens which are created in their own accounts. Cross-environment client-side tokens don't exist. Sandbox client-side tokens are prefixed with test_
.
11test_757933v746814124c804c21l55n
Environment
Before you initialize Paddle.js, you need to say which environment to use. By default, Paddle.js uses the live environment.
Use the Paddle.Environment.set() method to set up Paddle.js for a sandbox account. It takes an environment
parameter which can be sandbox
or production
.
Paddle environment that you're working with.
123451Paddle.Environment.set("sandbox");
2Paddle.Initialize({
3 token: 'test_757933v746814124c804c21l55n',
4 pwCustomer: { }
5});
Migrate from sandbox to live
When you've built and tested your integration with a sandbox account, you need to move to a live account to start accepting real payments.
This involves creating a live account, switching to using live authentication credentials in your integration, and recreating some data from your sandbox account in your live account.
Use our go-live checklist to guide you through the steps needed to move from sandbox to live.