Sandbox API — Test with Real Data, Free

Create a sandbox API key in one click. Call real endpoints with real addresses. Validate your integration before paying. Same JSON shape as paid tier, cheap modules only.

Sandbox is for

  • ✓ Auth testing — verify your API key works
  • ✓ Response schema validation
  • ✓ Integration testing with real addresses
  • ✓ Basic UI prototyping
  • ✓ Checking what OnChainRisk returns before paying

Sandbox is NOT for

  • ✗ Production monitoring or alerting bots
  • ✗ Large-scale tracing or graph exploration
  • ✗ Any workflow requiring history beyond 7 days
  • ✗ Cross-chain / clustering / honeypot detection
  • ✗ Saved report persistence

30-second quickstart

  1. Sign up (free, no card). Already have an account? → /dashboard/api-keys
  2. Create sandbox key (one per free account)
  3. Copy key (shown once)
  4. Run the curl below
curl -X POST https://api.onchainrisk.io/api/v1/check \
  -H "Authorization: Bearer ocr_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"address":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045","network":"eth"}'

Rate limits

ScopeCapacity (burst)Refill
Per API key20 requests10 / minute
Per IP (aggregate)30 requests30 / minute

429 responses include a Retry-After header and body { bucket, retry_after_seconds }.

Response policy

Sandbox responses match the paid JSON shape exactly. Expensive fields are gated:

FieldSandbox policyWhy
addressKept realReturned as computed
addressConnectionsGated → []Paid plan feature
addressConnectionsValueSourceOmittedPaid plan feature
addressInfoKept realReturned as computed
analysisModeOmittedPaid plan feature
analysisTimeKept realReturned as computed
clustersGated → nullPaid plan feature
contractAnalysisGated → nullPaid plan feature
contractDeploymentsGated → []Paid plan feature
contractInfoGated → nullPaid plan feature
creditChargedOmittedPaid plan feature
crossChainGated → nullPaid plan feature
dataCompletenessGated → nullPaid plan feature
dataQualityKept realReturned as computed
defiSwapsGated → nullPaid plan feature
exchangeDepositsGated → nullPaid plan feature
fallbackOmittedPaid plan feature
firstSeenApproximateOmittedPaid plan feature
fullAnalysisAvailableOmittedPaid plan feature
fundedByGated → nullPaid plan feature
fundedByStatusOmittedPaid plan feature
honeypotGated → nullPaid plan feature
labelsKept realReturned as computed
networkKept realReturned as computed
nftWashTradingGated → nullPaid plan feature
osintIntelligenceGated → nullPaid plan feature
patternFlagsTop 5 onlyFull list on paid
railgunGated → nullPaid plan feature
reportIdOmittedPaid plan feature
riskConfidenceKept realReturned as computed
riskLevelKept realReturned as computed
riskNoteKept realReturned as computed
riskScoreKept realReturned as computed
temporalClustersGated → nullPaid plan feature
timestampKept realReturned as computed
timingGated → nullPaid plan feature
tokenFlowGated → nullPaid plan feature
tokenFlowIncompleteOmittedPaid plan feature
tokenScoreGated → nullPaid plan feature
tokenTransferHistoryGated → []Paid plan feature
tokenTransferSupportedOmittedPaid plan feature
topCounterpartiesGated → []Paid plan feature
transactionHistoryLast 7 days onlyFull history on paid
txFetchIncompleteOmittedPaid plan feature
usdPricesKept realReturned as computed

Your response includes a _sandbox block listing gated/truncated fields — your client can reliably distinguish "gated" from "genuinely empty".

Code samples

Node.js (fetch)

const res = await fetch('https://api.onchainrisk.io/api/v1/check', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${process.env.OCR_SANDBOX_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ address: '0xd8dA...', network: 'eth' }),
});
const { data } = await res.json();
console.log(data.riskScore, data._sandbox.profile);

Python (requests)

import os, requests
r = requests.post(
    'https://api.onchainrisk.io/api/v1/check',
    headers={'Authorization': f"Bearer {os.environ['OCR_SANDBOX_KEY']}"},
    json={'address': '0xd8dA...', 'network': 'eth'},
)
data = r.json()['data']
print(data['riskScore'], data['_sandbox']['profile'])

Ready for production?

Paid plans unlock everything sandbox gates: full fund flow, cross-chain tracing, clustering, graph expansion, honeypot detection, saved reports, and higher rate limits.

See Pricing →

Resources