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

# Sandbox Mode

> Test the full quote to execute to status flow with no real funds and no live venue settlement.

Run the exact same `quote` then `execute` then [`submit-signature`](/api-reference/submit-signature)
then `status` flow from the [Quickstart](/quickstart), end to end, with nothing at stake: no
funds move, and RAVN never bills or meters the call.

## Turn it on

Set `sandbox: true` on [`POST /quote`](/api-reference/quote) (or
[`/x402/quote`](/ai-agents/x402-payments), same contract):

```bash theme={null}
curl -s -X POST https://app.ravn.exchange/api/v1/quote \
  -H 'content-type: application/json' -d '{
    "inputChainId": 1, "outputChainId": -2,
    "inputToken": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
    "outputToken": "So11111111111111111111111111111111111111112",
    "inputAmount": "1000000000000000000",
    "userAddress": "0xYourUser",
    "destinationAddress": "SoYourUser",
    "sandbox": true
  }'
```

`sandbox` doesn't touch pricing: the quote you get back is still live and real. It only changes
what happens once you act on it. The flag rides through the opaque `quoteToken` automatically,
so every later call that takes that token (`/execute`, `/submit-signature`, `/status`, or their
`/x402/*` equivalents) sees it too, with no separate flag to pass anywhere else. A sandbox
`quoteToken` works interchangeably across the plain and x402 endpoints, same as a real one.

## What changes downstream

| Endpoint | In sandbox mode |
| - | - |
| [`/execute`](/api-reference/execute) | Returns a realistically shaped `TRANSACTION`, `SIGNATURE`, or `DEPOSIT` payload (real calldata, typed data, or deposit-address shape) with no funds ever moved. THORChain (BTC source), Chainflip, and Houdini Swap aren't supported, see below. |
| [`/submit-signature`](/api-reference/submit-signature) | Skips forwarding the signature to the real venue and returns a synthetic `statusRef` immediately. |
| [`/status`](/api-reference/status) | Always returns an immediate synthetic result: `{ "status": "success", "deliveredAmount": <the quoted output>, "txHash": "0xsandbox..." }`. `ref` isn't validated in sandbox mode, so any placeholder string works. |

<Warning>
  THORChain with BTC as the source, Chainflip, and Houdini Swap aren't supported in sandbox mode:
  building their execution costs real money on-chain or opens a live, rate-locked order at the
  venue, which sandbox mode has no way to fake away. If your quote's winner is one of them,
  `/execute` returns `500 INTERNAL` with a message naming the venue instead of an execution
  payload. Pass `excludeVenues: ["thorchain", "chainflip", "houdini"]` on
  [`/quote`](/api-reference/quote) while testing. Every public route through them has at least one
  other real venue in the race, so excluding them is never a dead end there; a
  [private swap](/supported#private-swaps) still has NEAR Intents.
</Warning>

<Warning>
  A sandbox `/execute` on a Rift quote still opens a real, unfunded order at Rift with a live
  deposit address. Nothing moves unless someone sends to it, so never send funds to a sandbox
  deposit address.
</Warning>

<Note>
  A sandbox swap never touches RAVN's swap fee accounting on either the free REST endpoints or
  their [x402](/ai-agents/x402-payments) equivalents, so it's safe to hit repeatedly while
  integrating. On x402 specifically, that's separate from the per-call USDC access fee: that
  payment gate doesn't look at `sandbox` and still charges normally, sandbox mode only saves you
  from moving swap funds, not from the cost of the call itself.
</Note>


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