{
  "openapi": "3.1.0",
  "info": {
    "title": "Downtime API",
    "version": "1.0.0",
    "summary": "Outages and degradations from about 60 cloud, AI, data and SaaS vendors' own status pages, their published postmortems and SEC 8-K Item 1.05 breach disclosures",
    "description": "Outages and degradations from about 60 cloud, AI, data and SaaS vendors' own status pages, their published postmortems and SEC 8-K Item 1.05 breach disclosures. Refreshed every night at 03:30 UTC. Free to read; please cite \"Downtime (downtime.fru.dev)\" with a link. Responses are cached at the edge; keep to about 60 requests a minute. Guide: https://downtime.fru.dev/agents",
    "contact": {
      "name": "fru.dev",
      "url": "https://fru.dev",
      "email": "fru.dev3@gmail.com"
    }
  },
  "externalDocs": {
    "description": "For AI agents",
    "url": "https://downtime.fru.dev/agents"
  },
  "servers": [
    {
      "url": "https://downtime.fru.dev"
    }
  ],
  "paths": {
    "/api/incidents": {
      "get": {
        "operationId": "list_incidents",
        "summary": "Incidents from the last N days, newest first, for every vendor or one vendor or one root cause",
        "description": "Incidents from the last N days, newest first, for every vendor or one vendor or one root cause. Returns incidents with vendor, title, impact, start and end (UTC), duration, services, regions, root cause and status page and postmortem links.",
        "parameters": [
          {
            "name": "days",
            "in": "query",
            "required": false,
            "description": "How many days back, 1 to 3650",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 3650,
              "default": 30
            },
            "example": 30
          },
          {
            "name": "vendor",
            "in": "query",
            "required": false,
            "description": "Vendor slug, e.g. github, openai, cloudflare",
            "schema": {
              "type": "string"
            },
            "example": "github"
          },
          {
            "name": "cause",
            "in": "query",
            "required": false,
            "description": "Root cause key, e.g. config-change, deployment, dns, capacity, unknown",
            "schema": {
              "type": "string"
            },
            "example": "config-change"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Items per page, 1 to 200 (omit for the whole list)",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Items to skip, for the next page",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "incidents with vendor, title, impact, start and end (UTC), duration, services, regions, root cause and status page and postmortem links",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "days": 30,
                  "count": 3,
                  "total": 18,
                  "limit": 3,
                  "offset": 0,
                  "next": "/api/incidents?vendor=github&days=30&limit=3&offset=3",
                  "note": "From vendors' own status pages and disclosures. Times as reported.",
                  "incidents": [
                    {
                      "id": "github-8zc63m64hy36",
                      "vendor": "github",
                      "vendorName": "GitHub",
                      "domain": "github.com",
                      "kind": "degraded",
                      "title": "Incident across several services",
                      "impact": "minor",
                      "status": "investigating",
                      "startedAt": "2026-09-23T10:11:12.836Z",
                      "resolvedAt": "",
                      "durationMin": null,
                      "services": [
                        "API Requests"
                      ],
                      "regions": [],
                      "summary": ""
                    },
                    {
                      "id": "github-f6yrxnz5f7bs",
                      "vendor": "github",
                      "vendorName": "GitHub",
                      "domain": "github.com",
                      "kind": "degraded",
                      "title": "Incident with Pull Requests",
                      "impact": "minor",
                      "status": "resolved",
                      "startedAt": "2026-09-20T22:13:37.880Z",
                      "resolvedAt": "2026-09-20T23:22:16.710Z",
                      "durationMin": 69,
                      "services": [
                        "Pull Requests"
                      ],
                      "regions": [],
                      "summary": ""
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/api/vendors": {
      "get": {
        "operationId": "vendor_downtime",
        "summary": "Every vendor with its incidents, downtime and implied uptime over a date range",
        "description": "Every vendor with its incidents, downtime and implied uptime over a date range. Returns vendors with incident counts by severity, raw and scope-weighted downtime minutes, implied uptime and last incident.",
        "parameters": [
          {
            "name": "range",
            "in": "query",
            "required": false,
            "description": "Preset range",
            "schema": {
              "type": "string",
              "enum": [
                "7d",
                "30d",
                "90d",
                "12m",
                "ytd"
              ],
              "default": "90d"
            },
            "example": "30d"
          },
          {
            "name": "from",
            "in": "query",
            "required": false,
            "description": "First day, YYYY-MM-DD (with to, instead of range)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "to",
            "in": "query",
            "required": false,
            "description": "Last day, YYYY-MM-DD",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Items per page, 1 to 200 (omit for the whole list)",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Items to skip, for the next page",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "vendors with incident counts by severity, raw and scope-weighted downtime minutes, implied uptime and last incident",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "range": {
                    "key": "30d",
                    "from": "2026-08-26",
                    "to": "2026-09-24",
                    "days": 30,
                    "label": "30 days"
                  },
                  "note": "From vendors' own status pages and disclosures. Times as reported.",
                  "total": 62,
                  "limit": 3,
                  "offset": 0,
                  "next": "/api/vendors?range=30d&limit=3&offset=3",
                  "vendors": [
                    {
                      "slug": "1password",
                      "name": "1Password",
                      "domain": "1password.com",
                      "category": "security",
                      "feed": true,
                      "n": 1,
                      "minor": 0,
                      "major": 1,
                      "critical": 0,
                      "minMinor": 0,
                      "minMajor": 27,
                      "minCritical": 0,
                      "weighted": 1,
                      "total": 27
                    },
                    {
                      "slug": "airtable",
                      "name": "Airtable",
                      "domain": "airtable.com",
                      "category": "saas",
                      "feed": true,
                      "n": 0,
                      "minor": 0,
                      "major": 0,
                      "critical": 0,
                      "minMinor": 0,
                      "minMajor": 0,
                      "minCritical": 0,
                      "weighted": 0,
                      "total": 0
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/api/day": {
      "get": {
        "operationId": "vendor_day",
        "summary": "One vendor's incidents on one UTC day",
        "description": "One vendor's incidents on one UTC day. Returns incidents that started or were still open that day.",
        "parameters": [
          {
            "name": "vendor",
            "in": "query",
            "required": true,
            "description": "Vendor slug",
            "schema": {
              "type": "string"
            },
            "example": "github"
          },
          {
            "name": "day",
            "in": "query",
            "required": true,
            "description": "Day, YYYY-MM-DD",
            "schema": {
              "type": "string"
            },
            "example": "2026-09-15"
          }
        ],
        "responses": {
          "200": {
            "description": "incidents that started or were still open that day",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "incidents": [
                    {
                      "id": "github-bk7zgdcq7s9t",
                      "vendor": "github",
                      "vendorName": "GitHub",
                      "domain": "github.com",
                      "kind": "degraded",
                      "title": "Disruption with some GitHub services",
                      "impact": "minor",
                      "status": "resolved",
                      "startedAt": "2026-09-15T19:11:31.334Z",
                      "resolvedAt": "2026-09-15T20:00:50.512Z",
                      "durationMin": 49,
                      "services": [],
                      "regions": [],
                      "summary": ""
                    },
                    {
                      "id": "github-qwdwmtqghpk5",
                      "vendor": "github",
                      "vendorName": "GitHub",
                      "domain": "github.com",
                      "kind": "degraded",
                      "title": "Disruption with some GitHub services",
                      "impact": "minor",
                      "status": "resolved",
                      "startedAt": "2026-09-15T09:47:15.085Z",
                      "resolvedAt": "2026-09-15T11:17:22.038Z",
                      "durationMin": 90,
                      "services": [
                        "Copilot AI Model Providers"
                      ],
                      "regions": [],
                      "summary": ""
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/api/search": {
      "get": {
        "operationId": "search",
        "summary": "Search vendors, major incidents, postmortems, breaches and pages",
        "description": "Search vendors, major incidents, postmortems, breaches and pages. Returns up to 20 ranked results with title, link and one line.",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": true,
            "description": "Vendor name or words",
            "schema": {
              "type": "string"
            },
            "example": "cloudflare"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Results, 1 to 20",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 20
            }
          }
        ],
        "responses": {
          "200": {
            "description": "up to 20 ranked results with title, link and one line",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "q": "cloudflare",
                  "results": [
                    {
                      "id": "co:cloudflare",
                      "group": "companies",
                      "title": "Cloudflare",
                      "subtitle": "Cloud and hosting · 50 incidents in 90 days",
                      "href": "/vendors/cloudflare",
                      "keywords": [
                        "cloudflare",
                        "cloudflare.com"
                      ],
                      "logo": "https://img.logo.dev/cloudflare.com?token=...&size=64&format=png&theme=light&retina=true&fallback=404",
                      "score": 1050
                    },
                    {
                      "id": "in:cloudflare-2025-07-14-1111-resolver",
                      "group": "items",
                      "title": "Cloudflare: 1.1.1.1 public DNS resolver unreachable for 62 minutes",
                      "subtitle": "Jul 14, 2025 · Critical · 1h 2m · Postmortem",
                      "href": "/incidents/cloudflare-2025-07-14-1111-resolver",
                      "keywords": [
                        "cloudflare",
                        "1.1.1.1 Resolver"
                      ],
                      "logo": "https://img.logo.dev/cloudflare.com?token=...&size=64&format=png&theme=light&retina=true&fallback=404",
                      "boost": 10,
                      "score": 985
                    }
                  ]
                }
              }
            }
          }
        }
      }
    }
  }
}