Orkid

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

EnvironmentBase URLSolve behaviorVolume tracked
Productionhttps://orkidlabs.xyzReal execution (submits on-chain tx)Yes — counts toward rebates
Sandboxhttps://sandbox.orkidlabs.comDry-run only (never submits)No — sandbox traffic is isolated

The sandbox:

  • Forwards /api/v1/route to the real solvers — you get authentic quotes, routing, and latency.
  • Forces /api/v1/solve to dryRun: true regardless 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 base

Safety guarantees

  • No on-chain execution: the sandbox proxy intercepts every /api/v1/solve and forces dryRun: true before forwarding to the solver. Even if you send dryRun: 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/route hits the actual per-chain solvers, so quotes reflect live pool state and real latency.

Rate limits

TierRequests / minute
Sandbox pilot300

On this page