Beta

Status Methodology

How the AI Economy Uptime Index, provider health, incident archive, and failover recommendations are computed. No black boxes.

A Vercel cron job at /api/cron/ping-providers runs every five minutes. It hits one public endpoint per tracked provider in parallel with a 10 second timeout and a dedicated BenchGecko-StatusMonitor/1.0 user agent. We never call paid inference endpoints · we use the /v1/models listing endpoint (or the closest equivalent per provider) because it is free, sub-kilobyte, and universally exposed.

Each ping writes a row to the provider_pings table with status code, latency, and ok flag. Some providers return 401 or 403 without auth · we treat those as reachable because they prove the control plane is up. Full list of providers and their reachable codes lives in the source at src/app/api/cron/ping-providers/route.ts.

After each cron cycle, we compute the composite:

index_value = (providers_reachable / providers_total) * 100

The snapshot gets written to ai_uptime_index_snapshots along with median latency, active incident count, and up/degraded/down counts. The 24 hour delta shown next to the big number on /status is computed by looking up the nearest snapshot to 24 hours ago.

Three consecutive failed pings for a provider auto-opens an incident with a frozen slug of the form {provider}-{YYYY-MM-DD}-{random4}. The slug is permanent · once minted, the URL /status/incident/[slug] never changes, which makes every incident citable.

Two consecutive successful pings for a provider with an open incident auto-resolves it. Resolution writes the duration in minutes, flips status to resolved, and freezes the record.

The provider_health_live Postgres view computes 24 hour rollups directly from provider_pings: count, uptime percent, and p50/p95/p99 latency via PERCENTILE_CONT. A parallel provider_health_30d view gives the 30 day uptime for the timeline grid.

Status thresholds:

  • Healthy · 24h uptime >= 99%
  • Degraded · 24h uptime 50 to 99%
  • Down · 24h uptime < 50%

When a provider is degraded or down, /status shows three alternative models. The logic is synchronous and uses the static model catalog.

We pick the highest-scoring model on the degraded provider as the baseline. Candidates are models on other providers with an average score within ±10 points of that baseline. They are sorted by a composite of score delta and input price delta, with score weighted 10× heavier than price. Top three win.

We do not earn affiliate fees on these recommendations. They are computed purely from the live data.

/status is rendered as a server component with revalidate = 300 and a tagged cache. After each cron cycle, the ping endpoint calls /api/revalidate?tag=status to bust the Next cache. So the page is never more than five minutes stale.

All data on /status is free to use with attribution. Link back to benchgecko.ai/status or cite via the built-in Cite this page button, which generates APA, MLA, BibTeX, and HTML embed snippets.