Todos los servicios / API
API de estado
Veredictos en vivo, recuentos de reportes y el estado oficial en JSON. Las insignias, el widget y el estado básico se pueden usar desde otros sitios. Una clave de pago desbloquea puntuaciones de alerta temprana, comprobaciones regionales, evidencia, mapas, un historial más profundo y el catálogo completo. See insignias de estado.
Limits
- Sin clave: 30 solicitudes por minuto por red y 5000 al día. Gratis. El estado básico, las insignias, el widget y la búsqueda siguen disponibles. Los campos de pago se omiten e incluyen una indicación para mejorar el plan.
- Clave de API de pago: 600 solicitudes por minuto, 100000 al día, $19/mo. Una clave de pago desbloquea las puntuaciones z de alerta temprana, el detalle de comprobaciones regionales, la evidencia, los mapas, los gráficos de historial de más de 24 horas, el catálogo completo, el historial de caídas de más de 30 días, páginas de hasta 1.000 y la exportación CSV. Envía la clave en una cabecera Authorization o X-API-Key. Los periodistas en activo pueden solicitar en /press una clave de prensa gratuita para un límite por minuto más alto. Las claves de prensa y otras claves gratuitas no incluyen la exportación masiva, CSV ni el historial de más de 30 días. See /press.
- Cada respuesta de /api/v1 incluye X-RateLimit-Limit, X-RateLimit-Remaining y X-RateLimit-Reset (segundos Unix en que se reinicia la ventana actual), más un recuento diario restante. Si superas el límite, recibes 429 con Retry-After. Muchas respuestas GET se almacenan en caché 30–600 segundos; algunas, incluida la búsqueda, no se cachean.
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. Datos de 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
Cada servicio del catálogo con su slug y nivel actual. La lista completa necesita una clave de pago; sin ella, obtienes el recuento, las categorías y una indicación de mejora. Para buscar, usa /api/v1/search o /api/v1/suggest?q= (con un tope).
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. Sin una clave de pago, el límite es como máximo 200 y los filtros de fecha se quedan en unos 30 días; CSV no está disponible. Una clave de pago (19 $/mes) desbloquea un historial más profundo, páginas de hasta 1.000, un cursor next.before para recorrer filas más antiguas y la exportación masiva en CSV o JSON. Las claves anónimas y gratuitas siguen recibiendo next.before dentro de la ventana de 30 días. El cuerpo JSON incluye next (o null) y una nota sobre cómo se cuentan los incidentes confirmados.
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
La evidencia en bruto de una caída, también en las URL evidence.json y evidence.csv de la página de la caída. Esto necesita una clave de pago; sin ella, el cuerpo incluye una indicación de mejora en lugar de un 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
Datos del gráfico de un servicio: reportes de usuarios, línea base, latencia y resultados de comprobación por intervalo. range es 24h (predeterminado y gratuito). 7d y 30d necesitan una clave de pago; sin ella, se devuelve la serie de 24h con una indicación de mejora.
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
De dónde vienen los reportes de problemas: lugares, redes y tipos de problema. hours es 1, 6 o 24 (predeterminado). Los grupos pequeños se ocultan por privacidad (hidden los cuenta). Esto necesita una clave de pago; sin ella, el cuerpo incluye una indicación de mejora.
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": [] }GET /api/v1/trending
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 }, …] }GET /api/v1/popular
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 clasificación de fiabilidad 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 exampleAIorCloud & developer. An unknown category returns400with{"error":"bad_category","categories":[…]}. Withcat,moversisnullandcategoriesis left out.rows: every ranked service.uptimeis a percentage;downtime_sec,median_sec,covered_secanddown_secare seconds;low_confidencemarks fewer than 50 checks a day.most_reliableandmost_outage_prone: slugs, top 10.movers: the biggest month-over-month uptime changes for services ranked in both months. It isnulluntilmovers_available_from(2026-12), because the first month of data was partial. From then on it looks like this (uptime_changeis in percentage points,changeis 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 está abierto para insignias, el widget, la comprobación de la extensión y el estado básico en vivo, para que puedas incrustarlos desde un navegador. Otras rutas JSON permiten llamadas del mismo origen y de quienes tienen una clave de API. Los campos de pago del estado (puntuación z de alerta temprana y detalle regional), la evidencia, los mapas, el historial de más de 24 horas y el catálogo completo necesitan una clave de pago; sin ella, esos campos se omiten y el cuerpo incluye una indicación de mejora en lugar de un 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? Configura alertas gratuitas por Slack, Discord o webhook JSON firmado 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 Servidor 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, limitsGET /api/biz/v1/vendors: watched vendors with live levelGET /api/biz/v1/endpoints: your own endpoints, state and last checkGET /api/biz/v1/incidents: recent vendor and endpoint incidents. Each vendor incident hasconfirmed(boolean),signal,labelandurl(its outage page). Unconfirmed incidents are still listed, withconfirmed: false. Endpoint incidents come from your own checks and are alwaysconfirmed: truewithsignal: "own_check".GET /api/biz/v1/sla?month=YYYY-MM: SLA rows (add&format=csvfor CSV)GET /api/biz/v1/domains: custom status-page domains with hostname and SSL status, your plan limit and the CNAME targetGET /api/biz/v1/shop: Shop health (Business): page checks with state and last error, plus SSL certificate and domain expiry dates and days leftGET /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
Already a customer? Get a link to your API account.