Public API

One free endpoint returns the entire site's data as JSON — current status, latency, 90 days of history, recent incidents, and reliability rankings for all monitored LLM providers. No signup, no API key, no rate limits.

Free forever
No auth, no rate limits, no signup. Hit the endpoint and parse JSON.
1-minute freshness
Backend probes run every 60 seconds from Cloudflare's edge.
Everything in one call
Status, latency, history, daily rollups, incidents, and rankings in a single response.
Endpoint
GET https://llmstatus.net/api/status

There's also an RSS feed of incidents at https://llmstatus.net/api/rss for feed readers.

Response Structure
updatedAt
string · ISO 8601
Timestamp of the most recent probe cycle that produced this payload. Usually within the last 60 seconds.
providers
object
Keyed by provider id (openai, anthropic, gemini, groq, mistral, xai, cohere, perplexity, together, deepseek, bedrock, azure-openai). Each value contains:
idProvider slug, e.g. openai.
nameHuman-readable name, e.g. "OpenAI".
statusOne of operational, degraded, outage, unknown.
latencyMost recent response time in milliseconds. For OpenAI and Anthropic this is the real API probe latency, not the status-page CDN time.
descriptionStatus description, e.g. "All Systems Operational" or "Slow response (12.3s)".
checkedAtISO 8601 timestamp of the latest probe for this provider.
historyArray of up to 90 most recent checks. Each entry is {t, s, l} (timestamp, status, latency) — short keys to keep the payload small.
dailyArray of up to 90 daily rollups. Each entry is {date, checks, operational, avgLatency}. Daily uptime % = operational / checks * 100.
incidents
array
Up to 50 most recent incidents across all providers, newest first. Each item:
idUnique incident id, also used as the URL slug at /:providerId/incidents/:id.
providerIdProvider slug.
providerNameHuman-readable name.
statusPageOfficial statuspage URL for the provider, or null.
statusdegraded or outage.
startedAtISO 8601 timestamp when the incident opened.
endedAtISO 8601 timestamp when it closed, or null if ongoing.
durationDuration in seconds, or null if ongoing.
peakLatencyHighest latency in milliseconds observed during the incident.
descriptionStatus description captured at the time of the incident.
reliability
array
All monitored providers ranked by lifetime uptime percentage, highest first. Each entry:
providerIdProvider slug.
providerNameHuman-readable name.
uptimePctLifetime uptime percentage (0–100) since first observation.
totalIncidentsTotal count of incidents recorded for this provider.
outageCountHow many of those were outage-class.
degradedCountHow many were degraded-class.
totalDowntimeMsTotal cumulative downtime in milliseconds, including the ongoing incident if any.
firstSeenAtISO 8601 of the first probe ever recorded for this provider.
lastIncidentAtISO 8601 of the most recent incident, or null.
ongoingBoolean — true if this provider currently has an open incident.
currentStatusSame as providers[id].status — repeated here for convenience.
Code Examples
JavaScript
fetch('https://llmstatus.net/api/status')
  .then(r => r.json())
  .then(data => {
    console.log('OpenAI status:', data.providers.openai.status);
    console.log('Latency:', data.providers.openai.latency, 'ms');
    const down = Object.values(data.providers).filter(p => p.status !== 'operational');
    console.log(down.length, 'providers not operational');
  });
Python
import requests

data = requests.get('https://llmstatus.net/api/status').json()

print('OpenAI status:', data['providers']['openai']['status'])
print('Latency:', data['providers']['openai']['latency'], 'ms')

down = [p for p in data['providers'].values() if p['status'] != 'operational']
print(len(down), 'providers not operational')
Usage Notes