Portfolio Mode / Last probe portfolio mode / 1 regions / 10 providers / 1 snapshots (7d)Live regional probe mesh / Slot-aware RPC routing

API v1

Governed Solana RPC routing API

InfraBench executes a live probe from the nearest regional runtime, applies latency and slot-freshness gates, and returns either READY with an endpoint handoff or ABSTAIN with machine-readable rationale. Review the evidence methodology.

Open API playgroundCompare API tiers

Why this API exists

Governed routing, not guessing

Most RPC routing is based on marketing claims or one-time benchmarks. InfraBench returns either READY with a verified endpoint and evidence chain, or ABSTAIN with the specific failed gate, so callers can fail safely instead of routing on stale data.

The decision is deterministic. The same evidence produces the same outcome; operators can read the rationale, reproduce the score, and attach the decision to an audit trail.

If InfraBench abstains, the caller must use its configured fallback. Routing on a null endpoint is a logic error, not a handled edge case.

Authentication and limits

TierRequests/dayFreshness tolerance
Free / no key5060 minutes
Pro / X-InfraBench-Key5,00015 minutes
Enterprise / X-InfraBench-KeyUnlimited5 minutes

Endpoint reference

GET /api/v1/route

Live regional route decision with READY or ABSTAIN rationale.

GET /api/v1/agent/route

Minimal snapshot-backed decision for transaction agents.

GET /api/v1/providers

Current provider, region, confidence, and availability evidence.

GET /api/v1/leaderboard

Workload-specific composite comparison.

GET /api/v1/history

Provider history for charting and audit.

GET /api/v1/thresholds

Versioned routing and ledger threshold history.

Quick start: TypeScript

const res = await fetch(
  "https://infrabench-ruddy.vercel.app/api/v1/route?region=Frankfurt,Germany&workload=trading&rttBudgetMs=45"
);
const data = await res.json();

if (data.decision === "READY") {
  const rpcEndpoint = data.winner.endpoint;
} else {
  console.error("InfraBench abstained:", data.rationale[0].message);
}

Quick start: Python

import httpx

response = httpx.get(
    "https://infrabench-ruddy.vercel.app/api/v1/route",
    params={"region": "Frankfurt,Germany", "workload": "reads"},
)
decision = response.json()
print(decision["decision"], decision["rationale"])

Who uses this API

Trading desks
Call /api/v1/route with workload=trading and rttBudgetMs=45. If the decision is ABSTAIN, do not route; log the rationale code.
Indexers
Use workload=indexing. The latency budget is broader, while slot drift remains material to ingestion freshness.
MEV searchers
Use /api/v1/agent/route with workload=mev. The route abstains when required WebSocket evidence is unavailable.
Audit / compliance
Use /api/v1/history to retrieve 7-30 days of provider evidence for SLA verification and vendor review.

Route endpoint parameters

ParameterTypeRequirementMeaning
regionstringrequiredCity, country, or supported geographic label.
workloadstringrequiredreads, trading, indexing, or mev.
rttBudgetMsnumberoptionalMaximum acceptable p95 RTT. Defaults to the selected workload budget and overrides it when supplied.
slotDriftMaxnumberoptionalMaximum accepted slot drift, 1-20. Default 3 slots.
providersstringoptionalComma-separated provider IDs.

GET /api/v1/history accepts providerId (or legacy provider), optional region, days from 1-30, and metric equal to p95rtt, slotdrift, or score. It returns both the full evidence points and a chart-ready timestamp/value series.

Threshold registry

Versioned governance policy

Routing and ledger gates no longer live only as inline constants. The current live policy is thresholds-2026-06-16, effective 2026-06-16T00:00:00.000Z, authored by InfraBench maintainers.

View JSON
WorkloadMax p95 RTTMax slot driftMin successWebSocket evidenceWebSocket success floor
reads150 ms395%Not requiredN/A
trading45 ms395%Not requiredN/A
indexing150 ms395%Not requiredN/A
mev100 ms395%Required95%
thresholds-2026-06-16Effective 2026-06-16T00:00:00.000ZAuthor InfraBench maintainers

Initial audited extraction of live routing and ledger thresholds from inline constants into a versioned policy registry. Values are unchanged from the previously deployed governance contract.

Building on InfraBench

Agent integrations

The agent route uses the latest governed snapshot and returns only decision, endpoint, score, and timestamp. Set X-Agent-Id for caller correlation and read X-InfraBench-Score without parsing the body.

async function endpointForBatch(agentId: string) {
  const response = await fetch(
    "https://infrabench-ruddy.vercel.app/api/v1/agent/route?region=fra1&workload=trading&rttBudgetMs=80&slotDriftMax=3",
    { headers: { "X-Agent-Id": agentId } }
  );
  const route = await response.json();
  if (route.decision !== "READY" || !route.endpoint) {
    throw new Error("InfraBench abstained; halt or use the configured fallback.");
  }
  return route.endpoint;
}

Errors and rationale

HTTP 400 indicates invalid parameters, 429 indicates rate limiting, and 500/503 indicates unavailable infrastructure. READY and ABSTAIN both return HTTP 200. Treat rationale codes ending in _FAILED or _MISSING as explicit governance blocks; do not infer an endpoint when winner is null.

HTTPCodeSuggested handling
400INVALID_ROUTE_PARAMETERSCorrect missing or malformed query parameters.
200NO_ELIGIBLE_PATHHonor ABSTAIN and use the caller's configured fallback.
429RATE_LIMITEDWait for retryAfterSeconds or use an API tier.
500ROUTE_DECISION_FAILEDDo not infer a winner; retry or use a static fallback.
503HISTORY_UNAVAILABLEHistorical storage is temporarily unavailable.