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

# Sandbox and testing

> How the OMS sandbox environment works, how networks map to testnets, and how to simulate inbound events.

OMS runs in two isolated environments: **sandbox** and **production**. Sandbox is a full copy of the API for building and testing against, with no real money and no mainnet settlement. You select an environment by its base URL and the credentials you send. The request and response shapes are identical, so code you build against sandbox runs unchanged in production.

## Environments

| Environment | Base URL                                       | Credentials                   |
| ----------- | ---------------------------------------------- | ----------------------------- |
| Sandbox     | `https://sandbox-api.polygon.technology/v0.10` | Sandbox API key and secret    |
| Production  | `https://api.polygon.technology/v0.10`         | Production API key and secret |

Credentials are scoped to one environment. A sandbox key never authenticates against production, and the reverse holds too. Request keys for both from the OMS Dashboard. See [Get started](/payments/get-started) for the full authentication flow.

Two behaviors are specific to sandbox:

* **Endorsements are auto-approved.** A customer's `basic`, `cryptoCustody`, and `usd` endorsements move to `ACTIVE` without a live KYC integration, so you can exercise fiat and crypto flows immediately. Provisioning still reads the identifying fields, so include them in sandbox as you would in production. See [Customer onboarding](/payments/guides/customer-onboarding).
* **Blockchain activity settles on testnets.** Every on-chain transaction executes on the equivalent testnet rather than mainnet, described next.

## Networks map to testnets

In sandbox, keep using the standard network enum values in your requests. You do not change the `network` (or `chain`) field between environments. Under the hood, OMS routes every blockchain transaction to that network's testnet.

| Network value | Production chain | Sandbox chain    |
| ------------- | ---------------- | ---------------- |
| `polygon`     | Polygon          | Polygon Amoy     |
| `ethereum`    | Ethereum         | Ethereum Sepolia |
| `base`        | Base             | Base Sepolia     |
| `solana`      | Solana           | Solana Testnet   |

A wallet you provision with `"chain": "polygon"` in sandbox holds funds on Polygon Amoy, and its `blockchainAsset.chainId` reflects the testnet. Your code still sends `polygon`. The mapping is automatic and applies everywhere a network appears: wallet provisioning, quotes, transactions, deposit addresses, and virtual accounts.

Because these are testnet addresses, a sandbox wallet's `address` resolves on the testnet's block explorer, not on the mainnet explorer. To create inbound on-chain activity for a wallet or deposit address, use the simulation endpoints below rather than moving real testnet assets.

## Simulating inbound events

Many OMS flows complete only when money arrives from outside the API: cash deposited at a retail location, a bank transfer landing in a virtual account, or crypto sent to a deposit address. Sandbox has no real counterparty to send those funds, so OMS exposes simulation endpoints that trigger the inbound leg on demand.

Each simulation drives the same downstream behavior as the real event. It auto-creates the transaction, advances the [transaction lifecycle](/payments/core-concepts/transaction-lifecycle), and fires the same [webhook events](/api-reference/webhook-events). That lets you test reconciliation and webhook handling end to end without waiting on an external deposit.

| Flow            | What you can simulate                                                                            | Guide                                                   |
| --------------- | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------- |
| Cash-in         | Authorize a barcode load, then commit or void the authorized cash deposit against a cash-in code | [Cash-in](/api-reference/guide-cash-in)                 |
| Deposit address | An inbound crypto deposit to a provisioned deposit address                                       | [Deposit addresses](/payments/guides/deposit-addresses) |
| Virtual account | An inbound bank deposit to a virtual account                                                     | [Virtual accounts](/payments/guides/virtual-accounts)   |

<Note>
  Simulation endpoints exist only in sandbox. The same calls against production return an error. For request and response details, see the endpoints grouped under the **Sandbox** and **Simulation** tags in the [API reference](/api-reference/overview).
</Note>

## What's next

<CardGroup cols={2}>
  <Card title="Get started" icon="rocket" href="/payments/get-started">
    Request sandbox credentials, authenticate, and run your first transaction.
  </Card>

  <Card title="Webhook events" icon="bell" href="/api-reference/webhook-events">
    The delivery envelope and full catalog of events that simulations fire.
  </Card>

  <Card title="Transaction lifecycle" icon="arrows-rotate" href="/payments/core-concepts/transaction-lifecycle">
    The statuses a transaction moves through, including auto-created ones.
  </Card>

  <Card title="Currencies and rails" icon="coins" href="/payments/core-concepts/currencies-and-rails">
    Supported assets, networks, and payment rails across OMS.
  </Card>
</CardGroup>
