# Environments

**Revolut operates in two isolated environments: Sandbox for testing and Production for real data.**

Before you proceed with your setup, read this page: it shows how the two environments differ and what to expect in each. Everything else in this space assumes the split.

## How it works

Proper testing and deployment to Production need two separate setups:

- **Your test environment** - any pre-production deployment (like local, QA or staging), pointed at Revolut **Sandbox**: sandbox endpoints, your Sandbox API key, test cards, and test data that never settles.
- **Your live deployment** - your production deployment, pointed at Revolut **Production**: live endpoints, your Production API key, real customer cards, and real money.

The two environments are completely isolated: your Sandbox key and test cards only work against Sandbox, your Production key only against live endpoints. When you finish testing and are ready to go live, you update your entire setup at once to point to Production endpoints and data.

The two setups side by side:

| | Your test environment | Your live deployment |
|-|-----------------------|----------------------|
| Revolut environment | Sandbox | Production |
| Base URL | `https://sandbox-merchant.revolut.com/` | `https://merchant.revolut.com/` |
| API key | Console **Sandbox** API key | Console **Production** API key |
| Cards | [Test cards](/docs/guides/merchant/test-and-go-live/testing/test-cards.md) only | Real customer cards |
| Money | Mock transactions - nothing settles | Real money |
| Emails and SMS | Not sent - helper buttons simulate success | Sent as normal |

### Keys in API Console

Both setups get their keys from one place: the [API Console](https://developer.revolut.com/console), which serves both environments and lets you easily switch between Sandbox and Production.

- Your Sandbox account ships with a pre-generated full-access API key, so you can build straight away - see [Get started with the API Console](/docs/guides/api-console/get-started).
- Create more keys with specific permissions as you need them - see [Create an API key](/docs/guides/api-console/create-key).

### Plugin environments

Running a no-code plugin? The same two setups apply: connect a staging store in **test mode** with your Sandbox key, and your live store with your Production credentials. See [Set up test environment](/docs/guides/merchant/test-and-go-live/set-up-test-environment#plugins).

### Webhooks

If your server allowlists incoming traffic, allowlist Revolut's webhook sources separately for each environment:

| Environment | Webhook IPs                                  |
|-------------|----------------------------------------------|
| Sandbox | `35.242.130.242`, `35.242.162.241` |
| Production | `35.246.21.235`, `34.89.70.170` |

When you switch, register your Production webhook URL and allowlist the Production IPs. For delivery retries, payload signature verification, and operational guidance, see [Use webhooks](/docs/guides/merchant/monitor-and-observe/webhooks/using-webhooks).

## What's next

- [:Lab: Set up test environment](/docs/guides/merchant/test-and-go-live/set-up-test-environment.md 'Create a Sandbox account and point your integration at Sandbox')
- [:Card: Test cards](/docs/guides/merchant/test-and-go-live/testing/test-cards.md 'The full list of Sandbox test cards and their outcomes')
- [:Timeline: Test payment flows](/docs/guides/merchant/test-and-go-live/testing/test-flows.md 'Walk through checkout flows in Sandbox - payment links, Revolut Pay, and Google Pay')
- [:Questionnaire: Sandbox test scenarios](/docs/guides/merchant/test-and-go-live/testing/sandbox-test-scenarios.md 'The order, refund, and webhook scenarios every backend should handle')