Guides AI API status monitoring

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

GET https://prismix.dev/api/v1/statuses
Auth: None
Rate limit: 60 req/hr (anon) · 600 req/hr (Pro)
Cache: 60-second edge cache
Services: 77+ AI providers
{
  "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

curl Quick spot check
# 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")]'
Python In your app or script
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")
JavaScript Node.js / browser
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)}%`,
})));
GitHub Actions CI pre-flight check
- 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 →