{
 "openapi": "3.0.3",
 "info": {
  "title": "OpsPing API",
  "version": "1.0.0",
  "description": "OpsPing on-call platform API. Alert ingest accepts JSON and pages through escalation policies; everything else is CRUD over your tenant's resources. Auth: API key (X-OpsPing-Key / OpsPingKey / Bearer), JWT bearer, or the admin session cookie \u2014 routes marked user-only accept the JWT/cookie pair, public routes authorize by path token, Slack signature, or nothing. Errors use a uniform envelope `{code, message, requestId, took}`. Rate limits: 60/min general, generous ingest cap (see /health for liveness). The /v2/ops console is restricted to the reserved ops tenant's super_admin role; /v2/events is an SSE stream. The spec is generated from the Go router \u2014 every mounted /v2 route is documented and coverage is enforced by scripts/check_openapi_coverage.py."
 },
 "servers": [
  {
   "url": "https://api.ops-ping.com"
  },
  {
   "url": "http://localhost:3000"
  }
 ],
 "components": {
  "securitySchemes": {
   "ApiKeyAuth": {
    "type": "apiKey",
    "in": "header",
    "name": "X-OpsPing-Key"
   },
   "BearerAuth": {
    "type": "http",
    "scheme": "bearer",
    "bearerFormat": "JWT"
   },
   "CookieAuth": {
    "type": "apiKey",
    "in": "cookie",
    "name": "token"
   }
  }
 },
 "paths": {
  "/health": {
   "get": {
    "summary": "Liveness probe (`?deep=1` adds the database check)",
    "tags": [
     "General"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": []
   }
  },
  "/v2/account": {
   "get": {
    "summary": "Account summary (plan, counts)",
    "tags": [
     "General"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/alert-policies": {
   "get": {
    "summary": "List alert policies (evaluation order)",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   },
   "post": {
    "summary": "Create an alert policy",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "Policy fields (conditions, actions incl. runbookUrl, order)",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/alert-policies/dry-run": {
   "post": {
    "summary": "Dry-run a policy chain against an alert",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "A sample alert payload",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/alert-policies/reorder": {
   "post": {
    "summary": "Reorder policies",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "`{ids}` \u2014 policies in the new order",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/alert-policies/{id}": {
   "delete": {
    "summary": "Delete an alert policy",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "get": {
    "summary": "Get one alert policy",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "patch": {
    "summary": "Update an alert policy",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "Policy fields to change (actions may set runbookUrl)",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/alerts": {
   "get": {
    "summary": "List alerts (filter: status, priority, serviceId, entity, q; pagination)",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   },
   "post": {
    "summary": "Create an alert (the paging ingest endpoint)",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "Alert payload (message, entity/service, priority, responders, details, tags, runbookUrl, \u2026)",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/alerts/bulk": {
   "post": {
    "summary": "Bulk ack/close/assign",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "`{ids, action, \u2026}`",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/alerts/count": {
   "get": {
    "summary": "Open-alert count in the rolling window",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/alerts/summary": {
   "get": {
    "summary": "Dashboard aggregate counts",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/alerts/{identifier}": {
   "delete": {
    "summary": "Delete an alert",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "identifier",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "get": {
    "summary": "Get one alert (with notes + activity)",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "identifier",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/alerts/{identifier}/acknowledge": {
   "post": {
    "summary": "Acknowledge",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "identifier",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/alerts/{identifier}/activities": {
   "get": {
    "summary": "List the alert's activity log",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "identifier",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/alerts/{identifier}/assign": {
   "delete": {
    "summary": "Un-assign the current owner",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "identifier",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "post": {
    "summary": "Assign an owner",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "identifier",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "`{assignee?/teamId?}` \u2014 the new owner",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/alerts/{identifier}/attachments": {
   "get": {
    "summary": "List the alert's attachments",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "identifier",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "post": {
    "summary": "Attach a file (S3-backed)",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "identifier",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/alerts/{identifier}/attachments/{attachmentId}": {
   "delete": {
    "summary": "Delete an attachment",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "identifier",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "attachmentId",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/alerts/{identifier}/attachments/{attachmentId}/complete": {
   "post": {
    "summary": "Complete a multipart attachment upload",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "identifier",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "attachmentId",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/alerts/{identifier}/close": {
   "post": {
    "summary": "Close",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "identifier",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/alerts/{identifier}/details": {
   "post": {
    "summary": "Merge extra key/value details into the alert",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "identifier",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "`{details}` \u2014 key/value pairs to add",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/alerts/{identifier}/escalate": {
   "post": {
    "summary": "Escalate now (runs the next escalation rule)",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "identifier",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/alerts/{identifier}/notes": {
   "get": {
    "summary": "List the alert's notes",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "identifier",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "post": {
    "summary": "Add a note",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "identifier",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "`{text}` \u2014 the note content",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/alerts/{identifier}/process-escalation": {
   "post": {
    "summary": "Internal: evaluate + fire the alert's due escalation rule",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "identifier",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/alerts/{identifier}/read": {
   "post": {
    "summary": "Mark read (clears the unread badge)",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "identifier",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/alerts/{identifier}/recipients": {
   "get": {
    "summary": "List everyone the alert was delivered to",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "identifier",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/alerts/{identifier}/reopen": {
   "post": {
    "summary": "Reopen a closed alert",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "identifier",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/alerts/{identifier}/responders": {
   "post": {
    "summary": "Add responders to a running alert",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "identifier",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "`{responders}` \u2014 users/teams to page",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/alerts/{identifier}/snooze": {
   "post": {
    "summary": "Snooze for a duration",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "identifier",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "`{durationMinutes?/until?}` \u2014 snooze duration",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/alerts/{identifier}/tags": {
   "delete": {
    "summary": "Remove tags",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "identifier",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "post": {
    "summary": "Add tags",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "identifier",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "`{tags}` \u2014 tags to append",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/alerts/{identifier}/unacknowledge": {
   "post": {
    "summary": "Un-acknowledge",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "identifier",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/alerts/{identifier}/unsnooze": {
   "post": {
    "summary": "End a snooze early",
    "tags": [
     "Alerts"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "identifier",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/announcements": {
   "get": {
    "summary": "List announcements",
    "tags": [
     "Announcements"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   },
   "post": {
    "summary": "Publish an announcement",
    "tags": [
     "Announcements"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "Announcement fields (title, body, severity, audience, serviceIds, expiresAt)",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/announcements/audience-preview": {
   "get": {
    "summary": "Preview how many users an audience targets",
    "tags": [
     "Announcements"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/announcements/{id}": {
   "delete": {
    "summary": "Delete an announcement",
    "tags": [
     "Announcements"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "get": {
    "summary": "Get an announcement",
    "tags": [
     "Announcements"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/approval-pending": {
   "get": {
    "summary": "List pending approvals",
    "tags": [
     "Approvals"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/approval-pending/{messageType}/{id}/approve": {
   "post": {
    "summary": "Approve a pending item",
    "tags": [
     "Approvals"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "messageType",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "`{reason?}`",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/approval-pending/{messageType}/{id}/comment": {
   "post": {
    "summary": "Comment on a pending item",
    "tags": [
     "Approvals"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "messageType",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "`{comment}`",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/approval-pending/{messageType}/{id}/reject": {
   "post": {
    "summary": "Reject a pending item",
    "tags": [
     "Approvals"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "messageType",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "`{reason?}`",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/approval-policies": {
   "get": {
    "summary": "List approval policies",
    "tags": [
     "Approvals"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   },
   "put": {
    "summary": "Replace the tenant's approval policies",
    "tags": [
     "Approvals"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "Policy list (level, messageType, statusPageId, gateGroups)",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/approval-policies/{policyId}": {
   "delete": {
    "summary": "Delete an approval policy",
    "tags": [
     "Approvals"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "policyId",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/audit-log": {
   "get": {
    "summary": "Audit log (admin)",
    "tags": [
     "Audit Log"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   },
   "post": {
    "summary": "Append an audit-log entry",
    "tags": [
     "Audit Log"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/auth/change-password": {
   "post": {
    "summary": "Change the caller's password",
    "tags": [
     "Auth"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/auth/disclaimer-accept": {
   "post": {
    "summary": "Record acceptance of the usage disclaimer",
    "tags": [
     "Auth"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/auth/forgot": {
   "post": {
    "summary": "Request a password-reset email",
    "tags": [
     "Auth"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": []
   }
  },
  "/v2/auth/login": {
   "post": {
    "summary": "Password login (returns JWT + refresh; MFA challenge if enrolled)",
    "tags": [
     "Auth"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": []
   }
  },
  "/v2/auth/login/mfa": {
   "post": {
    "summary": "Complete MFA challenge",
    "tags": [
     "Auth"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": []
   }
  },
  "/v2/auth/login/mfa/backup": {
   "post": {
    "summary": "Complete MFA challenge with a backup code",
    "tags": [
     "Auth"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": []
   }
  },
  "/v2/auth/logout": {
   "post": {
    "summary": "Revoke the current session",
    "tags": [
     "Auth"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/auth/me": {
   "get": {
    "summary": "Current user + permissions",
    "tags": [
     "Auth"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/auth/mfa/disable": {
   "post": {
    "summary": "Disable MFA (password re-entry)",
    "tags": [
     "Auth"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/auth/mfa/enroll": {
   "post": {
    "summary": "Begin MFA enrollment",
    "tags": [
     "Auth"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/auth/mfa/verify": {
   "post": {
    "summary": "Confirm MFA enrollment",
    "tags": [
     "Auth"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/auth/pair": {
   "post": {
    "summary": "Pair the mobile app (returns device tokens)",
    "tags": [
     "Auth"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/auth/pair/exchange": {
   "post": {
    "summary": "Exchange a pairing code for tokens",
    "tags": [
     "Auth"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": []
   }
  },
  "/v2/auth/refresh": {
   "post": {
    "summary": "Rotate the refresh token and mint a new access token",
    "tags": [
     "Auth"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": []
   }
  },
  "/v2/auth/refresh-session": {
   "post": {
    "summary": "Rotate the SPA session cookie",
    "tags": [
     "Auth"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/auth/register": {
   "post": {
    "summary": "Open registration (creates a new tenant)",
    "tags": [
     "Auth"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": []
   }
  },
  "/v2/auth/reset": {
   "post": {
    "summary": "Complete a password reset (single-use token)",
    "tags": [
     "Auth"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": []
   }
  },
  "/v2/auth/revoke-all": {
   "post": {
    "summary": "Revoke every session + bump tokenVersion",
    "tags": [
     "Auth"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/auth/sso/callback": {
   "get": {
    "summary": "SSO callback (exchanges the IdP code)",
    "tags": [
     "Auth"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": []
   }
  },
  "/v2/auth/sso/{teamSlug}": {
   "get": {
    "summary": "Start the SSO redirect for a team slug",
    "tags": [
     "Auth"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [],
    "parameters": [
     {
      "name": "teamSlug",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/channels": {
   "get": {
    "summary": "List the caller's notification channels",
    "tags": [
     "Channels"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   },
   "post": {
    "summary": "Create a notification channel (email/phone)",
    "tags": [
     "Channels"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "`{type, value, label}`",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/channels/{id}": {
   "delete": {
    "summary": "Delete a notification channel",
    "tags": [
     "Channels"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/channels/{id}/resend": {
   "post": {
    "summary": "Resend the verification code",
    "tags": [
     "Channels"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/channels/{id}/test": {
   "post": {
    "summary": "Send a test notification to the channel",
    "tags": [
     "Channels"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/channels/{id}/verify": {
   "post": {
    "summary": "Verify a channel with its code",
    "tags": [
     "Channels"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "`{code}` \u2014 the verification code",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/contact": {
   "post": {
    "summary": "Public contact form (rate-limited, no auth)",
    "tags": [
     "General"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": []
   }
  },
  "/v2/devices/health": {
   "post": {
    "summary": "Report a pre-shift device health check",
    "tags": [
     "Devices"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/devices/health-report": {
   "get": {
    "summary": "Recent device health checks (`?since=`, admin)",
    "tags": [
     "Devices"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/escalations": {
   "get": {
    "summary": "List escalation policies (with rules)",
    "tags": [
     "Escalations"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   },
   "post": {
    "summary": "Create an escalation policy",
    "tags": [
     "Escalations"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "Policy fields (name, rules, priorities, repeat, teamId, isDefault, \u2026)",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/escalations/{id}": {
   "delete": {
    "summary": "Delete a policy",
    "tags": [
     "Escalations"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "get": {
    "summary": "Get one escalation policy",
    "tags": [
     "Escalations"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "patch": {
    "summary": "Replace the policy's rules",
    "tags": [
     "Escalations"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "Policy fields (rules replace the existing set)",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/escalations/{id}/simulate": {
   "post": {
    "summary": "Simulate who gets paged at each step right now (read-only; no notifications sent)",
    "tags": [
     "Escalations"
    ],
    "responses": {
     "200": {
      "description": "{policyId, policyName, simulatedAt, steps: [{order, condition, notifyType, delayMinutes, recipientType/Id/Name, channel, wouldNotify, users: [{userId, userName, pushTokens}]}]}"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/events": {
   "get": {
    "summary": "Server-sent events: live tenant-scoped change notifications (refetch signal only)",
    "tags": [
     "Events"
    ],
    "responses": {
     "200": {
      "description": "`text/event-stream`; `event:`/`data:` frames with heartbeat comments every 25s"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/export": {
   "get": {
    "summary": "Full JSON export of this tenant's data",
    "tags": [
     "General"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/feedback": {
   "get": {
    "summary": "List submitted feedback (tenant admin)",
    "tags": [
     "Feedback"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   },
   "post": {
    "summary": "Submit in-app feedback (mobile/admin)",
    "tags": [
     "Feedback"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "Feedback fields (app, message, breadcrumbs)",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/feedback/{id}": {
   "get": {
    "summary": "Get one feedback report (tenant admin)",
    "tags": [
     "Feedback"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/forwarding-rules": {
   "get": {
    "summary": "List alert-forwarding rules",
    "tags": [
     "Forwarding Rules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   },
   "post": {
    "summary": "Create a forwarding rule",
    "tags": [
     "Forwarding Rules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "Rule fields (source, target, enabled)",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/forwarding-rules/{id}": {
   "delete": {
    "summary": "Delete a forwarding rule",
    "tags": [
     "Forwarding Rules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "get": {
    "summary": "Get one forwarding rule",
    "tags": [
     "Forwarding Rules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "put": {
    "summary": "Replace a forwarding rule",
    "tags": [
     "Forwarding Rules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "Full rule document",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/heartbeats": {
   "get": {
    "summary": "List heartbeats",
    "tags": [
     "Heartbeats"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   },
   "post": {
    "summary": "Create a heartbeat (periodic ping check)",
    "tags": [
     "Heartbeats"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "Heartbeat config (name, interval, grace period)",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/heartbeats/{name}": {
   "delete": {
    "summary": "Delete a heartbeat",
    "tags": [
     "Heartbeats"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "name",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "get": {
    "summary": "Get a heartbeat",
    "tags": [
     "Heartbeats"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "name",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "patch": {
    "summary": "Update a heartbeat",
    "tags": [
     "Heartbeats"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "name",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "Heartbeat fields to change",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/heartbeats/{name}/ping": {
   "post": {
    "summary": "Ping a heartbeat (keeps it green)",
    "tags": [
     "Heartbeats"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "name",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/incidents": {
   "get": {
    "summary": "List incidents",
    "tags": [
     "Incidents"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   },
   "post": {
    "summary": "Create an incident",
    "tags": [
     "Incidents"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "Incident fields (title, severity, services, participants)",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/incidents/participant-suggestions": {
   "get": {
    "summary": "Suggested incident participants for autocomplete",
    "tags": [
     "Incidents"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/incidents/{id}": {
   "delete": {
    "summary": "Delete an incident",
    "tags": [
     "Incidents"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "get": {
    "summary": "Get an incident",
    "tags": [
     "Incidents"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "patch": {
    "summary": "Update an incident",
    "tags": [
     "Incidents"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "Incident fields to change",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/incidents/{id}/status-updates": {
   "get": {
    "summary": "List an incident's status updates",
    "tags": [
     "Incidents"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "post": {
    "summary": "Post a status update",
    "tags": [
     "Incidents"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "`{message, \u2026}` \u2014 the update text",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/incidents/{id}/status-updates/{updateId}": {
   "delete": {
    "summary": "Delete a status update",
    "tags": [
     "Incidents"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "updateId",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/integrations": {
   "get": {
    "summary": "List integrations",
    "tags": [
     "Integrations"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   },
   "post": {
    "summary": "Create an integration",
    "tags": [
     "Integrations"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "Integration fields (name, type, config, enabled, generateKey)",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/integrations/authenticate": {
   "post": {
    "summary": "Verify provider credentials before saving",
    "tags": [
     "Integrations"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "Provider type + credentials to verify",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/integrations/{id}": {
   "delete": {
    "summary": "Delete an integration",
    "tags": [
     "Integrations"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "get": {
    "summary": "Get one integration",
    "tags": [
     "Integrations"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "patch": {
    "summary": "Update an integration",
    "tags": [
     "Integrations"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "Integration fields to change",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/integrations/{id}/disable": {
   "post": {
    "summary": "Disable the integration",
    "tags": [
     "Integrations"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/integrations/{id}/enable": {
   "post": {
    "summary": "Enable the integration",
    "tags": [
     "Integrations"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/integrations/{id}/regenerate-key": {
   "post": {
    "summary": "Rotate the integration's API key",
    "tags": [
     "Integrations"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/integrations/{id}/rotate-webhook-token": {
   "post": {
    "summary": "Rotate the integration's inbound webhook token",
    "tags": [
     "Integrations"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/integrations/{id}/test": {
   "post": {
    "summary": "Send a test payload through the integration",
    "tags": [
     "Integrations"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/invites": {
   "get": {
    "summary": "List pending invites (admin)",
    "tags": [
     "Invites"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   },
   "post": {
    "summary": "Invite a user (sends the invite email)",
    "tags": [
     "Invites"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "`{email, role, teamIds\u2026}`",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/invites/{token}": {
   "delete": {
    "summary": "Revoke a pending invite",
    "tags": [
     "Invites"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "token",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "get": {
    "summary": "Validate an invite token (public \u2014 signup page)",
    "tags": [
     "Invites"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [],
    "parameters": [
     {
      "name": "token",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/invites/{token}/accept": {
   "post": {
    "summary": "Accept an invite (creates the user)",
    "tags": [
     "Invites"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [],
    "parameters": [
     {
      "name": "token",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "`{password, name\u2026}` \u2014 the new account",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/maintenance-windows": {
   "get": {
    "summary": "List maintenance windows",
    "tags": [
     "Maintenance Windows"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   },
   "post": {
    "summary": "Create a maintenance window",
    "tags": [
     "Maintenance Windows"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "Window fields (scope, startTime, endTime)",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/maintenance-windows/{id}": {
   "delete": {
    "summary": "Delete a maintenance window",
    "tags": [
     "Maintenance Windows"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "get": {
    "summary": "Get a maintenance window",
    "tags": [
     "Maintenance Windows"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "patch": {
    "summary": "Update a maintenance window",
    "tags": [
     "Maintenance Windows"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "Window fields to change",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/notification-rules": {
   "get": {
    "summary": "List the caller's notification rules",
    "tags": [
     "Notification Rules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   },
   "post": {
    "summary": "Create a notification rule (per-user)",
    "tags": [
     "Notification Rules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "Rule fields (name, criteria, action, repeat, priority, enabled)",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/notification-rules/reorder": {
   "post": {
    "summary": "Reorder the caller's rules",
    "tags": [
     "Notification Rules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "`{ids}` \u2014 rules in the new order",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/notification-rules/{id}": {
   "delete": {
    "summary": "Delete a notification rule",
    "tags": [
     "Notification Rules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "get": {
    "summary": "Get one notification rule",
    "tags": [
     "Notification Rules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "patch": {
    "summary": "Update a notification rule",
    "tags": [
     "Notification Rules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "Rule fields to change",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/notification-rules/{id}/match": {
   "post": {
    "summary": "Preview which rules match a sample alert",
    "tags": [
     "Notification Rules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "A sample alert payload (priority, tags, source\u2026)",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/openapi.json": {
   "get": {
    "summary": "This document, served live by the API",
    "tags": [
     "General"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": []
   }
  },
  "/v2/ops/feedback": {
   "get": {
    "summary": "List feedback across tenants (super admin)",
    "tags": [
     "Ops Console"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/ops/feedback/{id}": {
   "get": {
    "summary": "Get one feedback report (super admin)",
    "tags": [
     "Ops Console"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "patch": {
    "summary": "Triage a feedback report (super admin)",
    "tags": [
     "Ops Console"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/ops/tenants": {
   "get": {
    "summary": "List tenants + usage counts (super admin)",
    "tags": [
     "Ops Console"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   },
   "post": {
    "summary": "Provision a tenant via invite (super admin)",
    "tags": [
     "Ops Console"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/ops/tenants/{id}": {
   "patch": {
    "summary": "Suspend/unsuspend a tenant (super admin)",
    "tags": [
     "Ops Console"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/ops/tenants/{id}/usage": {
   "get": {
    "summary": "Monthly usage counters for a tenant (super admin)",
    "tags": [
     "Ops Console"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/ops/users": {
   "get": {
    "summary": "List users across tenants (super admin)",
    "tags": [
     "Ops Console"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/ops/users/invite": {
   "post": {
    "summary": "Invite an ops/user account (super admin)",
    "tags": [
     "Ops Console"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/ops/users/invite/{token}": {
   "delete": {
    "summary": "Revoke an invited account's token (super admin)",
    "tags": [
     "Ops Console"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "token",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/ops/users/{id}/block": {
   "patch": {
    "summary": "Block/unblock a user (super admin)",
    "tags": [
     "Ops Console"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/ops/users/{id}/role": {
   "patch": {
    "summary": "Change a user's role (super admin)",
    "tags": [
     "Ops Console"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/ops/users/{id}/tenant": {
   "patch": {
    "summary": "Move a user between tenants (super admin)",
    "tags": [
     "Ops Console"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/postmortem-templates": {
   "get": {
    "summary": "List postmortem templates (team-scoped; null teamId = tenant-global)",
    "tags": [
     "Postmortem Templates"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   },
   "post": {
    "summary": "Create a postmortem template",
    "tags": [
     "Postmortem Templates"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "`{name, teamId?, sections: [{key, title, prompt?}]}`",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/postmortem-templates/{id}": {
   "delete": {
    "summary": "Delete a postmortem template (generated postmortems keep their copied sections)",
    "tags": [
     "Postmortem Templates"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "get": {
    "summary": "Get a postmortem template",
    "tags": [
     "Postmortem Templates"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "patch": {
    "summary": "Update a postmortem template (absent fields unchanged; `teamId: null` clears to tenant-global)",
    "tags": [
     "Postmortem Templates"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "Template fields to change",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/postmortems": {
   "get": {
    "summary": "List postmortems",
    "tags": [
     "Postmortems"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   },
   "post": {
    "summary": "Create a postmortem for an incident",
    "tags": [
     "Postmortems"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "Postmortem fields (incidentId, summary, rootCause, timeline, actionItems)",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/postmortems/generate": {
   "post": {
    "summary": "Auto-draft a postmortem from an incident's data",
    "tags": [
     "Postmortems"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "`{incidentId\u2026}`",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/postmortems/{id}": {
   "delete": {
    "summary": "Delete a postmortem",
    "tags": [
     "Postmortems"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "get": {
    "summary": "Get a postmortem",
    "tags": [
     "Postmortems"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "patch": {
    "summary": "Update a postmortem",
    "tags": [
     "Postmortems"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "Postmortem fields to change",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/postmortems/{id}/export": {
   "get": {
    "summary": "Export a postmortem document",
    "tags": [
     "Postmortems"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/pto-requests": {
   "get": {
    "summary": "List PTO requests",
    "tags": [
     "Time Off"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   },
   "post": {
    "summary": "Request time off",
    "tags": [
     "Time Off"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "PTO fields (range, reason)",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/pto-requests/{id}": {
   "delete": {
    "summary": "Cancel a PTO request",
    "tags": [
     "Time Off"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/pto-requests/{id}/approve": {
   "patch": {
    "summary": "Approve PTO",
    "tags": [
     "Time Off"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/pto-requests/{id}/deny": {
   "patch": {
    "summary": "Deny PTO",
    "tags": [
     "Time Off"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/public/status": {
   "get": {
    "summary": "Public incident timeline (`?tenant=<tenantId>`, no auth)",
    "tags": [
     "Status Pages"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": []
   }
  },
  "/v2/public/status-page/{slug}": {
   "get": {
    "summary": "Public status page content",
    "tags": [
     "Status Pages"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [],
    "parameters": [
     {
      "name": "slug",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/public/status-page/{slug}/history": {
   "get": {
    "summary": "Public incident history",
    "tags": [
     "Status Pages"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [],
    "parameters": [
     {
      "name": "slug",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/public/status-page/{slug}/subscribe": {
   "post": {
    "summary": "Subscribe to status updates",
    "tags": [
     "Status Pages"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [],
    "parameters": [
     {
      "name": "slug",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/public/status-page/{slug}/unsubscribe": {
   "get": {
    "summary": "Unsubscribe (token link)",
    "tags": [
     "Status Pages"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [],
    "parameters": [
     {
      "name": "slug",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/public/status-page/{slug}/verify": {
   "get": {
    "summary": "Confirm a subscription (token link)",
    "tags": [
     "Status Pages"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [],
    "parameters": [
     {
      "name": "slug",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/push-tokens": {
   "post": {
    "summary": "Register a device push token",
    "tags": [
     "Push Tokens"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "`{token, platform\u2026}`",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/push-tokens/test": {
   "post": {
    "summary": "Send a test push to the caller",
    "tags": [
     "Push Tokens"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "`{priority}` \u2014 test alert priority",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/push-tokens/{token}": {
   "delete": {
    "summary": "Unregister a push token",
    "tags": [
     "Push Tokens"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "token",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/reports/export": {
   "get": {
    "summary": "Export report data",
    "tags": [
     "Reports"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/reports/mtta": {
   "get": {
    "summary": "Mean time-to-acknowledge",
    "tags": [
     "Reports"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/reports/mttr": {
   "get": {
    "summary": "Mean time-to-resolve",
    "tags": [
     "Reports"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/reports/on-call-hours": {
   "get": {
    "summary": "On-call hours report",
    "tags": [
     "Reports"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/reports/responder": {
   "get": {
    "summary": "Per-responder load",
    "tags": [
     "Reports"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/reports/schedules": {
   "get": {
    "summary": "List scheduled report deliveries",
    "tags": [
     "Reports"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   },
   "post": {
    "summary": "Schedule a recurring report",
    "tags": [
     "Reports"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "Schedule config (report kind, cadence, recipients)",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/reports/schedules/{id}": {
   "delete": {
    "summary": "Delete a report schedule",
    "tags": [
     "Reports"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/reports/schedules/{id}/run": {
   "post": {
    "summary": "Run a report schedule now",
    "tags": [
     "Reports"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/reports/service": {
   "get": {
    "summary": "Per-service alert breakdown",
    "tags": [
     "Reports"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/reports/summary": {
   "get": {
    "summary": "Alert volume + MTTR summary",
    "tags": [
     "Reports"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/reports/team": {
   "get": {
    "summary": "Per-team alert breakdown",
    "tags": [
     "Reports"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/reports/top-sources": {
   "get": {
    "summary": "Top alert sources",
    "tags": [
     "Reports"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/reports/trends": {
   "get": {
    "summary": "Alert trend series",
    "tags": [
     "Reports"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/routing-rules": {
   "get": {
    "summary": "List inbound routing rules",
    "tags": [
     "Routing Rules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   },
   "post": {
    "summary": "Create a routing rule",
    "tags": [
     "Routing Rules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "Rule fields (matchers, target service/escalation)",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/routing-rules/{id}": {
   "delete": {
    "summary": "Delete a routing rule",
    "tags": [
     "Routing Rules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "get": {
    "summary": "Get one routing rule",
    "tags": [
     "Routing Rules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "put": {
    "summary": "Replace a routing rule",
    "tags": [
     "Routing Rules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "Full rule document",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/saved-searches": {
   "get": {
    "summary": "List saved searches",
    "tags": [
     "Saved Searches"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   },
   "post": {
    "summary": "Save a search",
    "tags": [
     "Saved Searches"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "`{name, query}`",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/saved-searches/{id}": {
   "delete": {
    "summary": "Delete a saved search",
    "tags": [
     "Saved Searches"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "patch": {
    "summary": "Rename/update a saved search",
    "tags": [
     "Saved Searches"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "Fields to change",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/schedules": {
   "get": {
    "summary": "List on-call schedules (rotations + overrides)",
    "tags": [
     "Schedules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   },
   "post": {
    "summary": "Create a schedule",
    "tags": [
     "Schedules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "Schedule fields (name, timezone, rotations)",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/schedules/{id}": {
   "delete": {
    "summary": "Delete a schedule",
    "tags": [
     "Schedules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "get": {
    "summary": "Get a schedule",
    "tags": [
     "Schedules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "patch": {
    "summary": "Update a schedule",
    "tags": [
     "Schedules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "Schedule fields to change",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/schedules/{id}/ical": {
   "get": {
    "summary": "Schedule as an iCalendar feed",
    "tags": [
     "Schedules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/schedules/{id}/notes": {
   "get": {
    "summary": "List a schedule's handoff notes (newest first)",
    "tags": [
     "Schedules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "post": {
    "summary": "Add a handoff note to a schedule",
    "tags": [
     "Schedules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "Note fields (text)",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/schedules/{id}/notes/{noteId}": {
   "delete": {
    "summary": "Delete a handoff note",
    "tags": [
     "Schedules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "noteId",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/schedules/{id}/on-calls": {
   "get": {
    "summary": "Who is on call (now or at a future time)",
    "tags": [
     "Schedules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/schedules/{id}/overrides": {
   "post": {
    "summary": "Add an on-call override",
    "tags": [
     "Schedules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "Override fields (userId, startTime, endTime, reason)",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/schedules/{id}/overrides/{overrideId}": {
   "delete": {
    "summary": "Delete an override",
    "tags": [
     "Schedules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "overrideId",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/schedules/{id}/rotations": {
   "get": {
    "summary": "List the schedule's rotations",
    "tags": [
     "Schedules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "post": {
    "summary": "Add a rotation",
    "tags": [
     "Schedules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "Rotation fields (name, participants, handoff rules)",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/schedules/{id}/rotations/{rotationId}": {
   "delete": {
    "summary": "Delete a rotation",
    "tags": [
     "Schedules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "rotationId",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "get": {
    "summary": "Get one rotation",
    "tags": [
     "Schedules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "rotationId",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "patch": {
    "summary": "Update a rotation",
    "tags": [
     "Schedules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "rotationId",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "Rotation fields to change",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/schedules/{id}/shifts": {
   "get": {
    "summary": "Computed shift occurrences",
    "tags": [
     "Schedules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/schedules/{id}/timeline": {
   "get": {
    "summary": "Rendered on-call timeline",
    "tags": [
     "Schedules"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/services": {
   "get": {
    "summary": "List services (CMDB fields + effective health)",
    "tags": [
     "Services"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   },
   "post": {
    "summary": "Create a service",
    "tags": [
     "Services"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "Service fields (name, team, escalation policy, \u2026)",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/services/{id}": {
   "delete": {
    "summary": "Delete a service",
    "tags": [
     "Services"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "get": {
    "summary": "Get a service (health rolled up from its alerts)",
    "tags": [
     "Services"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "patch": {
    "summary": "Update a service",
    "tags": [
     "Services"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "Service fields to change",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/services/{id}/on-call": {
   "get": {
    "summary": "Who is on call for this service right now",
    "tags": [
     "Services"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/services/{id}/owners-suggestion": {
   "get": {
    "summary": "Suggested owners for autocomplete",
    "tags": [
     "Services"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/slack/channels": {
   "get": {
    "summary": "List the workspace channels the bot can see (admin)",
    "tags": [
     "Slack"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/slack/config": {
   "delete": {
    "summary": "Disconnect the Slack integration (admin)",
    "tags": [
     "Slack"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   },
   "get": {
    "summary": "Get the tenant's Slack integration config (admin)",
    "tags": [
     "Slack"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   },
   "put": {
    "summary": "Save the Slack config (bot/app tokens, channel behavior) (admin)",
    "tags": [
     "Slack"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "Config fields (botToken, appToken, signingSecret, mode, defaultChannelId, namingTemplate, archivePolicy, \u2026)",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/slack/config/test": {
   "post": {
    "summary": "Test the stored Slack config (admin)",
    "tags": [
     "Slack"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/slack/connection-status": {
   "get": {
    "summary": "Slack connection health (admin)",
    "tags": [
     "Slack"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/slack/link-code": {
   "post": {
    "summary": "Mint the caller's one-time `/opsping link` code (any tenant member)",
    "tags": [
     "Slack"
    ],
    "responses": {
     "200": {
      "description": "`{code, expiresInMinutes}` \u2014 one-time code valid 10 minutes"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/slack/oauth-token": {
   "post": {
    "summary": "Store an OAuth install token (admin)",
    "tags": [
     "Slack"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "OAuth token payload from the install flow",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/slack/public/commands": {
   "post": {
    "summary": "Slack slash-command entrypoint (signature-verified)",
    "tags": [
     "Slack"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": []
   }
  },
  "/v2/slack/public/interactions": {
   "post": {
    "summary": "Slack interactive-component callback (signature-verified)",
    "tags": [
     "Slack"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": []
   }
  },
  "/v2/slack/public/oauth/callback": {
   "get": {
    "summary": "Slack OAuth install callback",
    "tags": [
     "Slack"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": []
   }
  },
  "/v2/slack/public/oauth/start": {
   "get": {
    "summary": "Begin the Slack OAuth install flow",
    "tags": [
     "Slack"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": []
   }
  },
  "/v2/slack/rules": {
   "get": {
    "summary": "List per-tenant Slack channel-routing rules (admin)",
    "tags": [
     "Slack"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   },
   "post": {
    "summary": "Create a Slack routing rule (admin)",
    "tags": [
     "Slack"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "Rule fields (matchers, channelId)",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/slack/rules/reorder": {
   "post": {
    "summary": "Reorder Slack routing rules (admin)",
    "tags": [
     "Slack"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "`{ids}` \u2014 rules in the new order",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/slack/rules/{id}": {
   "delete": {
    "summary": "Delete a Slack routing rule (admin)",
    "tags": [
     "Slack"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "patch": {
    "summary": "Update a Slack routing rule (admin)",
    "tags": [
     "Slack"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "Rule fields to change",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/status": {
   "get": {
    "summary": "Fleet summary for the authed tenant",
    "tags": [
     "Status Pages"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/status-page": {
   "get": {
    "summary": "Get this tenant's public status-page config (admin)",
    "tags": [
     "Status Pages"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   },
   "put": {
    "summary": "Update the status-page config (admin)",
    "tags": [
     "Status Pages"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "Config fields (slug, visibility, brandName, accentColor, logoUrl, monitors\u2026)",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/status-page/rotate-key": {
   "post": {
    "summary": "Rotate the secret-link key (admin)",
    "tags": [
     "Status Pages"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/status-page/subscribers": {
   "get": {
    "summary": "List email subscribers (admin)",
    "tags": [
     "Status Pages"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   }
  },
  "/v2/teams": {
   "get": {
    "summary": "List teams",
    "tags": [
     "Teams"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   },
   "post": {
    "summary": "Create a team",
    "tags": [
     "Teams"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "Team fields (name, members)",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/teams/{id}": {
   "delete": {
    "summary": "Delete a team",
    "tags": [
     "Teams"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "get": {
    "summary": "Get a team",
    "tags": [
     "Teams"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "patch": {
    "summary": "Update a team",
    "tags": [
     "Teams"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "Team fields to change",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/teams/{id}/members": {
   "get": {
    "summary": "List a team's members",
    "tags": [
     "Teams"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "post": {
    "summary": "Add a member",
    "tags": [
     "Teams"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "`{userId}` \u2014 the user to add",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/teams/{id}/members/{userId}": {
   "delete": {
    "summary": "Remove a member",
    "tags": [
     "Teams"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "userId",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/teams/{teamId}/roles": {
   "get": {
    "summary": "List the team's custom roles",
    "tags": [
     "Team Roles"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "teamId",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "post": {
    "summary": "Create a custom role",
    "tags": [
     "Team Roles"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "teamId",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "Role fields (name, permissions)",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/teams/{teamId}/roles/{roleId}": {
   "delete": {
    "summary": "Delete a custom role",
    "tags": [
     "Team Roles"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "teamId",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "roleId",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "get": {
    "summary": "Get one custom role",
    "tags": [
     "Team Roles"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "teamId",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "roleId",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "patch": {
    "summary": "Update a custom role",
    "tags": [
     "Team Roles"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "teamId",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "roleId",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "Role fields to change",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/tokens": {
   "get": {
    "summary": "List API keys",
    "tags": [
     "API Keys"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   },
   "post": {
    "summary": "Mint an API key (one-time secret reveal)",
    "tags": [
     "API Keys"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "Key config (name, scopes, integration binding)",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/tokens/{id}": {
   "delete": {
    "summary": "Revoke an API key",
    "tags": [
     "API Keys"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/users": {
   "get": {
    "summary": "List users",
    "tags": [
     "Users"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ]
   },
   "post": {
    "summary": "Create a user",
    "tags": [
     "Users"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "requestBody": {
     "description": "User fields (email, role, permissions)",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/users/{id}": {
   "delete": {
    "summary": "Delete a user",
    "tags": [
     "Users"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "get": {
    "summary": "Get a user",
    "tags": [
     "Users"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   },
   "patch": {
    "summary": "Update a user (role, permissions, onboarding)",
    "tags": [
     "Users"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "description": "User fields to change",
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object"
       }
      }
     }
    }
   }
  },
  "/v2/users/{id}/escalations": {
   "get": {
    "summary": "Escalation policies involving the user",
    "tags": [
     "Users"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/users/{id}/mfa/reset": {
   "post": {
    "summary": "Reset a user's MFA enrollment (admin)",
    "tags": [
     "Users"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/users/{id}/schedules": {
   "get": {
    "summary": "Schedules involving the user",
    "tags": [
     "Users"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/users/{id}/teams": {
   "get": {
    "summary": "The user's team memberships",
    "tags": [
     "Users"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [
     {
      "ApiKeyAuth": []
     },
     {
      "BearerAuth": []
     },
     {
      "CookieAuth": []
     }
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/webhooks/inbound-email/{integrationId}/{token}": {
   "post": {
    "summary": "Inbound email-ingest webhook (token authorizes)",
    "tags": [
     "Inbound Webhooks"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [],
    "parameters": [
     {
      "name": "integrationId",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "token",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  },
  "/v2/webhooks/inbound/{integrationId}/{token}": {
   "post": {
    "summary": "Inbound webhook ingest (integration token authorizes; OpsGenie-compatible)",
    "tags": [
     "Inbound Webhooks"
    ],
    "responses": {
     "200": {
      "description": "Success (list envelope or entity)"
     },
     "400": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "401": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "403": {
      "description": "Error envelope `{code, message, requestId, took}`"
     },
     "500": {
      "description": "Error envelope `{code, message, requestId, took}`"
     }
    },
    "security": [],
    "parameters": [
     {
      "name": "integrationId",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "token",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ]
   }
  }
 }
}
