Infrastructure is judged on numbers, so here are ours with the sample size and the timestamp attached. Nothing on this page is a marketing figure.
Friday November 6, 2026, 19:47 CT · single client, sequential requests, no connection reuse · 115 samples across 5 routes
| Route | Samples | p50 | p95 | Slowest | Notes |
|---|---|---|---|---|---|
verdictFast cached verdict | 12 | 385 ms | 466 ms | 470 ms | Primary cache hit path |
verdictFast second token | 5 | 412 ms | 455 ms | 460 ms | Same shape, different cache row |
forensicsGateway informational | 10 | 280 ms | 340 ms | 360 ms | No chain reads |
forensicsMints challenge | 10 | 435 ms | 737 ms | 901 ms | Paywall only, no data returned |
alertsSubscribe challenge | 10 | 257 ms | 320 ms | 340 ms | Paywall only, no data returned |
verdictFast and treat anything else as a background or batch call.for i in $(seq 1 20); do
curl -s -o /dev/null -w "%{time_total}\n" \
"https://api.onchainforensics.dev/functions/verdictFast?address=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913&chain=base"
done
Latency depends on where you call from, so measure from your own egress rather than trusting ours.
| Property | Target | Current |
|---|---|---|
| Cached verdict p95 | under 800 ms | 466 ms measured |
| Paywall challenge p95 | under 900 ms | 737 ms worst route measured |
| Cache refresh | every 5 minutes | every 5 minutes, 429 tokens and climbing |
| Read source | dedicated node, public fallback | private Alchemy endpoint, public rotation behind it |
| Truthfulness of a read | never turn an unreadable chain into a zero | unreadable sections return PARTIAL or UNAVAILABLE |
No formal SLA contract is offered today. If you need one for a production integration, say so and we will put terms in writing before you build on us.
Every response and the OpenAPI document carry a semantic version. What that means in practice:
forensicsVerdict2) with the old route kept live for at least 90 days after the announcement.Deprecation header once the notice is live.The same routes ship as an MCP server so a framework can load them without code:
npx -y onchain-forensics-mcp
Six tools, stdio transport, zero dependencies. On a spent free allowance the tool returns the decoded x402 challenge instead of an error, so the calling agent knows the exact price.