ChatGPT Status API: Live JSON, Observed Uptime & Coverage

Free public ChatGPT status API. JSON endpoint with real-time status, connectivity latency, uptime percentages, and an embeddable SVG badge for your dashboards.

Free Public ChatGPT Status API

Drop live ChatGPT status into your dashboard, monitoring tool, or website with a single HTTP GET. The endpoint returns a stable JSON payload driven by the same engine that powers this site — combining the official OpenAI status feed and an independent reachability probe. Regional monitoring is not currently deployed, so the regional object reports unavailable. Observed uptime values are returned only when at least 99% of expected 30-second intervals are covered and no continuous missing-data gap exceeds 300 seconds; otherwise the corresponding fields are null.

Latency note: response_time_ms (aliased as connectivity_latency_ms) measures network reachability to chatgpt.com — it is not the time required for ChatGPT to generate a response. When the latest check is stale the endpoint returns HTTP 503 with Retry-After and status: "unknown".

Endpoint

GET https://ischatgptdown.chat/api/status

The endpoint is anonymous, CORS-enabled (Access-Control-Allow-Origin: *), and cacheable. Response is application/json; charset=utf-8 with Cache-Control: public, max-age=30, s-maxage=60.

Rate Limit

60 requests per minute per IP. Exceeding the limit returns HTTP 429 with a Retry-After: 60 header. Use the s-maxage value to cache aggressively if you hit the API from many callers.

Example Response

This is an illustrative snapshot of the current payload shape. Live values and timestamps change, and uptime values may be null when sample coverage is insufficient.

{
    "service": "ChatGPT",
    "status": "operational",
    "confidence": "high",
    "answer": "No — ChatGPT is currently operational.",
    "reason": "Independent signals agree ChatGPT is operational.",
    "data_fresh": true,
    "freshness": "fresh",
    "data_age_seconds": 5,
    "response_time_ms": 25,
    "connectivity_latency_ms": 25,
    "latency_measures": "network reachability to chatgpt.com, not ChatGPT response-generation time",
    "last_checked": "2026-08-31T11:11:01+00:00",
    "evaluated_at": "2026-08-31T11:11:06+00:00",
    "official_status": "operational",
    "api_status": "operational",
    "independent_check": "operational",
    "user_reports": {
        "level": "operational",
        "reports_last_15_min": 0,
        "available": true
    },
    "regional": {
        "level": "unavailable",
        "available": false,
        "note": "Regional monitoring is not currently available. Our independent reachability check runs from a single monitoring location.",
        "regions": []
    },
    "uptime": {
        "24h": null,
        "7d": null,
        "30d": null
    },
    "incidents": {
        "active_count": 0,
        "last_30_days": 13
    },
    "links": {
        "homepage": "https://ischatgptdown.chat/",
        "official_status": "https://status.openai.com/",
        "outage_history": "https://ischatgptdown.chat/outage-history/",
        "badge": "https://ischatgptdown.chat/badge/chatgpt-status.svg",
        "docs": "https://ischatgptdown.chat/status-api/"
    },
    "coverage": {
        "available": true,
        "target_interval_seconds": 30,
        "minimum_ratio_for_uptime": 0.99,
        "minimum_percent_for_uptime": 99,
        "maximum_gap_for_uptime_seconds": 300,
        "status_basis": "overall_monitor_status",
        "calculated_at": "2026-08-31T11:11:05+00:00",
        "24h": {
            "ratio": 0.346528,
            "percent": 34.6528,
            "covered_intervals": 998,
            "expected_intervals": 2880,
            "valid_samples": 1124,
            "operational_intervals": 998,
            "max_gap_seconds": 840,
            "gap_check_available": true,
            "sufficient": false,
            "observed_uptime_ratio": null,
            "observed_uptime_percent": null,
            "window_start": "2026-08-30T11:11:00+00:00",
            "window_end": "2026-08-31T11:11:00+00:00"
        },
        "7d": {
            "ratio": 0.275595,
            "percent": 27.5595,
            "covered_intervals": 5556,
            "expected_intervals": 20160,
            "valid_samples": 6007,
            "operational_intervals": 5537,
            "max_gap_seconds": 2190,
            "gap_check_available": true,
            "sufficient": false,
            "observed_uptime_ratio": null,
            "observed_uptime_percent": null,
            "window_start": "2026-08-24T11:11:00+00:00",
            "window_end": "2026-08-31T11:11:00+00:00"
        },
        "30d": {
            "ratio": 0.26559,
            "percent": 26.559,
            "covered_intervals": 22947,
            "expected_intervals": 86400,
            "valid_samples": 24558,
            "operational_intervals": 21135,
            "max_gap_seconds": 3510,
            "gap_check_available": true,
            "sufficient": false,
            "observed_uptime_ratio": null,
            "observed_uptime_percent": null,
            "window_start": "2026-08-01T11:11:00+00:00",
            "window_end": "2026-08-31T11:11:00+00:00"
        }
    }
}

Status Values

  • operational — service is running normally
  • degraded — service responds but with elevated latency or errors
  • partial — some features or regions are failing
  • down — widespread outage
  • maintenance — planned downtime
  • unknown — no recent data (engine still warming up)

Confidence Levels

  • high — multiple independent signals agree
  • medium — some signals disagree or threshold-driven
  • low — only one signal available

How the Status Fields Relate

official_status reflects OpenAI’s public status feed. independent_check reflects this site’s reachability probe. The top-level status is this site’s combined classification. Observed uptime is derived from stored overall_monitor_status intervals; it is not an OpenAI SLA or an official OpenAI uptime figure.

Uptime Values and Missing Data

When sufficient, uptime.24h, uptime.7d, and uptime.30d contain observed ratios from 0 to 1 and mirror each window’s observed_uptime_ratio. Multiply by 100 for a display-ready percentage: 0.9867 → 98.67%. If either publishing gate fails, these fields are null. Do not convert null to 0% or 100%, and do not present these values as an official OpenAI SLA.

Coverage Object

The coverage object explains whether observed uptime is publishable. coverage.available means the coverage calculation itself was verified; it does not mean every window is sufficient. For each window, check sufficient. percent is monitoring coverage, not uptime. covered_intervals counts distinct 30-second intervals, while valid_samples counts stored results. Multiple results in one interval never increase coverage, and the least healthy valid result determines that interval.

The current policy is exposed by target_interval_seconds: 30, minimum_ratio_for_uptime: 0.99, minimum_percent_for_uptime: 99, maximum_gap_for_uptime_seconds: 300, and status_basis: "overall_monitor_status". A window is sufficient only when at least 99% of expected intervals are covered, gap validation is available, and no continuous missing-data gap exceeds 300 seconds.

Code Examples

curl

curl -s https://ischatgptdown.chat/api/status | jq

JavaScript (fetch)

const res  = await fetch("https://ischatgptdown.chat/api/status");
const data = await res.json();

console.log(data.service, data.status, data.response_time_ms + "ms");
if (data.status !== "operational") {
    console.warn("ChatGPT is", data.status, "—", data.reason);
}

Node.js

import https from "node:https";

https.get("https://ischatgptdown.chat/api/status", (res) => {
    let body = "";
    res.on("data", (c) => (body += c));
    res.on("end", () => {
        const s = JSON.parse(body);
        console.log(s.status, s.confidence);
    });
});

Python

import requests

r = requests.get("https://ischatgptdown.chat/api/status", timeout=5)
s = r.json()

print(s["status"], s["response_time_ms"], "ms")

PHP

$json   = file_get_contents( "https://ischatgptdown.chat/api/status" );
$status = json_decode( $json, true );
echo $status["status"];

Embeddable Status Badge

A lightweight SVG badge that updates automatically — ideal for READMEs, tool directories, and internal dashboards.

ChatGPT status badge

HTML Embed

<a href="https://ischatgptdown.chat/" target="_blank" rel="noopener">
    <img src="https://ischatgptdown.chat/badge/chatgpt-status.svg" alt="ChatGPT status" />
</a>

Markdown Embed (README-friendly)

[![ChatGPT status](https://ischatgptdown.chat/badge/chatgpt-status.svg)](https://ischatgptdown.chat/)

BBCode

[url=https://ischatgptdown.chat/][img]https://ischatgptdown.chat/badge/chatgpt-status.svg[/img][/url]

CORS and Browser Use

The API responds with Access-Control-Allow-Origin: *, so it can be called directly from browser JavaScript on any origin.

Terms of Use

The API is free to use. Please cache responses (we serve with 30-second max-age) and back off if you get 429. Unfair traffic (scraping loops, no caching) may trigger a permanent block.

Frequently Asked Questions

How often does the status update?

The backend monitor targets a 30-second interval when scheduled background tasks run on time. Gaps can occur, and uptime fields remain null until sample coverage is sufficient. Responses advertise max-age=30 for browsers and s-maxage=60 for shared caches, so a cached client can briefly receive an older sample. When freshness matters, compare last_checked with your own current time.

Will the API remain free?

The endpoint is currently free to use without an account. Access terms, limits or pricing may change; clients should cache responses and handle rate limits or unavailability safely.

Can I get historical data through the API?

The /api/status endpoint includes 24h/7d/30d uptime fields when sample coverage is sufficient; otherwise those fields are null. It also includes a 30-day incident count. A dedicated incident-history endpoint is on the roadmap — contact us via the contact page if you need it sooner.