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.