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
- Sign up (free, no card). Already have an account? → /dashboard/api-keys
- Create sandbox key (one per free account)
- Copy key (shown once)
- 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
| Scope | Capacity (burst) | Refill |
|---|---|---|
| Per API key | 20 requests | 10 / minute |
| Per IP (aggregate) | 30 requests | 30 / 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:
| Field | Sandbox policy | Why |
|---|---|---|
address | Kept real | Returned as computed |
addressConnections | Gated → [] | Paid plan feature |
addressConnectionsValueSource | Omitted | Paid plan feature |
addressInfo | Kept real | Returned as computed |
analysisMode | Omitted | Paid plan feature |
analysisTime | Kept real | Returned as computed |
clusters | Gated → null | Paid plan feature |
contractAnalysis | Gated → null | Paid plan feature |
contractDeployments | Gated → [] | Paid plan feature |
contractInfo | Gated → null | Paid plan feature |
creditCharged | Omitted | Paid plan feature |
crossChain | Gated → null | Paid plan feature |
dataCompleteness | Gated → null | Paid plan feature |
dataQuality | Kept real | Returned as computed |
defiSwaps | Gated → null | Paid plan feature |
exchangeDeposits | Gated → null | Paid plan feature |
fallback | Omitted | Paid plan feature |
firstSeenApproximate | Omitted | Paid plan feature |
fullAnalysisAvailable | Omitted | Paid plan feature |
fundedBy | Gated → null | Paid plan feature |
fundedByStatus | Omitted | Paid plan feature |
honeypot | Gated → null | Paid plan feature |
labels | Kept real | Returned as computed |
network | Kept real | Returned as computed |
nftWashTrading | Gated → null | Paid plan feature |
osintIntelligence | Gated → null | Paid plan feature |
patternFlags | Top 5 only | Full list on paid |
railgun | Gated → null | Paid plan feature |
reportId | Omitted | Paid plan feature |
riskConfidence | Kept real | Returned as computed |
riskLevel | Kept real | Returned as computed |
riskNote | Kept real | Returned as computed |
riskScore | Kept real | Returned as computed |
temporalClusters | Gated → null | Paid plan feature |
timestamp | Kept real | Returned as computed |
timing | Gated → null | Paid plan feature |
tokenFlow | Gated → null | Paid plan feature |
tokenFlowIncomplete | Omitted | Paid plan feature |
tokenScore | Gated → null | Paid plan feature |
tokenTransferHistory | Gated → [] | Paid plan feature |
tokenTransferSupported | Omitted | Paid plan feature |
topCounterparties | Gated → [] | Paid plan feature |
transactionHistory | Last 7 days only | Full history on paid |
txFetchIncomplete | Omitted | Paid plan feature |
usdPrices | Kept real | Returned 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
- → Interactive API docs (Swagger UI) — try requests live against the sandbox
- → OpenAPI 3.1 spec (raw YAML) — for code generators
- → Postman collection — 8 ready-to-run requests
- → /dashboard/api-keys — create your sandbox key (auth required)
- → Paid plan pricing
- → Full paid API capabilities