> For the complete documentation index, see [llms.txt](https://developer.paddle.com/llms.txt).

# Go-live checklist

Everything you need to do to transition to live when you've set up Paddle in sandbox.

---

Ready to start selling with Paddle? This guide walks through all the steps that you need to move from [sandbox](https://developer.paddle.com/sdks/sandbox.md) to live. By the end, you'll be ready to take your first real payment.

Going live involves swapping API keys in your existing integration, as well as recreating some data in your live account from sandbox. It's a good chance to review entities that you created to make sure you're only porting across good data.

{% callout type="note" %}
The steps in this guide apply to your **live account**. It assumes that you've set up and tested Paddle in your sandbox account. We walk through setting up sandbox in our [setup checklist](https://developer.paddle.com/build/onboarding/set-up-checklist.md).
{% /callout %}

## Overview

1. [**Complete initial configuration**](#config)  
   Port over key settings like your balance currency, whether prices include tax, and payment methods you support from your sandbox account.
2. [**Add products to your catalog**](#product-catalog)  
   Create subscription plans, recurring addons, one-off charges, and other items in your live account.
3. [**Update your integration**](#integration)  
   Make some changes to your sandbox integration so that it points to your live account.
4. [**Create notification destinations**](#webhooks)  
   Create new notification destinations to get notified when events happen in your live account, and handle signature verification.
5. [**Post-integration**](#post-integration)  
   When you're live, sign up for updates about new features or changes to the Paddle API and developer tools.

## Complete initial configuration {% step=true %}

Configure key settings for your live account. You set most of these in your sandbox account when testing, so mirror these settings in your live account.

### Mirror from sandbox

- [ ] **Set default payment link**

    Your default payment link is a quick way to open [Paddle Checkout](https://developer.paddle.com/concepts/sell/self-serve-checkout.md) for a transaction. It should be a page that [includes Paddle.js](https://developer.paddle.com/paddlejs/include-paddlejs.md), typically your checkout page.

    Go to **Paddle > Checkout > Checkout settings**, expand **Default payment link**, then add a default payment link.

    For your live account, you must use a real website (not `localhost`) that's passed [domain verification](https://www.paddle.com/help/start/account-verification/what-is-domain-verification).

    To learn more, see [Set your default payment link](https://developer.paddle.com/build/transactions/default-payment-link.md)

- [ ] **Set up payment methods**

    Choose the payment methods you want to use with Paddle Checkout. You can turn on payment methods in a couple of clicks — no need to sign up for merchant or partner accounts.

    Go to **Paddle > Checkout > Checkout settings**, expand **Payment methods**, then check the payment methods you want to offer.

    Card is always on for checkout, and bank transfer is always on for invoices.

    To learn more, see [Payment methods](https://developer.paddle.com/concepts/payment-methods/overview.md)

- [ ] **Set sales tax settings**

    Choose whether prices should be inclusive or exclusive of taxes by default. Typically, prices are exclusive of tax when selling to businesses and in regions with sales taxes.

    Go to **Paddle > Checkout > Sales tax settings** to set your sales tax setting.

- [ ] **Set balance currency**

    Choose the currency that you want to hold earnings in. Paddle automatically converts payments in other currencies to your balance currency, ready for payout.

    Go to **Paddle > Business account > Currencies** to set your balance currency.

    We recommend choosing a currency that matches your bank account.

### New steps

- [ ] **Set dunning and recovery settings**

    Paddle integrates with Retain to handle dunning and payment recovery. Retain automatically retries failed payments, sends reminders, and gives customers frictionless ways to retry payment.

    Go to **Paddle > Retain** to set dunning and recovery settings.

    To learn more, see [Set up Retain](https://developer.paddle.com/build/retain/set-up-retain-profitwell.md)

- [ ] **Provide payout details**

    Paddle initiates payouts on the first of each month when your balance meets the minimum threshold. You can get paid by Paddle by bank transfer, PayPal, or Payoneer.

    Go to **Paddle > Business account > Payouts > Payout settings** to enter your payout details and set your minimum threshold.

    To learn more, see [Payouts on the Paddle help center](https://www.paddle.com/help/manage/get-paid/when-and-how-do-i-get-paid)

## Add products to your product catalog {% step=true %}

Your product catalog contains the items purchased by customers. This includes subscription plans, recurring addons, and one-off items.

To start selling, recreate your sandbox product catalog in your live account. You should only create products that you plan to offer. We don't recommend copying test products to your live account.

{% callout type="info" %}
You can use the [Paddle API](https://developer.paddle.com/api-reference/overview.md) to create [products](https://developer.paddle.com/api-reference/products/overview.md), [prices](https://developer.paddle.com/api-reference/prices/overview.md), and [discounts](https://developer.paddle.com/api-reference/discounts/overview.md). If you have a large product catalog, getting entities using the API in sandbox, manipulating responses to match create request bodies, then creating entities using the API in live might speed up the process.
{% /callout %}

### Copy from sandbox

- [ ] **Create products and prices**

    Products describe the items customers purchase. They have related prices that describe how they're charged. Add products and prices to Paddle for subscription plans, recurring addons, and one-off items.

    Go to **Paddle > Catalog > Products** to start adding products and prices.

    To learn more, see [Create products and prices](https://developer.paddle.com/build/products/create-products-prices.md)

- [ ] **Create discounts**

    Discounts let you reduce the amount a customer has to pay by a percentage or fixed amount. They can be one-time or recurring, and apply to an entire transaction or just items that you choose.

    Go to **Paddle > Catalog > Discounts** to start adding discounts.

    To learn more, see [Create products and prices](https://developer.paddle.com/build/products/offer-discounts-promotions-coupons.md)

- [ ] **Request approval for taxable categories**

    Taxable categories determine what kinds of items you offer. They make sure that the correct amount of tax is calculated. Standard Digital Goods is available by default, but you should request approval for other taxable categories if you require them.

    Go to **Paddle > Catalog > Taxable categories** to request approval for other taxable categories.

    To learn more, see [Taxable categories on the Paddle help center](https://www.paddle.com/help/start/intro-to-paddle/why-do-i-need-to-select-'taxable-categories'-for-my-products)

## Update your integration {% step=true %}

Update your integration with Paddle so that it points to your live account rather than your sandbox account.

### New steps

- [ ] **Update base URLs for API endpoints**

    The Paddle API has different base URLs for sandbox and live accounts. Update your base URLs so Paddle knows which environment you're working with.

    Replace `sandbox-api.paddle.com` with `api.paddle.com` in API endpoint URLs.

- [ ] **Generate live API keys and swap them**

    [API keys](https://developer.paddle.com/api-reference/about/api-keys.md) are separate for your sandbox and live accounts. [Create new API keys](https://developer.paddle.com/api-reference/about/api-keys#create-api-key.md) for your live account, then swap [sandbox keys for live ones](https://developer.paddle.com/api-reference/about/api-keys#sandbox-vs-live-keys.md) in your code.

    Go to **Paddle > Developer tools > Authentication** to create API keys.

    Send a request to the `/event-types` endpoint to test your authentication.

    To learn more, see [Manage API keys](https://developer.paddle.com/api-reference/about/api-keys.md) and [Authentication](https://developer.paddle.com/api-reference/about/authentication.md).

- [ ] **Update client-side tokens in your frontend**

    [Client-side tokens](https://developer.paddle.com/paddlejs/client-side-tokens.md) are separate for your sandbox and live accounts. You use a client-side token when including, initializing, and authenticating Paddle.js in your frontend. [Create a new client-side token](https://developer.paddle.com/paddlejs/client-side-tokens#create-client-side-token.md) and replace the value in your frontend.

    Go to **Paddle > Developer tools > Authentication** to create a new client-side token.

    Swap the value for the `token` parameter passed to `Paddle.Initialize()` in your frontend.

    To learn more, see [Create client-side tokens](https://developer.paddle.com/paddlejs/client-side-tokens#create-client-side-token.md) and [Include Paddle.js](https://developer.paddle.com/paddlejs/include-paddlejs.md).

- [ ] **Pass pwCustomer to Paddle.Initialize()**

    Paddle.js integrates with Retain, so you don't have to include a separate Retain script. Client-side tokens for live accounts authenticate with both Paddle Billing and Paddle Retain, too. When transitioning to live, make sure you pass the `pwCustomer` parameter to `Paddle.Initialize()` when including Paddle.js so that Retain works correctly.

    Update `Paddle.Initialize()` calls to include `pwCustomer`, passing either the Paddle ID or email address of a customer.

    To learn more, see [Initialize Paddle.js and Retain](https://developer.paddle.com/paddlejs/include-paddlejs#manual-initialize-paddlejs-retain.md)

- [ ] **Remove sandbox environment setting in your frontend**

    Sandbox integrations use the `Paddle.Environment.set()` method to tell Paddle.js that you're working with a sandbox account. Remove this so Paddle.js defaults to the live environment.

    Remove `Paddle.Environment.set("sandbox")` from your frontend code.

    To learn more, see [`Paddle.Environment.set()`](https://developer.paddle.com/paddlejs/methods/paddle-environment-set.md)

- [ ] **Swap Paddle IDs in your frontend**

    As your sandbox and live accounts are separate, all products, prices, discounts, and other entities in Paddle have different Paddle IDs. Price and discount IDs are used with Paddle.js to open or update items on a checkout. Replace sandbox Paddle IDs with live Paddle IDs.

    Replace price and discount IDs in your integration with price and discount IDs for the newly created entities in your live account.

    Price and discount IDs are typically used in [`Paddle.Checkout.open()`](https://developer.paddle.com/paddlejs/methods/paddle-checkout-open.md), [`Paddle.Initialize()`](https://developer.paddle.com/paddlejs/methods/paddle-initialize.md), and [`Paddle.Checkout.updateItems()`](https://developer.paddle.com/paddlejs/methods/paddle-checkout-updateitems.md) methods. You might have passed them in [HTML data attributes](https://developer.paddle.com/paddlejs/html-data-attributes.md), too.

- [ ] **Swap Paddle IDs in subscription lifecycle logic**

    You may have used Paddle IDs for price, discount, or entities in your sandbox in logic that handles subscription lifecycle events like upgrades or downgrades. Replace sandbox Paddle IDs with live Paddle IDs.

    Replace price and discount IDs in your code that handles subscription lifecycle events with price and discount IDs for the newly created entities in your live account.

    You might have used them as [part of pricing pages](https://developer.paddle.com/build/checkout/build-pricing-page.md), as well as [upgrade or downgrade](https://developer.paddle.com/build/subscriptions/replace-products-prices-upgrade-downgrade.md) workflows.

## Create notification destinations {% step=true %}

Notifications let you get notified when key events happen in Paddle. They can be delivered as webhooks or emails. You'll typically use webhooks to keep your app in sync with Paddle.

To receive webhooks for live events, create new notification destinations in your live account. We recommend using separate webhook destination URLs for your sandbox and live accounts.

### Copy from sandbox

- [ ] **Create notification destinations**

    Create notification destinations to tell Paddle where to deliver webhook notifications and which events you want to receive notifications for.

    Go to **Paddle Developer tools > Notifications** to create notification destinations.

    To learn more, see [Work with notification destinations](https://developer.paddle.com/webhooks/notification-destinations.md)

### New steps

- [ ] **Allowlist Paddle IP addresses**

    Paddle sends webhooks from different IP addresses for sandbox and live environments. For security, we recommend that you allowlist Paddle IP addresses and reject responses from others.

    Allowlist Paddle IP addresses on your webhook server.

    To learn more, see [Webhooks](https://developer.paddle.com/webhooks/overview.md)

- [ ] **Verify webhook signatures**

    All webhooks sent by Paddle include a signature that you can use to check that they were genuinely sent by Paddle. We recommend that you verify webhook signatures to make sure that they weren't tampered with in-transit.

    Build logic to handle webhook signature verification.

    To learn more, see [Verify webhook signatures](https://developer.paddle.com/webhooks/signature-verification.md)

## Post-integration {% step=true %}

Once you've completed the preceding steps, you're live — congratulations. We recommend keeping up-to-date with changes to the Paddle platform.

- [ ] **Sign up for developer changelog updates**

    We document all changes to our API and developer tools on our developer changelog. We recommend all developers check our changelog regularly or sign up for emails to get updates about new features and changes.

    Check our developer changelog and use the email form to sign up for updates.

    To learn more, see [Developer changelog](https://developer.paddle.com/changelog/overview.md)

- [ ] **Sign up for Paddle status page updates**

    We post details of any incidents impacting the Paddle platform in real-time on our status page. We recommend subscribing to updates by email, webhook, RSS, or Slack.

    Check our status page and subscribe to updates.

    To learn more, see [Paddle status](https://paddlestatus.com/)

- [ ] **Refresh API keys regularly**

    Your API keys grant access to the data in your Paddle system. It's good practice to [rotate your API keys](https://developer.paddle.com/api-reference/about/rotate-api-keys.md) periodically and [revoke keys](https://developer.paddle.com/api-reference/about/api-keys#revoke-api-key.md) that you're no longer using.

    Go to **Paddle > Developer tools > Authentication** to create new API keys. Swap API keys for your new keys, then revoke old keys.

    To learn more, see [API keys](https://developer.paddle.com/api-reference/about/api-keys.md) and [Rotate API keys](https://developer.paddle.com/api-reference/about/rotate-api-keys.md).