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 route to the real solvers — you get authentic quotes, routing, and latency.
  • Forces solve to dryRun: true regardless of what you send — the solver encodes and validates the transaction but never submits it.
  • Accepts both /v1/* and /api/v1/* path prefixes — SDKs, plugins, and raw curls all work unchanged.
  • Does not record usage or rebate volume.

No API key required

Route quotes and dry-run solves are permissionless on the sandbox — pass nothing and it works:

curl -X POST https://sandbox.orkidlabs.com/v1/route \
  -H "Content-Type: application/json" \
  -d '{"from":"USDC","to":"WETH","amount":"25.0","chain":"base"}'

Anonymous callers are rate-limited per IP (60 req/min). If you need more headroom, request a sandbox key via api@orkidlabs.com — keyed callers get the pilot 300 req/min. Sandbox keys are distinct from production keys.

Using the sandbox with the SDK

import { OrkidClient, SANDBOX_BASE_URL } from '@orkid-labs/sdk'

const sandbox = new OrkidClient({
  baseUrl: SANDBOX_BASE_URL, // https://sandbox.orkidlabs.com
  // apiKey optional on sandbox
})

// 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)
curl https://sandbox.orkidlabs.com/health

# Route (real quote, keyless)
curl -X POST https://sandbox.orkidlabs.com/v1/route \
  -H "Content-Type: application/json" \
  -d '{"from":"USDC","to":"WETH","amount":"25.0","chain":"base"}'

# Solve (always dry-run — never submits)
curl -X POST https://sandbox.orkidlabs.com/v1/solve \
  -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,"permit":{...},"signature":"0x..."}'

Using the sandbox with the CLI

orkid --base-url https://sandbox.orkidlabs.com status
orkid --base-url https://sandbox.orkidlabs.com quote --from USDC --to WETH --amount 25 --chain base

Safety guarantees

  • No on-chain execution: the sandbox proxy intercepts every 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.
  • Real routing: route hits the actual per-chain solvers, so quotes reflect live pool state and real latency.

Rate limits

CallerRequests / minute
Anonymous (no key)60 per IP
Sandbox pilot key300

On this page