Skip to main content
DownStatus

Developer API

v1Free

Public JSON API for real-time service status. No API key required. CORS enabled.

Base URL

https://isitdownstatus.com/api/v1

Multi-signal status. Every status field reflects both crowdsourced user reports and the service's official status page (where available). If an official incident is active, it overrides or upgrades the user-report status automatically. The raw official page value is exposed separately as official_indicator.

GET

/api/v1/status/:slug

Returns the current status for a single service. Replace :slug with the service identifier (e.g. discord, netflix).

Example request

curl https://isitdownstatus.com/api/v1/status/discord

Example response

{
  "ok": true,
  "data": {
    "slug": "discord",
    "name": "Discord",
    "category": "social",
    "logo_url": "https://...",
    "status": "operational",
    "official_indicator": null,
    "report_count_1h": 2,
    "report_count_24h": 18,
    "status_page_url": "https://isitdownstatus.com/en/status/discord",
    "updated_at": "2026-04-26T12:00:00.000Z"
  }
}
FieldTypeDescription
slugstringUnique service identifier
namestringDisplay name
categorystringCategory slug (see categories below)
statusstring"operational" | "degraded" | "down" — combined signal
official_indicatorstring | nullRaw official page value: "none" | "minor" | "major" | "critical", or null if unavailable
report_count_1hnumberProblem reports in the last hour
report_count_24hnumberProblem reports in the last 24 hours
status_page_urlstringFull URL to the DownStatus page for this service
updated_atstringISO 8601 timestamp of this response
GET

/api/v1/services

Returns all monitored services with their current combined status.

Query parameters

ParamValuesDefault
categorytelecom · cloud · gaming · social · finance · streaming · other · email · internetall
statusoperational · degraded · downall
limit1–500100

Examples

# All services
curl https://isitdownstatus.com/api/v1/services

# Only streaming services
curl "https://isitdownstatus.com/api/v1/services?category=streaming"

# Services currently experiencing issues
curl "https://isitdownstatus.com/api/v1/services?status=down"

# Top 10 most reported in last hour
curl "https://isitdownstatus.com/api/v1/services?limit=10"

Example response

{
  "ok": true,
  "meta": {
    "total": 7,
    "filters": { "category": "streaming", "status": null, "limit": 100 },
    "updated_at": "2026-04-26T12:00:00.000Z"
  },
  "data": [
    {
      "slug": "netflix",
      "name": "Netflix",
      "category": "streaming",
      "status": "operational",
      "official_indicator": null,
      "report_count_1h": 0,
      "report_count_24h": 5,
      "status_page_url": "https://isitdownstatus.com/en/status/netflix"
    },
    ...
  ]
}
GET

/api/v1/outages

Returns detected outages from the last 7 days. Outages are sourced from user-report spikes and official status pages.

Query parameters

ParamValuesDefault
statusongoing · resolvedall
slugany service slugall services
limit1–10020

Examples

# All recent outages
curl https://isitdownstatus.com/api/v1/outages

# Currently ongoing outages only
curl "https://isitdownstatus.com/api/v1/outages?status=ongoing"

# Outage history for a specific service
curl "https://isitdownstatus.com/api/v1/outages?slug=cloudflare"

Example response

{
  "ok": true,
  "meta": {
    "total": 2,
    "filters": { "status": "ongoing", "slug": null, "limit": 20 },
    "updated_at": "2026-04-26T12:00:00.000Z"
  },
  "data": [
    {
      "id": "abc123",
      "service": {
        "slug": "cloudflare",
        "name": "Cloudflare",
        "category": "cloud",
        "logo_url": "https://...",
        "status_page_url": "https://isitdownstatus.com/en/status/cloudflare"
      },
      "started_at": "2026-04-26T10:00:00.000Z",
      "resolved_at": null,
      "duration_minutes": null,
      "status": "ongoing",
      "peak_reports": 42,
      "description": "Minor incident",
      "source": "official_status_page"
    }
  ]
}
FieldTypeDescription
idstringOutage record identifier
serviceobjectService info: slug, name, category, logo_url, status_page_url
started_atstringISO 8601 — when the outage was detected
resolved_atstring | nullISO 8601 — when resolved, or null if still ongoing
duration_minutesnumber | nullTotal duration in minutes once resolved
statusstring"ongoing" | "resolved"
peak_reportsnumberMaximum user reports recorded during this outage
descriptionstring | nullDescription from official status page, if available
sourcestring"user_reports" | "official_status_page"

Status values

operational

Report volume within normal range. No official incident active.

degraded

Elevated report volume or a minor official incident. Some users may be affected.

down

Significantly elevated reports or a major/critical official incident. Widespread impact likely.

Rate limits & caching

Responses are cached for 30 seconds at the CDN level. There is no hard rate limit for read endpoints, but please be reasonable — avoid polling more than once per 30 seconds. If you need real-time data at high frequency, consider implementing your own caching layer.

JavaScript example

async function checkStatus(slug) {
  const res = await fetch(
    `https://isitdownstatus.com/api/v1/status/${slug}`
  );
  const { ok, data } = await res.json();
  if (!ok) throw new Error('Service not found');
  return data;
  // { slug, name, status, official_indicator, report_count_1h, ... }
}

// Check a single service
const discord = await checkStatus('discord');
console.log(discord.status);            // "operational"
console.log(discord.official_indicator); // null or "minor" / "major" / "critical"

// Get all ongoing outages
const res = await fetch('https://isitdownstatus.com/api/v1/outages?status=ongoing');
const { data: outages } = await res.json();
console.log(outages.length); // number of active outages

Python example

import requests

def check_status(slug):
    r = requests.get(f"https://isitdownstatus.com/api/v1/status/{slug}")
    r.raise_for_status()
    return r.json()["data"]

def get_ongoing_outages():
    r = requests.get("https://isitdownstatus.com/api/v1/outages", params={"status": "ongoing"})
    r.raise_for_status()
    return r.json()["data"]

discord = check_status("discord")
print(discord["status"])             # "operational"
print(discord["official_indicator"]) # None or "minor" / "major" / "critical"

outages = get_ongoing_outages()
for o in outages:
    print(o["service"]["name"], "—", o["status"])

This API is free and provided as-is. If you build something with it, we'd love to hear about it — get in touch.