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_countalongside the percentage.
GET /models/stats
Returns a daily usage and performance time series for a model.
| Parameter | Required | Description |
|---|---|---|
model | Yes | Model slug |
days | No | Number 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
}
]
}dateisYYYY-MM-DDin UTC. Cutting days in a local timezone shifts the whole series.dailyis sorted oldest first and holds at mostdaysentries, 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.
uptimeapplies 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 foruptime_30dto be a number while some dailyuptimevalues are null for the same model.