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

# Go live

> Move a tested sandbox integration to production without a code change.

Move your integration to production. This is the first page of Launch. First finish Payments, Enrollment, and Discovery in the sandbox. Do not make production your first test. See [Test a payment](/sellers/test-a-payment).

Production is a configuration change. If you followed [Get started](/sellers/get-started), your server reads its environment and its key from `.env` at startup. Ship the build that you tested.

## What changes

Only these three values change.

| Value | Sandbox | Production |
| - | - | - |
| `INFLOW_ENVIRONMENT` | `sandbox` | `production` |
| `INFLOW_API_KEY` | key from `sandbox.inflowpay.ai` | key from `app.inflowpay.ai` |
| `MPP_SECRET_KEY` (MPP only) | sandbox secret | a separate production secret |

<Warning>
  `INFLOW_ENVIRONMENT` and `INFLOW_API_KEY` must always change together. A key works only against the dashboard that issued it. If you change one alone, every seller call fails.
</Warning>

## Move to production

<Steps>
  <Step title="Register a production Seller account">
    Register at [app.inflowpay.ai](https://app.inflowpay.ai). This account is separate from your sandbox account.

    A Developer account cannot take payments. Seller calls from a Developer key fail with `403 SELLER_ACCOUNT_REQUIRED`.
  </Step>

  <Step title="Create a production API key">
    Create the key in the production dashboard. Store it in your deployment secret manager. Never commit it.
  </Step>

  <Step title="Set a production MPP secret">
    This step applies to MPP only. Generate a new secret.

    ```bash theme={null}
    openssl rand -base64 32
    ```

    The secret must be at least 32 bytes. It must stay stable across deploys, because it signs and binds your `402` challenges. A change invalidates every challenge already in flight.
  </Step>

  <Step title="Set the production environment">
    ```bash .env theme={null}
    INFLOW_ENVIRONMENT=production
    INFLOW_API_KEY=your_production_key_here
    MPP_SECRET_KEY=your_production_secret_here
    ```
  </Step>

  <Step title="Deploy the build you tested">
    Do not edit `server.ts`. The same build reads the new values at startup.
  </Step>
</Steps>

<Warning>
  Never set a `baseUrl`. The SDK resolves the correct host from `environment` alone. A `baseUrl` sends live traffic to an unexpected host.
</Warning>

## Check the live endpoint

<Steps>
  <Step title="Confirm the challenge">
    Call your live endpoint with no payment. Expect a `402` and the header of each protocol.

    ```bash theme={null}
    curl -i https://api.example.com/api/widgets
    ```
  </Step>

  <Step title="Confirm what you advertise">
    ```bash theme={null}
    inflow inspect https://api.example.com/api/widgets
    ```

    Confirm that the output reports MPP and x402.
  </Step>

  <Step title="Take one small live payment">
    Price one endpoint at your smallest amount. Pay it yourself with the CLI. This payment settles real money.

    <CodeGroup>
      ```bash x402 theme={null}
      inflow x402 pay https://api.example.com/api/widgets --interval 5
      ```

      ```bash MPP theme={null}
      inflow mpp pay https://api.example.com/api/widgets --interval 5
      ```
    </CodeGroup>
  </Step>

  <Step title="Confirm the settlement">
    For a stablecoin payment, open [app.inflowpay.ai](https://app.inflowpay.ai) and confirm that the payment reached your InFlow balance. For a card payment, confirm the payment in your connected Stripe account. Confirm that the amount matches.
  </Step>
</Steps>

## After you are live

* Publish your service to the directory. The directory has no sandbox, so this step needs your live origin. See [Publish to the directory](/sellers/publish-to-the-directory).
* Rotate your production key if you ever paste it outside your secret manager.
* Keep the sandbox deploy. Test every change there before you ship it.

## Troubleshooting

| Symptom | Cause |
| - | - |
| Every seller call fails after the switch. | `INFLOW_ENVIRONMENT` and `INFLOW_API_KEY` disagree. The production key must come from `app.inflowpay.ai`. |
| Buyers report an expired challenge. | `MPP_SECRET_KEY` changed between deploys. |
| Requests reach an unexpected host. | You passed a `baseUrl`. Remove it. |

For other errors, see [Errors](/reference/errors).

## Next step

<Card title="Check your integration" icon="list-check" href="/sellers/verify-your-integration">
  Test Payments, Enrollment, and Discovery against the live service.
</Card>


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