Semua layanan / API

API status

Hasil langsung, jumlah laporan, dan status resmi sebagai JSON. Lencana, widget, dan status dasar dapat dipakai dari situs lain. Kunci berbayar membuka skor peringatan dini, pemeriksaan regional, bukti, peta, riwayat lebih dalam, dan katalog lengkap. See lencana status.

Limits

  • Tanpa kunci: 30 permintaan per menit per jaringan, dan 5000 per hari. Gratis. Status dasar, lencana, widget, dan pencarian tetap tersedia. Bidang berbayar dihilangkan dan menyertakan petunjuk peningkatan.
  • Kunci API berbayar: 600 permintaan per menit, 100000 per hari, $19/mo. Kunci berbayar membuka z-score peringatan dini, detail pemeriksaan regional, bukti, peta, grafik riwayat lebih dari 24 jam, katalog lengkap, riwayat gangguan lebih dari 30 hari, halaman hingga 1.000, dan ekspor CSV. Kirim kunci di header Authorization atau X-API-Key. Jurnalis yang bekerja dapat meminta kunci pers gratis di /press untuk batas per menit yang lebih tinggi. Kunci pers dan kunci gratis lainnya tidak mencakup ekspor massal, CSV, atau riwayat lebih dari 30 hari. See /press.
  • Setiap respons /api/v1 membawa X-RateLimit-Limit, X-RateLimit-Remaining, dan X-RateLimit-Reset (detik Unix saat jendela saat ini direset), plus sisa kuota harian. Jika melewati batas, kamu mendapat 429 dengan Retry-After. Banyak respons GET di-cache selama 30–600 detik; beberapa, termasuk pencarian, tidak di-cache.

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. Data dari 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

Setiap layanan katalog dengan slug dan level saat ini. Daftar lengkap membutuhkan kunci berbayar; tanpanya, kamu mendapat jumlah, kategori, dan petunjuk peningkatan. Untuk pencarian, gunakan /api/v1/search atau /api/v1/suggest?q= (dibatasi).

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. Tanpa kunci berbayar, limit paling banyak 200 dan filter tanggal tetap dalam sekitar 30 hari terakhir; CSV tidak tersedia. Kunci berbayar ($19/bln) membuka riwayat lebih dalam, halaman hingga 1.000, kursor next.before untuk menelusuri baris yang lebih lama, serta ekspor massal CSV atau JSON. Kunci anonim dan gratis tetap menerima next.before di dalam jendela 30 hari. Body JSON menyertakan next (atau null) dan catatan tentang cara insiden terkonfirmasi dihitung.

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

Bukti mentah di balik satu gangguan, juga di URL evidence.json dan evidence.csv pada halaman gangguan. Ini membutuhkan kunci berbayar; tanpanya, body menyertakan petunjuk peningkatan, bukan error. 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

Data grafik untuk satu layanan: laporan pengguna, baseline, latensi, dan hasil pemeriksaan per interval waktu. range adalah 24h (default dan gratis). 7d dan 30d membutuhkan kunci berbayar; tanpanya, seri 24h dikembalikan beserta petunjuk peningkatan.

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

Dari mana laporan masalah berasal: tempat, jaringan, dan jenis masalah. hours adalah 1, 6, atau 24 (default). Kelompok kecil disembunyikan demi privasi (hidden menghitungnya). Ini membutuhkan kunci berbayar; tanpanya, body menyertakan petunjuk peningkatan.

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 papan peringkat keandalan 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 terbuka untuk lencana, widget, pemeriksaan ekstensi, dan status langsung dasar, sehingga kamu dapat menyematkannya dari browser. Rute JSON lain mengizinkan panggilan same-origin dan pemanggil dengan kunci API. Bidang berbayar pada status (z-score peringatan dini dan detail regional), bukti, peta, riwayat lebih dari 24 jam, dan katalog lengkap membutuhkan kunci berbayar; tanpanya, bidang itu dihilangkan dan body menyertakan petunjuk peningkatan, bukan error. 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? Siapkan peringatan webhook Slack, Discord, atau JSON tertanda secara gratis 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 Server MCP (/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.