Sandbox environment
Test your integration without touching real flows.
Orkid provides a dedicated sandbox environment at https://sandbox.orkidlabs.com for integration testing. You can hammer it with thousands of test requests and never risk a real on-chain transaction.
How it works
| Environment | Base URL | Solve behavior | Volume tracked |
|---|---|---|---|
| Production | https://orkidlabs.xyz | Real execution (submits on-chain tx) | Yes — counts toward rebates |
| Sandbox | https://sandbox.orkidlabs.com | Dry-run only (never submits) | No — sandbox traffic is isolated |
The sandbox:
- Forwards
/api/v1/routeto the real solvers — you get authentic quotes, routing, and latency. - Forces
/api/v1/solvetodryRun: trueregardless of what you send — the solver encodes and validates the transaction but never submits it. - Uses separate API keys from production.
- Does not record usage or rebate volume.
- Has its own rate limit (300 req/min for the pilot key).
Getting a sandbox key
Contact Orkid for a sandbox API key. Sandbox keys are 40-character hex strings, separate from production keys.
Using the sandbox with the SDK
import { OrkidClient, SANDBOX_BASE_URL } from '@orkid/sdk'
const sandbox = new OrkidClient({
apiKey: process.env.ORKID_SANDBOX_KEY!,
baseUrl: SANDBOX_BASE_URL, // https://sandbox.orkidlabs.com
})
// Real quote from the real solver
const quote = await sandbox.getQuote({
from: 'USDC',
to: 'WETH',
amount: '25.0',
chain: 'base',
})
// Dry-run solve — encodes and validates but never submits
const result = await sandbox.solve({
from: 'USDC',
to: 'WETH',
amount: '25.0',
chain: 'base',
user: '0x...',
fromAddress: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913',
fromDecimals: 6,
toAddress: '0x4200000000000000000000000000000000000006',
toDecimals: 18,
dryRun: false, // ignored — sandbox always forces dryRun: true
permit: signed.permit,
signature: signed.signature,
})
// result.transaction.to / .data are real calldata
// result.transaction.txHash is absent (never submitted)Using the sandbox with curl
# Health check (no auth required)
curl https://sandbox.orkidlabs.com/health
# Route (real quote)
curl -X POST https://sandbox.orkidlabs.com/api/v1/route \
-H "X-ORKID-API-Key: <sandbox-key>" \
-H "Content-Type: application/json" \
-d '{"from":"USDC","to":"WETH","amount":"25.0","chain":"base","fromAddress":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","fromDecimals":6,"toAddress":"0x4200000000000000000000000000000000000006","toDecimals":18}'
# Solve (always dry-run — never submits)
curl -X POST https://sandbox.orkidlabs.com/api/v1/solve \
-H "X-ORKID-API-Key: <sandbox-key>" \
-H "Content-Type: application/json" \
-d '{"from":"USDC","to":"WETH","amount":"25.0","chain":"base","user":"0x...","fromAddress":"0x...","fromDecimals":6,"toAddress":"0x...","toDecimals":18,"dryRun":false,"permit":{...},"signature":"0x..."}'Using the sandbox with the CLI
orkid --base-url https://sandbox.orkidlabs.com --api-key <sandbox-key> status
orkid --base-url https://sandbox.orkidlabs.com --api-key <sandbox-key> quote --from USDC --to WETH --amount 25 --chain baseSafety guarantees
- No on-chain execution: the sandbox proxy intercepts every
/api/v1/solveand forcesdryRun: truebefore forwarding to the solver. Even if you senddryRun: false, the sandbox ignores it. - No production volume: sandbox requests do not call the production usage-tracking or rebate-recording endpoints.
- Separate keys: sandbox API keys are distinct from production keys. A production key will not work on the sandbox and vice versa.
- Real routing:
/api/v1/routehits the actual per-chain solvers, so quotes reflect live pool state and real latency.
Rate limits
| Tier | Requests / minute |
|---|---|
| Sandbox pilot | 300 |