Alle Dienste / API

Status-API

Live-Ergebnisse, Meldezahlen und den offiziellen Status als JSON. Badges, das Widget und der Basis-Status können von anderen Websites genutzt werden. Ein kostenpflichtiger Schlüssel schaltet Frühwarnwerte, regionale Prüfungen, Evidenz, Karten, eine tiefere Historie und den vollständigen Katalog frei. See Status-Badges.

Limits

  • Ohne Schlüssel: 30 Anfragen pro Minute pro Netzwerk und 5000 pro Tag. Kostenlos. Basis-Status, Badges, das Widget und die Suche bleiben verfügbar. Kostenpflichtige Felder entfallen und enthalten einen Upgrade-Hinweis.
  • Kostenpflichtiger API-Schlüssel: 600 Anfragen pro Minute, 100000 pro Tag, $19/mo. Ein bezahlter Schlüssel schaltet Frühwarn-Z-Werte, regionale Prüfunterlagen, Evidenz, Karten, Verlaufscharts über 24 Stunden, den vollständigen Katalog, Ausfallhistorie älter als 30 Tage, Seiten mit bis zu 1.000 Einträgen und CSV-Export frei. Sende den Schlüssel in einem Authorization- oder X-API-Key-Header. Journalisten können auf /press einen kostenlosen Presse-Schlüssel für ein höheres Minutenlimit beantragen. Presse- und andere kostenlose Schlüssel enthalten keinen Bulk-Export, kein CSV und keine Historie älter als 30 Tage. See /press.
  • Jede /api/v1-Antwort enthält X-RateLimit-Limit, X-RateLimit-Remaining und X-RateLimit-Reset (Unix-Sekunden, wenn das aktuelle Fenster endet), plus eine tägliche Restmenge. Über dem Limit erhältst du 429 mit Retry-After. Viele GET-Antworten werden 30–600 Sekunden zwischengespeichert; einige, darunter die Suche, werden nicht gecacht.

Endpoints

GET /api/v1/status/<slug>

Current verdict for one service: level, official status, simple report counts and the last check time. Early-warning z-scores and regional check detail need a paid key; without one they are omitted and the body includes an upgrade hint.

breaches contains verified historical site breaches matched to the service homepage domain (or an empty array). Each record includes title, breach date, account count, data classes, sanitized description_html and source metadata. These are not live security alerts or email lookups. Daten von Have I Been Pwned (CC BY 4.0); consumers must show this credit and source link wherever they display the data or descriptions. Formatting has been sanitized. The top-level breach_source repeats this attribution.

curl https://damnisitdown.com/api/v1/status/github
{
  "service": { "slug": "github", "name": "GitHub", "url": "https://damnisitdown.com/status/github" },
  "verdict": { "level": "operational", "title": "GitHub is up", "summary": "…" },
  "confidence": 0.92,
  "regions": [ { "region": "enam", "label": "US East", "ok": true, "latency_ms": 81, "checked_at": "2026-10-31T14:02:11.000Z" } ],
  "official": { "indicator": "none", "description": "All Systems Operational" },
  "reports": { "last_15m": 0, "last_60m": 1, "baseline_per_hour": 0.4 },
  "last_checked": "2026-10-31T14:03:00.000Z"
}

GET /api/v1/services

Jeder katalogisierte Dienst mit Slug und aktuellem Level. Die vollständige Liste braucht einen bezahlten Schlüssel; ohne Schlüssel erhältst du die Anzahl, die Kategorien und einen Upgrade-Hinweis. Zum Suchen nutze /api/v1/search oder /api/v1/suggest?q= (begrenzt).

curl https://damnisitdown.com/api/v1/services

GET /api/v1/outages?service=<slug>&limit=50

Recent outages, newest first: start, peak, recovery, duration, regions, related provider, plus confirmed, signal and label (the same evidence gate as explainer pages, alerts and the Business SLA report). Optional query: service, since and before (ISO 8601, YYYY-MM-DD or unix seconds), confirmed=1 or 0, limit and format=csv. Ohne bezahlten Schlüssel ist das Limit höchstens 200 und Datumsfilter bleiben innerhalb der letzten etwa 30 Tage; CSV ist nicht verfügbar. Ein bezahlter Schlüssel (19 $/Monat) schaltet eine tiefere Historie, Seiten mit bis zu 1.000 Einträgen, einen next.before-Cursor zum Blättern älterer Zeilen sowie CSV- oder JSON-Bulk-Export frei. Anonyme und kostenlose Schlüssel erhalten next.before weiterhin innerhalb des 30-Tage-Fensters. Der JSON-Body enthält next (oder null) und einen Hinweis, wie bestätigte Vorfälle gezählt werden.

curl "https://damnisitdown.com/api/v1/outages?service=github&confirmed=1&limit=10"

POST /api/v1/diagnose/<slug>

“Is it me?” diagnosis: points to the most likely layer (the service, an upstream provider, a region, your ISP or area, DNS, or your Wi-Fi / device) with exactly two steps to try. Send your own test results as JSON; every field is optional: site, ping, internet ("ok" or "fail"), dns_cloudflare, dns_google (ok, nxdomain, servfail, error), optional reach times (site_ms, ping_ms, internet_ms, dns_cloudflare_ms, dns_google_ms), conn (wifi, cellular, ethernet), locale (en, de, es, id) and record (set false to skip anonymous counting). If you send no DNS results, we look them up from our side. The response has verdict (code, title, detail, steps, layer, links), a short report_note, and context (your provider and region, DNS, our checks, upstream providers). Per caller, never cached; raw IPs are not stored. Copy is phrased as “most likely” and shows the evidence; we cannot see your own DNS resolver from a browser.

curl -X POST https://damnisitdown.com/api/v1/diagnose/slack \
  -H 'content-type: application/json' \
  -d '{"site":"fail","internet":"ok","conn":"wifi"}'

GET /api/v1/outages/<id>

One public outage with its timeline of events, plus confirmed, signal and label. 404 if the id is unknown, still too short to be public, or flagged as a false positive.

Cached for 30 seconds.

curl https://damnisitdown.com/api/v1/outages/63
{
  "outage": { "id": 63, "service": "quay", "status": "ongoing", "title": "Major incident reported", "started_at": "2026-11-02T18:33:38.000Z", "peak_at": "2026-11-02T18:33:38.000Z", "peak_level": "major_outage", "peak_confidence": 0.78, "recovered_at": null, "duration_seconds": 172, "regions_affected": [], "related_provider": null, "max_reports_15m": 0, "confirmed": false, "signal": "possible", "label": "Unconfirmed / possible issue (not counted)", "url": "https://damnisitdown.com/outages/quay/2026-11-02-63" },
  "service_name": "Quay",
  "events": [{ "at": "2026-11-02T18:33:38.000Z", "kind": "start", "text": "Outage detected: …" }]
}

GET /api/v1/outages/<id>/evidence

Die rohe Evidenz hinter einem Ausfall, auch unter den evidence.json- und evidence.csv-URLs der Ausfallseite. Dafür ist ein bezahlter Schlüssel nötig; ohne Schlüssel enthält der Body einen Upgrade-Hinweis statt eines Fehlers. Counts only, no personal data.

Cached for 1–5 minutes.

curl https://damnisitdown.com/api/v1/outages/63/evidence

GET /api/v1/forecast/<slug>

Outage Weather for one service: planned_maintenance the vendor announced on its own status page for the next 7 days (its title, details, starts_at, ends_at and source_url), a recurring_window we observed (or null), and history_pattern, which stays null until the service has enough verified incidents (see pattern_rules). Announced maintenance is not a prediction and not an outage. GET /api/v1/forecast lists every announcement for the next 7 days, plus the recurring_windows and history_patterns the Outage Weather page shows (each null if it could not be loaded; cached 5 minutes).

Cached for 2 minutes.

curl https://damnisitdown.com/api/v1/forecast/cloudflare

GET /api/v1/status/<slug>/history?range=24h

Chartdaten für einen Dienst: Nutzermeldungen, Baseline, Latenz und Prüfergebnisse pro Zeitfenster. range ist 24h (Standard und kostenlos). 7d und 30d brauchen einen bezahlten Schlüssel; ohne Schlüssel wird die 24h-Serie mit einem Upgrade-Hinweis zurückgegeben.

Cached for 60 seconds.

curl "https://damnisitdown.com/api/v1/status/github/history?range=7d"
{ "slug": "github", "range": "24h", "points": [{ "t": "2026-11-01T18:45:00.000Z", "reports": 0, "baseline": 0, "latency_ms": 68, "checks": 4, "failures": 0 }, …] }

GET /api/v1/status/<slug>/map?hours=24

Woher Problemmeldungen kommen: Orte, Netze und Problemtypen. hours ist 1, 6 oder 24 (Standard). Kleine Gruppen werden aus Datenschutzgründen ausgeblendet (hidden zählt sie). Dafür ist ein bezahlter Schlüssel nötig; ohne Schlüssel enthält der Body einen Upgrade-Hinweis.

Cached for 60 seconds.

curl "https://damnisitdown.com/api/v1/status/github/map?hours=6"
{ "hours": 24, "total": 0, "places": [], "networks": [], "hidden": 0, "points": [], "problems": [] }

Up to 20 services with problems right now, worst level first, then most reports in the last hour.

Cached for 30 seconds.

curl https://damnisitdown.com/api/v1/trending
{ "count": 20, "services": [{ "slug": "bitpanda", "name": "Bitpanda", "category": "Money", "level": "major_outage", "title": "Major incident reported", "reports_60m": 0 }, …] }

The most-viewed services over the last 7 days, with their current level.

Cached for 5 minutes.

curl https://damnisitdown.com/api/v1/popular
{ "count": 50, "window_days": 7, "services": [{ "rank": 1, "slug": "starlink", "name": "Starlink", "level": "operational", "source": "traffic", "url": "/status/starlink" }, …] }

GET /api/v1/search?q=<text>

Find services by name, slug or website (up to 25 matches; q up to 80 characters). If q looks like a domain, domain gives its host and the matching slug, or null if we don't track it yet.

Cached for 0 seconds (not cached).

curl "https://damnisitdown.com/api/v1/search?q=example.com"
{ "query": "example.com", "services": [], "domain": { "host": "example.com", "slug": null } }

GET /api/v1/widget?slugs=<slug>,<slug>

A compact level and title for a short list of services (comma-separated, up to 12), in the order you ask. Unknown slugs are skipped.

Cached for 60 seconds.

curl "https://damnisitdown.com/api/v1/widget?slugs=github,slack"
{ "updated_at": "2026-11-02T18:36:22.307Z", "services": [{ "slug": "github", "name": "GitHub", "level": "operational", "title": "No problems detected" }, { "slug": "slack", "name": "Slack", "level": "operational", "title": "No problems detected" }] }

GET /api/v1/reliability/<YYYY-MM|30d>

The Zuverlässigkeits-Rangliste as JSON. Use a month (YYYY-MM, from 2026-10 to the current month) or 30d for the rolling 30 days. GET /api/v1/reliability redirects (302) to the current month. Months freeze on the 1st (UTC), after which final is true.

  • cat (optional): one category, for example AI or Cloud & developer. An unknown category returns 400 with {"error":"bad_category","categories":[…]}. With cat, movers is null and categories is left out.
  • rows: every ranked service. uptime is a percentage; downtime_sec, median_sec, covered_sec and down_sec are seconds; low_confidence marks fewer than 50 checks a day.
  • most_reliable and most_outage_prone: slugs, top 10.
  • movers: the biggest month-over-month uptime changes for services ranked in both months. It is null until movers_available_from (2026-12), because the first month of data was partial. From then on it looks like this (uptime_change is in percentage points, change is places gained in rank):
"movers": {
  "prev": "2026-11",
  "up": [{ "slug": "…", "name": "…", "rank": 1, "prev_rank": 4, "change": 3, "uptime": 100, "prev_uptime": 99.2, "uptime_change": 0.8 }],
  "down": [ … ]
}

Unknown or out-of-range periods return 404 with {"error":"not_found"}. Data is CC BY 4.0.

Cached for 10 minutes for live periods, 1 hour once a month is final.

curl "https://damnisitdown.com/api/v1/reliability/2026-11?cat=AI"
{
  "period": { "key": "2026-11", "label": "November 2026", "start": 1793491200, "end": 1793644579, "final": false, "days": 2, "kind": "month" },
  "final": false,
  "category": null,
  "thresholds": { "min_days": 2, "min_checks": 24, "min_checks_per_day": 12, "confident_checks_per_day": 50 },
  "excluded": 730,
  "low_confidence": 0,
  "methodology": "Uptime = covered time minus downtime, …",
  "most_reliable": ["1password", "adobe", …],
  "most_outage_prone": ["bluesky", "sentry", …],
  "movers": null,
  "movers_available_from": "2026-12",
  "categories": [{ "category": "AI", "services": 16, "uptime": 100, "outages": 0, "best": "anthropic-api", "worst": "spacex-com" }, …],
  "rows": [{ "slug": "1password", "name": "1Password", "category": "Productivity", "total": 307, "ok": 307, "days": 2, "outages": 0, "downtime_sec": 0, "median_sec": 0, "reports": 0, "covered_sec": 153379, "down_sec": 0, "uptime": 100, "rank": 1, "cat_rank": 1, "checks_per_day": 154, "low_confidence": false }, …],
  "generated_at": "2026-11-02T18:36:19.000Z"
}

GET /api/v1/accuracy?page=1

Our accuracy scorecard as JSON: the same hourly snapshot as the page, for the last 30 days and all time. Percentages are out of all published incidents, retractions included; speed.median_lead_min is positive when we were first and negative when the vendor was. matched_incidents lists every incident in the speed sample (difference_sec is vendor time minus ours). retractions lists every retraction, 50 per page, newest first; page beyond the last returns 404.

Cached for 10 minutes.

curl https://damnisitdown.com/api/v1/accuracy
{ "computed_at": "2026-11-12T11:00:00.000Z", "last_30_days": { "published": 120, "retracted": 3, "retracted_pct": 2.5, "confirmed": 80, "confirmed_pct": 66.7, "speed": { "matched": 4, "we_were_first": 1, "vendor_was_first": 3, "within_a_minute": 0, "median_lead_min": -12.5 }, … }, "all_time": { … }, "matched_incidents": [ … ], "retractions": { "total": 3, "page": 1, "pages": 1, "rows": [{ "id": 993, "service": "changenow", "original_label": "major_outage", "reason": "summary_only", … }] } }

Errors and headers

Errors are JSON with an error code and sometimes a message. CORS ist für Badges, das Widget, die Erweiterungsprüfung und den Basis-Live-Status offen, damit du sie im Browser einbetten kannst. Andere JSON-Routen erlauben Same-Origin-Aufrufe und Anfragen mit API-Schlüssel. Kostenpflichtige Felder beim Status (Frühwarn-Z-Wert und Regionaldetails), Evidenz, Karten, Verlauf über 24 Stunden und der volle Katalog brauchen einen bezahlten Schlüssel; ohne Schlüssel entfallen diese Felder und der Body enthält einen Upgrade-Hinweis statt eines Fehlers. Most responses also carry X-RateLimit-Limit and X-API-Tier. The endpoints above count toward your per-minute and daily limits. The speed-test endpoints (/api/v1/speed/*) and the app endpoints for reports, push alerts and watchlist sync are for our own site and apps, have their own per-network limits, and aren't a supported public API.

Push alerts to Slack, Discord or a webhook

Rather not poll? Kostenlose Slack-, Discord- oder signierte JSON-Webhook-Meldungen einrichten for confirmed down and recovered events. Early warnings are part of Owner Alerts. Requests are signed with X-DIID-Signature (HMAC-SHA256); see the payload and how to verify it.

Using an AI assistant? Connect our free MCP-Server (/mcp) to Claude, ChatGPT, Cursor or VS Code. Want a badge? Every status page has an embed snippet, or use /badge/<slug>.svg (add ?uptime=1 for 30-day uptime).

Using a key

curl -H "Authorization: Bearer diid_…" https://damnisitdown.com/api/v1/status/github
const res = await fetch('https://damnisitdown.com/api/v1/status/github', {
  headers: { Authorization: 'Bearer diid_…' },
})
const { verdict } = await res.json()

Keep keys on your server. A key in browser code can be copied. Prefer the Authorization or X-API-Key header. Level values: operational, degraded, possible_outage, outage, major_outage, unknown.

Business API

Business workspaces (Team and Business plans) get a workspace API key under Settings. Send it as Authorization: Bearer diidb_…. Read-only, JSON, rate-limited per key.

  • GET /api/biz/v1/workspace: plan, status, limits
  • GET /api/biz/v1/vendors: watched vendors with live level
  • GET /api/biz/v1/endpoints: your own endpoints, state and last check
  • GET /api/biz/v1/incidents: recent vendor and endpoint incidents. Each vendor incident has confirmed (boolean), signal, label and url (its outage page). Unconfirmed incidents are still listed, with confirmed: false. Endpoint incidents come from your own checks and are always confirmed: true with signal: "own_check".
  • GET /api/biz/v1/sla?month=YYYY-MM: SLA rows (add &format=csv for CSV)
  • GET /api/biz/v1/domains: custom status-page domains with hostname and SSL status, your plan limit and the CNAME target
  • GET /api/biz/v1/shop: Shop health (Business): page checks with state and last error, plus SSL certificate and domain expiry dates and days left
  • GET /api/biz/v1/clients: MSP plan: client status pages with overall state and each vendor's live level

Confirmed vs unconfirmed

confirmed: true means our own checks confirmed the incident. It follows the same evidence rules as alerts, and it is exactly what the SLA report and the downtime cost estimate count. signal is one of confirmed, possible (not confirmed by our checks), reports (people are reporting problems, not confirmed), vendor (reported by the vendor only) or maintenance (vendor maintenance). A new incident can show confirmed: false for its first few minutes, until it has lasted long enough to count. Since Nov 10, 2026 the SLA report counts confirmed incidents only. Other vendor time shows as notCountedSec (not_counted_sec in CSV).

Custom domains. Serve your claimed status page at your own hostname (Team: 1, Business: 5). Add it under Domains in your workspace, then create a CNAME from your hostname to customers.damnisitdown.com. SSL is issued automatically. The hostname serves your status page at /; /statuspage/<slug> keeps working and sets the custom domain as canonical.

See damnisitdown Business for plans.

Get an API key · $19/mo

After payment you land on your API account page, where you reveal your key once. Cancel any time from the same page.

Already a customer? Get a link to your API account.