{
 "openapi": "3.0.3",
 "info": {
  "title": "Bramble Status page API",
  "version": "2026-11-13",
  "description": "Public status data, push monitors and the status admin API."
 },
 "servers": [
  {
   "url": "https://status.brambleit.com"
  }
 ],
 "components": {
  "securitySchemes": {
   "apiKey": {
    "type": "apiKey",
    "in": "header",
    "name": "X-API-Key"
   },
   "session": {
    "type": "apiKey",
    "in": "cookie",
    "name": "sso_session"
   },
   "bearer": {
    "type": "http",
    "scheme": "bearer",
    "bearerFormat": "JWT"
   }
  }
 },
 "tags": [
  {
   "name": "Public"
  }
 ],
 "paths": {
  "/api/v1/status.json": {
   "get": {
    "tags": [
     "Public"
    ],
    "summary": "Current status of the main public page: services, sections, open incidents and maintenance",
    "operationId": "get-api-v1-status-json",
    "description": "Current status of the main public page: services, sections, open incidents and maintenance. Allowed from any website (CORS `*`), cached for 15 seconds.\n\nRequires: None: public, or protected by a token in the address or body.",
    "parameters": [],
    "responses": {
     "200": {
      "description": "Success"
     }
    },
    "security": [
     {
      "session": []
     }
    ]
   }
  },
  "/api/v1/{slug}/status.json": {
   "get": {
    "tags": [
     "Public"
    ],
    "summary": "The same for another public status page, by its slug",
    "operationId": "get-api-v1-slug-status-json",
    "description": "Requires: None: public, or protected by a token in the address or body.",
    "parameters": [
     {
      "name": "slug",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Success"
     }
    },
    "security": [
     {
      "session": []
     }
    ]
   }
  },
  "/api/v1/chart": {
   "get": {
    "tags": [
     "Public"
    ],
    "summary": "Response-time chart for one monitor",
    "operationId": "get-api-v1-chart",
    "description": "Response-time chart for one monitor. Query `monitor` (id) and `range` (`24h`, `7d` or `30d`). Public when that monitor's chart is shown publicly.\n\nRequires: None: public, or protected by a token in the address or body.",
    "parameters": [],
    "responses": {
     "200": {
      "description": "Success"
     }
    },
    "security": [
     {
      "session": []
     }
    ]
   }
  },
  "/api/v1/day": {
   "get": {
    "tags": [
     "Public"
    ],
    "summary": "One day of a service (`k=c<id>`) or section (`k=g<id>`) as hourly bars",
    "operationId": "get-api-v1-day",
    "description": "One day of a service (`k=c<id>`) or section (`k=g<id>`) as hourly bars. Query `page`, `day` (Unix seconds) and `k`.\n\nRequires: None: public, or protected by a token in the address or body.",
    "parameters": [],
    "responses": {
     "200": {
      "description": "Success"
     }
    },
    "security": [
     {
      "session": []
     }
    ]
   }
  },
  "/api/push/{token}": {
   "post": {
    "tags": [
     "Public"
    ],
    "summary": "Heartbeat for a push monitor (GET works too)",
    "operationId": "post-api-push-token",
    "description": "Heartbeat for a push monitor (GET works too). Query `status` (`up` or `down`), `msg`, `ping`. The token is the secret.\n\nRequires: None: public, or protected by a token in the address or body.",
    "parameters": [
     {
      "name": "token",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Success"
     }
    },
    "security": [
     {
      "session": []
     }
    ]
   }
  },
  "/{slug}/feed.rss": {
   "get": {
    "tags": [
     "Public"
    ],
    "summary": "RSS feed of a public page's incidents (`feed.atom` for Atom)",
    "operationId": "get-slug-feed-rss",
    "description": "Requires: None: public, or protected by a token in the address or body.",
    "parameters": [
     {
      "name": "slug",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Success"
     }
    },
    "security": [
     {
      "session": []
     }
    ]
   }
  }
 }
}