Tous les services / API

API de statut

Verdicts en direct, nombre de signalements et statut officiel en JSON. Les badges, le widget et le statut de base peuvent être utilisés depuis d’autres sites. Une clé payante débloque les scores d’alerte précoce, les vérifications régionales, les éléments, les cartes, un historique plus long et le catalogue complet. See badges de statut.

Limits

  • Sans clé : 30 requêtes par minute et par réseau, et 5000 par jour. Gratuit. Le statut de base, les badges, le widget et la recherche restent disponibles. Les champs payants sont omis et accompagnés d’une indication de mise à niveau.
  • Clé API payante : 600 requêtes par minute, 100000 par jour, $19/mo. Une clé payante débloque les z-scores d’alerte précoce, le détail des vérifications régionales, les éléments, les cartes, les graphiques d’historique au-delà de 24 heures, le catalogue complet, l’historique des pannes de plus de 30 jours, des pages jusqu’à 1 000 éléments et l’export CSV. Envoyez la clé dans un en-tête Authorization ou X-API-Key. Les journalistes en activité peuvent demander une clé presse gratuite sur /press pour une limite par minute plus élevée. Les clés presse et les autres clés gratuites n’incluent ni l’export en masse, ni le CSV, ni l’historique de plus de 30 jours. See /press.
  • Chaque réponse /api/v1 comporte X-RateLimit-Limit, X-RateLimit-Remaining et X-RateLimit-Reset (secondes Unix de réinitialisation de la fenêtre en cours), plus un compteur quotidien restant. Au-delà de la limite, vous recevez une erreur 429 avec Retry-After. De nombreuses réponses GET sont mises en cache 30 à 600 secondes ; certaines, dont la recherche, ne le sont pas.

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. Données 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

Tous les services suivis du catalogue avec leur slug et leur niveau actuel. La liste complète nécessite une clé payante ; sans elle, vous obtenez le nombre, les catégories et une indication de mise à niveau. Pour la recherche, utilisez /api/v1/search ou /api/v1/suggest?q= (plafonné).

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. Sans clé payante, limit est plafonné à 200 et les filtres de date restent dans les 30 derniers jours environ ; le CSV n’est pas disponible. Une clé payante (19 $/mois) débloque un historique plus long, des pages jusqu’à 1 000 éléments, un curseur next.before pour parcourir les lignes plus anciennes et l’export en masse en CSV ou JSON. Les clés anonymes et gratuites reçoivent toujours next.before dans la fenêtre de 30 jours. Le corps JSON contient next (ou null) et une note sur le décompte des incidents confirmés.

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

Les éléments bruts d’une panne, aussi disponibles aux URL evidence.json et evidence.csv de la page de la panne. Nécessite une clé payante ; sans elle, la réponse contient une indication de mise à niveau plutôt qu’une erreur. 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

Données de graphique d’un service : signalements d’utilisateurs, niveau de référence, latence et résultats des vérifications par tranche de temps. range vaut 24h (par défaut et gratuit). 7d et 30d nécessitent une clé payante ; sans elle, la série 24h est renvoyée avec une indication de mise à niveau.

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

D’où viennent les signalements : lieux, réseaux et types de problème. hours vaut 1, 6 ou 24 (par défaut). Les petits groupes sont masqués par confidentialité (hidden les compte). Nécessite une clé payante ; sans elle, la réponse contient une indication de mise à niveau.

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 classement de fiabilité 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. Le CORS est ouvert pour les badges, le widget, la vérification de l’extension et le statut de base en direct, vous pouvez donc les intégrer depuis un navigateur. Les autres routes JSON acceptent les appels de même origine et ceux disposant d’une clé API. Les champs payants du statut (z-score d’alerte précoce et détail régional), les éléments, les cartes, l’historique au-delà de 24 heures et le catalogue complet nécessitent une clé payante ; sans elle, ces champs sont omis et la réponse contient une indication de mise à niveau plutôt qu’une erreur. 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? Configurez des alertes gratuites Slack, Discord ou webhook JSON signé 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 Serveur 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.