> ## Documentation Index
> Fetch the complete documentation index at: https://docs.integrateledger.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Deploy and go live

> Connect your live Stripe account, publish your catalog to Live, and take your first real payment.

When your integration works in Sandbox, going live is a short checklist. Live has its own keys, catalog, customers and Stripe account, so nothing from Sandbox carries over and nothing in Live can touch Sandbox. [Sandbox and Live](https://docs.integrateledger.com/concepts/environments.md) explains the split, and what Live doesn't support yet.

Switch the dashboard to **Live** with the switch at the top of the sidebar. Until setup is done, Live pages carry a **Finish setup** button that counts the steps left.

**1. Create a Live API key**

In **Settings › API keys**, choose **Create key**. Live keys start with `ledger_live_`. Give your production backend only the permissions it uses (see [API keys](https://docs.integrateledger.com/api-keys.md)) and keep the key in your secret manager. Sandbox and Live keys only work in their own environment.

**2. Connect your live Stripe account**

In **Settings › Stripe**, choose **Connect Stripe** and paste a live secret key (`sk_live_…`) from [Stripe's API keys page](https://dashboard.stripe.com/apikeys). This is the account your customers pay into. Ledger checks the key, encrypts it and never shows it again.

Ledger then creates a signed webhook endpoint in your Stripe account. **Settings › Stripe** shows it as **Receiving** when Stripe can deliver to it; if it shows **Not active**, choose **Check again**. Ledger won't open a paid Checkout while the webhook is unhealthy. [Stripe](https://docs.integrateledger.com/stripe.md) lists the events.

**3. Set the Checkout redirects**

In **Settings › Checkout**, set the success and cancel URLs of your production app. In Live they must be `https` and can't point to `localhost`.

**4. Decide on tax**

You're responsible for the sales tax, VAT or GST on your sales. To have Stripe calculate it, set up Stripe Tax in your live Stripe account (head office, default tax behavior, and a registration wherever you must collect), then turn on **Automatic tax** in **Settings › Tax** while the dashboard is on Live. Stripe calculates and collects the tax; registering and filing stay with you. Coupons, promotion codes and customer balances aren't supported. [Tax](https://docs.integrateledger.com/concepts/tax.md) has the details.

**5. Publish your catalog to Live**

Push the same catalog file with your Live key. A Live key only acts with `--live`, and a Live push asks you to type `live` before it publishes:

```bash theme={"system"}
LEDGER_API_KEY=ledger_live_... npx integrateledger-cli push --live
```

Each paid plan syncs to your live Stripe account; every one must show **Synced** before you activate.

To publish from CI after merge, run `npx integrateledger-cli diff --exit-code` on pull requests and push with `--yes`:

```yaml theme={"system"}
- run: npx integrateledger-cli push --live --yes
  env:
    LEDGER_API_KEY: ${{ secrets.LEDGER_LIVE_API_KEY }}
```

**6. Activate live billing**

When the steps are done, choose **Activate live billing**. Ledger rechecks each one, and live charges start straight away; there's no review. Before you activate, free plans, `check` and `track` work in Live, and anything that would charge returns `503 live_charges_disabled`.

**7. Swap the key in production**

Point your production backend at the `ledger_live_` key. Nothing else in your integration changes. Then buy your cheapest plan or pack with a real card, check that the credits arrive, and refund it in Stripe. A refunded pack's unused credits expire; a refunded plan keeps its credits.

To stop taking new payments, choose **Turn off Live** in **Settings › Workspace**: new Checkouts and upgrades are refused, and existing subscriptions keep renewing in Stripe. Ledger can also suspend a workspace that breaks its terms; email [support@integrateledger.com](mailto:support@integrateledger.com) to resolve it.

## Troubleshooting

| You see | Why | Fix |
| - | - | - |
| `503 live_charges_disabled` | Live isn't activated, was turned off, or is suspended | Finish the checklist and activate. If suspended, contact support. |
| `401 unauthorized` | A Sandbox key, or a Live key without the endpoint's permission | Use a `ledger_live_` key with the right permissions. |
| `400 checkout_urls_not_configured` | Live has no Checkout redirects | Set them in **Settings › Checkout** while viewing Live. |
| `502 stripe_webhook_unhealthy` | The live endpoint was deleted or disabled in Stripe | **Check again** in **Settings › Stripe**, or reconnect. |
| `502 stripe_not_configured` | Stripe rejected the key, or it lacks a permission | Connect a full `sk_live_` secret key again. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.