← All docs

GET /models/stats

Per-endpoint performance and uptime, plus daily usage time series. No authentication.

Two unauthenticated APIs that back the public model catalog. They carry no /v1 prefix and need no API key; a rate limit of 60 req/min applies per IP. Responses carry Cache-Control: public, max-age=60, s-maxage=300, stale-while-revalidate=300.

The 60 req/min limit is per IP and is a budget shared by a group of paths. /models/estimate, /models/stats, /models/benchmarks, /models/benchmarks/overview, /models/rankings, /models/apps, /models/apps/top, /models/changes and /models/feed.xml all draw from one bucket, so a screen that calls several of them in a row spends the budget that much faster. /models/catalog has its own separate bucket, so catalog reads keep working even when the detail calls have exhausted theirs.

Both endpoints expose approved, active models only; any other slug returns 404 model_not_found. Model slugs contain slashes, so pass the slug as a query parameter rather than a path segment.

How to read uptime honestly

Three caveats matter when interpreting these numbers.

  • Failover biases the value upward. When one request tries several endpoints and finally succeeds, the statistic is recorded only against the endpoint that succeeded. An attempt that failed and was rescued by another route is not recorded as a failure anywhere, so an endpoint that is frequently rescued looks healthier than it is.
  • Some user-caused errors may be mixed in. The error counter aims to count provider-attributed failures only, but not every call path classifies fault yet.
  • Small samples are noisy. Always read sample_count alongside the percentage.

GET /models/stats

Returns a daily usage and performance time series for a model.

ParameterRequiredDescription
modelYesModel slug
daysNoNumber of days to return. Defaults to 30 and is clamped to 7–90

An out-of-range days is clamped to the nearest bound rather than rejected with a 400, and a non-numeric or omitted value falls back to the default — so a single bad period toggle cannot break the whole page.

curl "https://api.everyais.com/models/stats?model=everyais/claude-opus-5&days=7"
{
  "model": "everyais/claude-opus-5",
  "days": 7,
  "daily": [
    {
      "date": "2026-08-11",
      "requests": 2431,
      "input_tokens": 8213044,
      "output_tokens": 1043221,
      "uptime": 99.75,
      "avg_latency_ms": 4180,
      "avg_ttft_ms": 664
    }
  ]
}
  • date is YYYY-MM-DD in UTC. Cutting days in a local timezone shifts the whole series.
  • daily is sorted oldest first and holds at most days entries, including today, which is still in progress and therefore always a partial day.
  • Days with no data are omitted entirely. Filling them with zeros would make "a day with zero requests" indistinguishable from "a day with no aggregation", and the chart would show a dip that never happened. Rendering the gaps is the client's job.
  • uptime applies its sample gate per day — it is null when that day saw fewer than 100 requests. Because a 30-day window can clear the bar while a single day does not, it is normal for uptime_30d to be a number while some daily uptime values are null for the same model.