AI API status monitoring for developers
Query live status of 77+ AI providers — OpenAI, Anthropic, Cursor, and more — via a free JSON API. No auth, no rate-limit surprises, code examples included.
The API
https://prismix.dev/api/v1/statuses {
"fetchedAt": "2026-06-12T14:00:00.000Z",
"cached": true,
"services": [
{
"id": "openai",
"name": "OpenAI",
"indicator": "none", // none | minor | major | critical | unknown
"description": "All Systems Operational",
"reachable": true,
"activeIncidents": 0,
"uptime30dPct": 99.82,
"recentIncidents30d": 2,
"lastIncidentAt": "2026-06-08T11:42:00Z"
}
]
} Code examples
# Check all services
curl https://prismix.dev/api/v1/statuses | jq '.services[] | {id,indicator,uptime30dPct}'
# Check a specific service
curl https://prismix.dev/api/v1/statuses | \
jq '.services[] | select(.id=="openai") | {indicator, activeIncidents, uptime30dPct}'
# Find all degraded/down services
curl https://prismix.dev/api/v1/statuses | \
jq '[.services[] | select(.indicator != "none" and .indicator != "unknown")]' import httpx
def check_ai_status(service_id: str) -> dict:
"""Return status dict for a given AI service ID."""
resp = httpx.get("https://prismix.dev/api/v1/statuses", timeout=5)
resp.raise_for_status()
data = resp.json()
for svc in data["services"]:
if svc["id"] == service_id:
return svc
raise ValueError(f"Unknown service: {service_id}")
def is_healthy(service_id: str) -> bool:
"""Return True only if the service is fully operational."""
svc = check_ai_status(service_id)
return svc["indicator"] == "none" and svc["activeIncidents"] == 0
# Example: guard an LLM call with a status check
if not is_healthy("openai"):
raise RuntimeError("OpenAI is degraded — skipping LLM call")
# Example: check your whole AI stack at startup
AI_STACK = ["openai", "anthropic", "cursor"]
for svc_id in AI_STACK:
svc = check_ai_status(svc_id)
print(f"{svc['name']:20} {svc['indicator']:10} {svc['uptime30dPct']:.2f}% uptime") const PRISMIX_URL = 'https://prismix.dev/api/v1/statuses';
async function getAIStatuses() {
const res = await fetch(PRISMIX_URL);
if (!res.ok) throw new Error(`Prismix API error: ${res.status}`);
const { services } = await res.json();
return services;
}
async function isServiceHealthy(serviceId) {
const services = await getAIStatuses();
const svc = services.find(s => s.id === serviceId);
if (!svc) throw new Error(`Unknown service: ${serviceId}`);
return svc.indicator === 'none' && svc.activeIncidents === 0;
}
// Pre-flight check before making expensive LLM calls
if (!(await isServiceHealthy('openai'))) {
throw new Error('OpenAI is currently degraded');
}
// Summarise your stack
const services = await getAIStatuses();
const myStack = ['openai', 'anthropic', 'cursor'];
const stackStatus = services.filter(s => myStack.includes(s.id));
console.table(stackStatus.map(s => ({
name: s.name,
indicator: s.indicator,
incidents: s.activeIncidents,
uptime: `${s.uptime30dPct.toFixed(2)}%`,
}))); - name: Check AI service health before integration tests
run: |
STATUS=$(curl -sf https://prismix.dev/api/v1/statuses | \
jq -r '.services[] | select(.id=="openai") | .indicator')
if [ "$STATUS" != "none" ]; then
echo "::warning::OpenAI is $STATUS — integration tests may be flaky"
fi Useful for flaky test triage — annotate CI runs with AI provider status so you know when failures are infrastructure-related.
Polling vs webhooks
🔄 REST API polling (free)
- ✓ Simple — one GET request
- ✓ Works from anywhere, any language
- ✓ 60 req/hr anonymous
- ✗ You decide when to check (add cron)
- ✗ 60-second cache lag on fresh data
Good for: startup health checks, CI gates, dashboards that refresh every minute.
🔔 Push webhooks (Pro)
- ✓ Event-driven — fires within ~6 min of incident
- ✓ HMAC-signed payload
- ✓ Discord, Slack, or any HTTPS endpoint
- ✓ Recovery notifications included
- ✗ Requires Prismix Pro ($10/mo)
Good for: automated incident response, Slack/Discord channels, on-call paging.
Pro pricing →Per-service API endpoints
Need current incidents or 30-day uptime for a specific provider? Each service has a dedicated JSON endpoint:
GET /api/v1/statuses → filter by id="openai" OpenAI page → GET /api/v1/statuses → filter by id="anthropic" Anthropic page → GET /api/v1/statuses → filter by id="cursor" Cursor page → GET /api/v1/statuses → filter by id="google-gemini" Google Gemini page → There is no per-service REST endpoint — filter the full snapshot on your side. The full snapshot is cached at the edge for 60 seconds so filtering client-side costs nothing extra. See API docs for incidents-specific endpoints.
Using Claude to check status? Use the MCP server instead
If you are building an AI agent and want it to check AI service status mid-conversation, the Prismix MCP server is easier than calling the REST API directly:
{ "mcpServers": { "prismix-status": { "url": "https://prismix.dev/api/v1/mcp" } } } MCP server setup guide →