---
title: "Sandbox"
description: "What the Gravv sandbox can and cannot produce for each product today, and which recipe tests a deposit, a card, a payout, a verification or a USDC send."
---
Sandbox runs the same API as live, with test money. These recipes show, product by product, what you can and cannot produce in sandbox today. Where sandbox cannot produce a result, test those screens with recorded webhook payloads instead.

**A money example.** You simulate a 50,000 NGN deposit into a sandbox NGN account. The real deposit pipeline runs. Gravv credits the account, writes a transaction row, and sends `transfer.inflow.completed` to your sandbox webhook URL. Then you pay 20,000 NGN to a Nigerian bank payee, and the payout completes in about 3 minutes.

To run these flows without writing code first, use the [Gravv CLI](/tools/gravv-cli). `gravv try wallet` makes a customer and a wallet and pays 20 test USDC into it. With `--curl`, it prints each call as curl.

## How sandbox differs from live

| | Sandbox | Live |
| :-- | :-- | :-- |
| How you choose it | A key that starts with `grvSec_sandbox_` | Any other key |
| Host | `https://api.gravv.xyz` | The same |
| Data | Separate. A sandbox id returns "not found" with a live key, and a live id returns "not found" with a sandbox key | Separate from sandbox |
| Webhook URL and secret | Their own, set in the Dashboard in Sandbox mode | Their own |
| Request rules | The same validation, permissions, `Idempotency-Key` rules and rate limits | The same |
| Release timing | Changes reach sandbox first, so sandbox can be a few days ahead of live | Changes reach live after sandbox |

## What you can produce today

| Product | Status in sandbox | Recipe |
| :-- | :-- | :-- |
| A deposit into an NGN account | Available | [Make a test deposit land](/recipes/sandbox/make-a-test-deposit-land) |
| A deposit into a USD, EUR or GBP account | Not yet available. Those accounts do not open in sandbox today | [Make a test deposit land](/recipes/sandbox/make-a-test-deposit-land) |
| A returned or failed deposit | Not yet available | No recipe |
| Issuing a virtual card, reading it, freezing it, changing its limit | Available, for an already verified cardholder | [Test a card in sandbox](/recipes/sandbox/test-a-card-in-sandbox) |
| Card purchases and declines | Not yet available | [Test a card in sandbox](/recipes/sandbox/test-a-card-in-sandbox) |
| Withdrawing from a new card, physical cards | Not yet available | [Test a card in sandbox](/recipes/sandbox/test-a-card-in-sandbox) |
| A naira bank payout, some mobile-wallet payouts | Available | [Run a test payout](/recipes/sandbox/run-a-test-payout) |
| A payout that fails, returns or pauses on purpose | Not yet available | [Run a test payout](/recipes/sandbox/run-a-test-payout) |
| A customer's verification completing | Not yet available for new customers | [Verify a customer in sandbox](/recipes/sandbox/verify-a-customer-in-sandbox) |
| A same-network USDC send between wallets | Available, from a wallet that holds test dollars | [Send USDC in sandbox](/recipes/sandbox/send-usdc-in-sandbox) |
| A cross-network USDC send, a failed crypto send | Not yet available | [Send USDC in sandbox](/recipes/sandbox/send-usdc-in-sandbox) |
| An FX quote or order | Not yet available. Sandbox has no OTC rates | [Foreign exchange](/recipes/fx/overview) |
| Collections from a payer | Not yet available in these recipes | No recipe |
| Reading limits | Available. The sandbox policy only records breaches, so nothing pauses | [Check what a sender can still send](/recipes/transactions/check-what-a-sender-can-still-send) |
| Webhooks: storing, retrying, history, resend | Available, as in live | [Trace a transfer and resend a webhook](/recipes/transactions/trace-a-transfer-and-resend-a-webhook) |

## Rules every recipe relies on

- Every POST needs its own new `Idempotency-Key`, as in live. Gravv replays a 4xx response for 24 hours under its key, so use a new key after you fix a request.
- The deposit simulator, `POST /v2/accounts/simulate/deposit`, is the only sandbox-only route. A live key gets 403 from it, so it can never move real money.
- Never add `_simulate_web3` to a transfer. If you do, the transfer never completes.
- Sandbox wallets are test-network wallets. On EVM networks the `USDC` balance is the **sandbox test dollar**, a test token that stands for US dollars. USDC from a public faucet does not show in that balance.
- Keep uploaded documents under 500 KB. From about 600 KB, sandbox returns 413.
- Never use a sandbox result as evidence for a live customer or payout.

For the known sandbox issues, see [Environments](/getting-started/environments).
