{
  "openapi": "3.1.1",
  "info": {
    "title": "ZopNight Platform API",
    "version": "1.1.0",
    "summary": "Cloud cost, inventory and deployment operations across AWS, GCP, Azure and Kubernetes.",
    "description": "REST API for ZopNight: cloud resources, costs, schedules, recommendations,\nbudgets, deployments, teams and audit logs.\n\nAuthentication is bearer-token: a JWT from `POST /auth/login`, or a Personal\nAccess Token minted self-serve from Developer Settings. Every operation\nrequires one except the `/auth/*` endpoints that issue them.\n\nSCOPE OF THIS DOCUMENT. It is generated from the published endpoint index,\nwhich records each operation's method, path and description. It is therefore\na complete and accurate inventory of the API surface, but it does NOT carry\nrequest bodies, response schemas or query parameters, because those are not\npublished. Read operations are fully callable from this document; write\noperations are addressable but their request bodies are undocumented here.\nConsult the linked documentation for payload shapes.\n\nRATE LIMITS. 100 requests per minute per organization, enforced at the\ngateway in a fixed window that resets on the clock minute. All org-scoped\nendpoints share one bucket; there are no per-endpoint limits. The `/auth/*`\nendpoints that issue credentials are exempt. Exceeding the limit returns 429\nwith `{\"error\": \"rate limit exceeded\"}`. No `Retry-After` and no `X-RateLimit-*`\nheaders are sent, so a client cannot read its remaining budget or the reset\ntime from a response: back off exponentially instead.\n\nPAGINATION. Where it is documented, list endpoints take `page` (1-based) and\na page-size parameter — spelled `limit` on most, `size` on\n/recommendations/resources and /smart-tags. Read the parameter each operation\ndeclares rather than assuming; an unrecognised one is ignored, not rejected,\nso guessing returns page 1 forever. Pagination is\npage/limit; there is no cursor. Two response envelopes are in use and each\noperation declares which: `{\"data\":{\"items\":[…],\"total\":…}}` for /audit-logs\nand /state-history, and a bare `{\"data\":[…]}` for /resources, which you page\nuntil a short page comes back. An operation that declares no page parameter has\nno documented pagination — an absence of documentation, not a guarantee that it\nreturns everything.\n\nLONG-RUNNING WORK. Some writes answer 202 with a job identifier instead of a\nfinished result; poll the status endpoint the response description names until\nit reports a terminal state. No `Location` header is sent — follow the\ndocumented poll URL.\n\nACTING IN BULK. A few endpoints take many items in one request rather than\nmaking you loop: `/actions/bulk` applies one action to a whole resource group,\n`/notifications/subscriptions/bulk` upserts many subscriptions, and\n`/resources/by-uids` fetches many resources by native provider ID. Those three\ncarry request-body schemas; most other write bodies are not published here.\n\nPERMISSIONS. Authorization is RBAC, not OAuth scopes. Policies are identifiers\nof the form `<resource>:<action>` (`schedules:write`, `provisioning:create`),\ngranted to roles and assigned to users, optionally scoped to a team or\nresource. `GET /permissions` returns the effective permissions of the current\ncaller — call it before attempting a write rather than discovering a 403. A\nPersonal Access Token inherits its creator’s role and cannot be narrowed. The\n`mcp:read`/`mcp:write` scopes advertised at api.zop.dev/.well-known/\noauth-protected-resource govern the MCP server, NOT this REST API.\n\nERRORS. Every non-2xx produced by the API itself is `application/json` and\nmatches the `ApiError` schema, a `oneOf` over the three shapes it returns:\n`{\"error\":{\"message\":\"…\"}}` from the platform services, a bare\n`{\"error\":\"…\"}` from the gateway (observed on 401, 405 and 429), and RFC\n6749 `{\"error\":\"…\",\"error_description\":\"…\"}` from the `/oauth/*` endpoints.\nWhich shape you get is decided by the layer that answered, not by the status\ncode, and `error` is a string in two of the three — so branch on structure,\nnever on status.\n\nCHECK `Content-Type` BEFORE PARSING. Two cases are not JSON at all. Requests\nrejected by the reverse proxy before they reach the API — 413 (body too\nlarge), 414 (URI too long), and 405 for a method the proxy refuses — return\nan nginx HTML error page, not `ApiError`. And `/oauth/authorize` labels its\nJSON error body `text/plain`. A client that calls `JSON.parse` on every\nnon-2xx will throw on exactly the requests it got wrong.\n\nVERSIONING AND DEPRECATION. Operations that are being withdrawn carry\n`deprecated: true` in this document, and that flag is the only signal.\nResponses do not carry `Sunset` or `Deprecation` headers, the API is not\nversioned in its paths, and no removal timeline is published — a deprecated\noperation keeps working until it is announced otherwise on the changelog at\nhttps://zop.dev/changelog. Re-read this document to detect changes.\n\nFor AI agents: an MCP server exposing this platform as tools is available at\nhttps://api.zop.dev/mcp-server — see https://zop.dev/.well-known/mcp.json.",
    "contact": {
      "name": "ZopDev Support",
      "email": "support@zop.dev",
      "url": "https://zop.dev/contact"
    },
    "termsOfService": "https://zop.dev/legal/website-terms-of-service",
    "license": {
      "name": "Proprietary — see Terms of Service",
      "url": "https://zop.dev/legal/website-terms-of-service"
    }
  },
  "x-zop-generated": "derived-from-endpoint-index",
  "servers": [
    {
      "url": "https://api.zop.dev",
      "description": "Production"
    }
  ],
  "externalDocs": {
    "description": "Full API reference",
    "url": "https://zop.dev/developer-docs/reference/api-reference"
  },
  "tags": [
    {
      "name": "Authentication",
      "description": "Endpoints for Authentication."
    },
    {
      "name": "Cloud Accounts",
      "description": "Endpoints for Cloud Accounts."
    },
    {
      "name": "Resources",
      "description": "Endpoints for Resources."
    },
    {
      "name": "Schedules",
      "description": "Endpoints for Schedules."
    },
    {
      "name": "Resource Groups",
      "description": "Endpoints for Resource Groups."
    },
    {
      "name": "Overrides",
      "description": "Endpoints for Overrides."
    },
    {
      "name": "Actions & Execution",
      "description": "Endpoints for Actions & Execution."
    },
    {
      "name": "Reports & Analytics",
      "description": "Endpoints for Reports & Analytics."
    },
    {
      "name": "Showback (Cost Attribution)",
      "description": "Endpoints for Showback (Cost Attribution)."
    },
    {
      "name": "Budgets",
      "description": "Endpoints for Budgets."
    },
    {
      "name": "Billing",
      "description": "Endpoints for Billing."
    },
    {
      "name": "Recommendations",
      "description": "Endpoints for Recommendations."
    },
    {
      "name": "Smart Tags",
      "description": "Endpoints for Smart Tags."
    },
    {
      "name": "VM Autoscaling",
      "description": "Endpoints for VM Autoscaling."
    },
    {
      "name": "Event Readiness",
      "description": "Endpoints for Event Readiness."
    },
    {
      "name": "Dashboards",
      "description": "Endpoints for Dashboards."
    },
    {
      "name": "Notifications",
      "description": "Endpoints for Notifications."
    },
    {
      "name": "Users & Teams",
      "description": "Endpoints for Users & Teams."
    },
    {
      "name": "Roles & Permissions",
      "description": "Endpoints for Roles & Permissions."
    },
    {
      "name": "Organizations",
      "description": "Endpoints for Organizations."
    },
    {
      "name": "Audit Logs",
      "description": "Endpoints for Audit Logs."
    },
    {
      "name": "Deployment Spaces",
      "description": "Endpoints for Deployment Spaces."
    },
    {
      "name": "Provisioning",
      "description": "Endpoints for Provisioning."
    },
    {
      "name": "Remediation Workflows",
      "description": "Endpoints for Remediation Workflows."
    },
    {
      "name": "Deployments",
      "description": "Endpoints for Deployments."
    },
    {
      "name": "Builds",
      "description": "Endpoints for Builds."
    },
    {
      "name": "Projects & Environments",
      "description": "Endpoints for Projects & Environments."
    },
    {
      "name": "Integrations",
      "description": "Endpoints for Integrations."
    },
    {
      "name": "Webhooks",
      "description": "Endpoints for Webhooks."
    }
  ],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "paths": {
    "/auth/login": {
      "post": {
        "operationId": "postAuthLogin",
        "summary": "Authenticate and receive tokens",
        "description": "Authenticate and receive tokens",
        "tags": [
          "Authentication"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/auth/{provider}/callback": {
      "get": {
        "operationId": "getAuthByProviderCallback",
        "summary": "Complete Google or GitHub sign-in with an authorization code (?code=)",
        "description": "Complete Google or GitHub sign-in with an authorization code (?code=)",
        "tags": [
          "Authentication"
        ],
        "parameters": [
          {
            "name": "provider",
            "in": "path",
            "required": true,
            "description": "The provider.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/auth/signup": {
      "post": {
        "operationId": "postAuthSignup",
        "summary": "Create a new user account",
        "description": "Create a new user account",
        "tags": [
          "Authentication"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/auth/refresh": {
      "post": {
        "operationId": "postAuthRefresh",
        "summary": "Refresh access token",
        "description": "Refresh access token",
        "tags": [
          "Authentication"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/auth/logout": {
      "post": {
        "operationId": "postAuthLogout",
        "summary": "Invalidate session",
        "description": "Invalidate session",
        "tags": [
          "Authentication"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/auth/email/verify": {
      "post": {
        "operationId": "postAuthEmailVerify",
        "summary": "Request email verification OTP",
        "description": "Request email verification OTP",
        "tags": [
          "Authentication"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/auth/otp/validate": {
      "patch": {
        "operationId": "patchAuthOtpValidate",
        "summary": "Validate OTP code",
        "description": "Validate OTP code",
        "tags": [
          "Authentication"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/auth/password/forget": {
      "post": {
        "operationId": "postAuthPasswordForget",
        "summary": "Initiate password reset",
        "description": "Initiate password reset",
        "tags": [
          "Authentication"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/auth/password/reset": {
      "patch": {
        "operationId": "patchAuthPasswordReset",
        "summary": "Complete password reset",
        "description": "Complete password reset",
        "tags": [
          "Authentication"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/auth/saml/initiate": {
      "post": {
        "operationId": "postAuthSamlInitiate",
        "summary": "Begin SAML SSO flow",
        "description": "Begin SAML SSO flow",
        "tags": [
          "Authentication"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/organisations": {
      "post": {
        "operationId": "postOrganisations",
        "summary": "Create organization",
        "description": "Create organization",
        "tags": [
          "Authentication"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "get": {
        "operationId": "getOrganisations",
        "summary": "List the organizations you belong to",
        "description": "List the organizations you belong to",
        "tags": [
          "Authentication"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/cloud-accounts": {
      "get": {
        "operationId": "getCloudAccounts",
        "summary": "List cloud accounts",
        "description": "List cloud accounts",
        "tags": [
          "Cloud Accounts"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "postCloudAccounts",
        "summary": "Connect cloud account",
        "description": "Connect cloud account",
        "tags": [
          "Cloud Accounts"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/cloud-accounts/{accountID}": {
      "get": {
        "operationId": "getCloudAccountsByAccountID",
        "summary": "Get cloud account",
        "description": "Get cloud account",
        "tags": [
          "Cloud Accounts"
        ],
        "parameters": [
          {
            "name": "accountID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the account.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "put": {
        "operationId": "putCloudAccountsByAccountID",
        "summary": "Update cloud account",
        "description": "Update cloud account",
        "tags": [
          "Cloud Accounts"
        ],
        "parameters": [
          {
            "name": "accountID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the account.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteCloudAccountsByAccountID",
        "summary": "Delete cloud account",
        "description": "Delete cloud account",
        "tags": [
          "Cloud Accounts"
        ],
        "parameters": [
          {
            "name": "accountID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the account.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/connect/gcp/oauth-url": {
      "get": {
        "operationId": "getConnectGcpOauthUrl",
        "summary": "Get GCP OAuth URL",
        "description": "Get GCP OAuth URL",
        "tags": [
          "Cloud Accounts"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/connect/gcp/oauth-exchange": {
      "post": {
        "operationId": "postConnectGcpOauthExchange",
        "summary": "Exchange GCP OAuth code",
        "description": "Exchange GCP OAuth code",
        "tags": [
          "Cloud Accounts"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/connect/gcp/oauth-finalize": {
      "post": {
        "operationId": "postConnectGcpOauthFinalize",
        "summary": "Finalize GCP OAuth",
        "description": "Finalize GCP OAuth",
        "tags": [
          "Cloud Accounts"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/cloud-accounts/{accountID}/clusters": {
      "get": {
        "operationId": "getCloudAccountsByAccountIDClusters",
        "summary": "List clusters in a cloud account",
        "description": "List clusters in a cloud account",
        "tags": [
          "Cloud Accounts"
        ],
        "parameters": [
          {
            "name": "accountID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the account.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/cloud-accounts/{accountID}/clusters/{region}/{clusterName}/access": {
      "put": {
        "operationId": "putCloudAccountsByAccountIDClustersByRegionByClusterNameAccess",
        "summary": "Register a cluster for kubeconfig access",
        "description": "Register a cluster for kubeconfig access",
        "tags": [
          "Cloud Accounts"
        ],
        "parameters": [
          {
            "name": "accountID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the account.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "region",
            "in": "path",
            "required": true,
            "description": "The region.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "clusterName",
            "in": "path",
            "required": true,
            "description": "The cluster name.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteCloudAccountsByAccountIDClustersByRegionByClusterNameAccess",
        "summary": "Deregister a cluster",
        "description": "Deregister a cluster",
        "tags": [
          "Cloud Accounts"
        ],
        "parameters": [
          {
            "name": "accountID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the account.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "region",
            "in": "path",
            "required": true,
            "description": "The region.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "clusterName",
            "in": "path",
            "required": true,
            "description": "The cluster name.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/resources": {
      "get": {
        "operationId": "getResources",
        "summary": "List resources with filtering",
        "description": "List resources with filtering",
        "tags": [
          "Resources"
        ],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "1-based page number.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 1
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Items per page.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 20
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response. `data` is the page itself, with no counts envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/resources/count": {
      "get": {
        "operationId": "getResourcesCount",
        "summary": "Count resources matching filters",
        "description": "Count resources matching filters",
        "tags": [
          "Resources"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/resources/{resourceID}": {
      "get": {
        "operationId": "getResourcesByResourceID",
        "summary": "Get resource detail",
        "description": "Get resource detail",
        "tags": [
          "Resources"
        ],
        "parameters": [
          {
            "name": "resourceID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the resource.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/resources/by-ids": {
      "get": {
        "operationId": "getResourcesByIds",
        "summary": "Get resources by IDs",
        "description": "Get resources by IDs",
        "tags": [
          "Resources"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/resources/by-uids": {
      "get": {
        "operationId": "getResourcesByUids",
        "summary": "Get resources by cloud UIDs (query)",
        "description": "Get resources by cloud UIDs (query)",
        "tags": [
          "Resources"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "postResourcesByUids",
        "summary": "Get resources by cloud UIDs (body)",
        "description": "Get resources by cloud UIDs (body)",
        "tags": [
          "Resources"
        ],
        "requestBody": {
          "required": true,
          "description": "Fetch many resources by their native provider UIDs in one request.",
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "uids"
                ],
                "properties": {
                  "uids": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Native provider IDs, e.g. `i-0abc`, `vm-prod-1`."
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/resources/discovery-summary": {
      "get": {
        "operationId": "getResourcesDiscoverySummary",
        "summary": "Per-provider discovery rollup",
        "description": "Per-provider discovery rollup",
        "tags": [
          "Resources"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/resources/{id}/access": {
      "get": {
        "operationId": "getResourcesByIdAccess",
        "summary": "Check IAM + network access to a managed Kubernetes cluster",
        "description": "Check IAM + network access to a managed Kubernetes cluster",
        "tags": [
          "Resources"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the resource.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/resources/last-synced": {
      "get": {
        "operationId": "getResourcesLastSynced",
        "summary": "Most recent discovery timestamp per provider/account",
        "description": "Most recent discovery timestamp per provider/account",
        "tags": [
          "Resources"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/resources/filter-fields": {
      "get": {
        "operationId": "getResourcesFilterFields",
        "summary": "Get available filter options",
        "description": "Get available filter options",
        "tags": [
          "Resources"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/resources/refresh": {
      "post": {
        "operationId": "postResourcesRefresh",
        "summary": "Trigger discovery refresh",
        "description": "Trigger discovery refresh",
        "tags": [
          "Resources"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/resources/refresh/status": {
      "get": {
        "operationId": "getResourcesRefreshStatus",
        "summary": "Check refresh status",
        "description": "Check refresh status",
        "tags": [
          "Resources"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/schedules": {
      "get": {
        "operationId": "getSchedules",
        "summary": "List schedules",
        "description": "List schedules",
        "tags": [
          "Schedules"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "postSchedules",
        "summary": "Create schedule",
        "description": "Create schedule",
        "tags": [
          "Schedules"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/schedules/{scheduleID}": {
      "get": {
        "operationId": "getSchedulesByScheduleID",
        "summary": "Get schedule",
        "description": "Get schedule",
        "tags": [
          "Schedules"
        ],
        "parameters": [
          {
            "name": "scheduleID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the schedule.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "put": {
        "operationId": "putSchedulesByScheduleID",
        "summary": "Update schedule",
        "description": "Update schedule",
        "tags": [
          "Schedules"
        ],
        "parameters": [
          {
            "name": "scheduleID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the schedule.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteSchedulesByScheduleID",
        "summary": "Delete schedule",
        "description": "Delete schedule",
        "tags": [
          "Schedules"
        ],
        "parameters": [
          {
            "name": "scheduleID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the schedule.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/schedules/{scheduleID}/resources/{resourceID}": {
      "post": {
        "operationId": "postSchedulesByScheduleIDResourcesByResourceID",
        "summary": "Attach resource",
        "description": "Attach resource",
        "tags": [
          "Schedules"
        ],
        "parameters": [
          {
            "name": "scheduleID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the schedule.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resourceID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the resource.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteSchedulesByScheduleIDResourcesByResourceID",
        "summary": "Detach resource",
        "description": "Detach resource",
        "tags": [
          "Schedules"
        ],
        "parameters": [
          {
            "name": "scheduleID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the schedule.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resourceID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the resource.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/schedules/{scheduleID}/groups/{groupID}": {
      "post": {
        "operationId": "postSchedulesByScheduleIDGroupsByGroupID",
        "summary": "Attach group",
        "description": "Attach group",
        "tags": [
          "Schedules"
        ],
        "parameters": [
          {
            "name": "scheduleID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the schedule.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "groupID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the group.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteSchedulesByScheduleIDGroupsByGroupID",
        "summary": "Detach group",
        "description": "Detach group",
        "tags": [
          "Schedules"
        ],
        "parameters": [
          {
            "name": "scheduleID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the schedule.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "groupID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the group.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/resource-groups": {
      "get": {
        "operationId": "getResourceGroups",
        "summary": "List resource groups",
        "description": "List resource groups",
        "tags": [
          "Resource Groups"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "postResourceGroups",
        "summary": "Create resource group",
        "description": "Create resource group",
        "tags": [
          "Resource Groups"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/resource-groups/{groupID}": {
      "get": {
        "operationId": "getResourceGroupsByGroupID",
        "summary": "Get resource group",
        "description": "Get resource group",
        "tags": [
          "Resource Groups"
        ],
        "parameters": [
          {
            "name": "groupID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the group.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "put": {
        "operationId": "putResourceGroupsByGroupID",
        "summary": "Update resource group",
        "description": "Update resource group",
        "tags": [
          "Resource Groups"
        ],
        "parameters": [
          {
            "name": "groupID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the group.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteResourceGroupsByGroupID",
        "summary": "Delete resource group",
        "description": "Delete resource group",
        "tags": [
          "Resource Groups"
        ],
        "parameters": [
          {
            "name": "groupID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the group.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/resource-groups/{groupID}/schedules": {
      "get": {
        "operationId": "getResourceGroupsByGroupIDSchedules",
        "summary": "Get group schedules",
        "description": "Get group schedules",
        "tags": [
          "Resource Groups"
        ],
        "parameters": [
          {
            "name": "groupID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the group.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/resource-groups/{groupID}/resources/{resourceID}": {
      "post": {
        "operationId": "postResourceGroupsByGroupIDResourcesByResourceID",
        "summary": "Add member",
        "description": "Add member",
        "tags": [
          "Resource Groups"
        ],
        "parameters": [
          {
            "name": "groupID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the group.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resourceID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the resource.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteResourceGroupsByGroupIDResourcesByResourceID",
        "summary": "Remove member",
        "description": "Remove member",
        "tags": [
          "Resource Groups"
        ],
        "parameters": [
          {
            "name": "groupID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the group.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resourceID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the resource.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/resource-groups/{groupID}/resources/{resourceID}/sequence": {
      "patch": {
        "operationId": "patchResourceGroupsByGroupIDResourcesByResourceIDSequence",
        "summary": "Update execution order",
        "description": "Update execution order",
        "tags": [
          "Resource Groups"
        ],
        "parameters": [
          {
            "name": "groupID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the group.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resourceID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the resource.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/overrides": {
      "get": {
        "operationId": "getOverrides",
        "summary": "List overrides",
        "description": "List overrides",
        "tags": [
          "Overrides"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "postOverrides",
        "summary": "Create override",
        "description": "Create override",
        "tags": [
          "Overrides"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/overrides/{overrideID}": {
      "get": {
        "operationId": "getOverridesByOverrideID",
        "summary": "Get override",
        "description": "Get override",
        "tags": [
          "Overrides"
        ],
        "parameters": [
          {
            "name": "overrideID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the override.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteOverridesByOverrideID",
        "summary": "Delete override",
        "description": "Delete override",
        "tags": [
          "Overrides"
        ],
        "parameters": [
          {
            "name": "overrideID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the override.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/resource-groups/{groupID}/overrides": {
      "get": {
        "operationId": "getResourceGroupsByGroupIDOverrides",
        "summary": "List group overrides",
        "description": "List group overrides",
        "tags": [
          "Overrides"
        ],
        "parameters": [
          {
            "name": "groupID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the group.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "postResourceGroupsByGroupIDOverrides",
        "summary": "Create group override",
        "description": "Create group override",
        "tags": [
          "Overrides"
        ],
        "parameters": [
          {
            "name": "groupID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the group.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/actions": {
      "post": {
        "operationId": "postActions",
        "summary": "Submit manual action",
        "description": "Submit manual action",
        "tags": [
          "Actions & Execution"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/actions/bulk": {
      "post": {
        "operationId": "postActionsBulk",
        "summary": "Submit bulk action",
        "description": "Submit bulk action",
        "tags": [
          "Actions & Execution"
        ],
        "requestBody": {
          "required": true,
          "description": "One action applied to every resource in a group.",
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "type",
                  "groupID"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "description": "The action to apply, e.g. `start`, `stop`."
                  },
                  "groupID": {
                    "type": "string",
                    "description": "Resource group to apply it to."
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/actions/{actionID}": {
      "get": {
        "operationId": "getActionsByActionID",
        "summary": "Get action status",
        "description": "Get action status",
        "tags": [
          "Actions & Execution"
        ],
        "parameters": [
          {
            "name": "actionID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the action.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/actions/bulk/{bulkActionID}": {
      "get": {
        "operationId": "getActionsBulkByBulkActionID",
        "summary": "Get bulk action status",
        "description": "Get bulk action status",
        "tags": [
          "Actions & Execution"
        ],
        "parameters": [
          {
            "name": "bulkActionID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the bulk action.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/actions/bulk/latest": {
      "get": {
        "operationId": "getActionsBulkLatest",
        "summary": "Get the most recent bulk action",
        "description": "Get the most recent bulk action",
        "tags": [
          "Actions & Execution"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/state-history": {
      "get": {
        "operationId": "getStateHistory",
        "summary": "Get state history",
        "description": "Get state history",
        "tags": [
          "Actions & Execution"
        ],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "1-based page number.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 1
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Items per page.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 50
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response. `data` carries the page plus its counts.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/reports/summary": {
      "get": {
        "operationId": "getReportsSummary",
        "summary": "Dashboard summary",
        "description": "Dashboard summary",
        "tags": [
          "Reports & Analytics"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/reports/trends": {
      "get": {
        "operationId": "getReportsTrends",
        "summary": "Cost trends",
        "description": "Cost trends",
        "tags": [
          "Reports & Analytics"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/reports/cost-history": {
      "get": {
        "operationId": "getReportsCostHistory",
        "summary": "Long-range cost history",
        "description": "Long-range cost history",
        "tags": [
          "Reports & Analytics"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/reports/metrics": {
      "get": {
        "operationId": "getReportsMetrics",
        "summary": "Aggregate utilization metrics",
        "description": "Aggregate utilization metrics",
        "tags": [
          "Reports & Analytics"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/reports/costs/resources": {
      "get": {
        "operationId": "getReportsCostsResources",
        "summary": "Resource costs",
        "description": "Resource costs",
        "tags": [
          "Reports & Analytics"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/reports/costs/breakdown": {
      "get": {
        "operationId": "getReportsCostsBreakdown",
        "summary": "Cost breakdown by dimensions (Sankey)",
        "description": "Cost breakdown by dimensions (Sankey)",
        "tags": [
          "Reports & Analytics"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/reports/providers/summary": {
      "get": {
        "operationId": "getReportsProvidersSummary",
        "summary": "Provider summary",
        "description": "Provider summary",
        "tags": [
          "Reports & Analytics"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/resources/summary": {
      "get": {
        "operationId": "getResourcesSummary",
        "summary": "Resource summary",
        "description": "Resource summary",
        "tags": [
          "Reports & Analytics"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/reports/resources/metrics": {
      "get": {
        "operationId": "getReportsResourcesMetrics",
        "summary": "Per-resource utilization metrics",
        "description": "Per-resource utilization metrics",
        "tags": [
          "Reports & Analytics"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/resources/{resourceID}/metrics/live": {
      "get": {
        "operationId": "getResourcesByResourceIDMetricsLive",
        "summary": "Live container state of a VM: scope=vm, optional container=<name>. source is backend or exec",
        "description": "Live container state of a VM: scope=vm, optional container=<name>. source is backend or exec",
        "tags": [
          "Reports & Analytics"
        ],
        "parameters": [
          {
            "name": "resourceID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the resource.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/resources/{resourceID}/metrics/range": {
      "get": {
        "operationId": "getResourcesByResourceIDMetricsRange",
        "summary": "Usage history for one VM container from the attached metrics backend: scope=vm, container=<name>, range=15m|1h|6h|24h. 404 without a backend",
        "description": "Usage history for one VM container from the attached metrics backend: scope=vm, container=<name>, range=15m|1h|6h|24h. 404 without a backend",
        "tags": [
          "Reports & Analytics"
        ],
        "parameters": [
          {
            "name": "resourceID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the resource.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/resources/{resourceID}/logs/range": {
      "get": {
        "operationId": "getResourcesByResourceIDLogsRange",
        "summary": "Log history for one VM container from the attached logs backend, newest first: scope=vm, container=<name>, range=15m|1h|6h|24h, limit (default 200, max 1000), optional q and cursor. Returns items, hasMore, nextCursor, provider. 404 without a logs backend",
        "description": "Log history for one VM container from the attached logs backend, newest first: scope=vm, container=<name>, range=15m|1h|6h|24h, limit (default 200, max 1000), optional q and cursor. Returns items, hasMore, nextCursor, provider. 404 without a logs backend",
        "tags": [
          "Reports & Analytics"
        ],
        "parameters": [
          {
            "name": "resourceID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the resource.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/reports/resources/activity": {
      "get": {
        "operationId": "getReportsResourcesActivity",
        "summary": "Per-resource activity timeline",
        "description": "Per-resource activity timeline",
        "tags": [
          "Reports & Analytics"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/reports/snapshots": {
      "get": {
        "operationId": "getReportsSnapshots",
        "summary": "Monthly snapshots",
        "description": "Monthly snapshots",
        "tags": [
          "Reports & Analytics"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/reports/anomalies": {
      "get": {
        "operationId": "getReportsAnomalies",
        "summary": "List anomaly records",
        "description": "List anomaly records",
        "tags": [
          "Reports & Analytics"
        ],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "1-based page number.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 1
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Items per page.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 20
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response. `data` carries the page plus its counts.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/reports/export": {
      "post": {
        "operationId": "postReportsExport",
        "summary": "Export a report as CSV/JSON",
        "description": "Export a report as CSV/JSON",
        "tags": [
          "Reports & Analytics"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/reports/teams": {
      "get": {
        "operationId": "getReportsTeams",
        "summary": "Cost per team",
        "description": "Cost per team",
        "tags": [
          "Showback (Cost Attribution)"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/reports/teams/{teamID}": {
      "get": {
        "operationId": "getReportsTeamsByTeamID",
        "summary": "Team breakdown",
        "description": "Team breakdown",
        "tags": [
          "Showback (Cost Attribution)"
        ],
        "parameters": [
          {
            "name": "teamID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the team.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/reports/teams/{teamID}/resources": {
      "get": {
        "operationId": "getReportsTeamsByTeamIDResources",
        "summary": "Per-resource cost for a team",
        "description": "Per-resource cost for a team",
        "tags": [
          "Showback (Cost Attribution)"
        ],
        "parameters": [
          {
            "name": "teamID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the team.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/reports/teams/trends": {
      "get": {
        "operationId": "getReportsTeamsTrends",
        "summary": "Team cost trends",
        "description": "Team cost trends",
        "tags": [
          "Showback (Cost Attribution)"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/reports/tags": {
      "get": {
        "operationId": "getReportsTags",
        "summary": "Tag keys with attributed cost",
        "description": "Tag keys with attributed cost",
        "tags": [
          "Showback (Cost Attribution)"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/reports/tags/{tagKey}": {
      "get": {
        "operationId": "getReportsTagsByTagKey",
        "summary": "Tag values for a key",
        "description": "Tag values for a key",
        "tags": [
          "Showback (Cost Attribution)"
        ],
        "parameters": [
          {
            "name": "tagKey",
            "in": "path",
            "required": true,
            "description": "The tag key.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/reports/tags/{tagKey}/values/{tagValue}/resources": {
      "get": {
        "operationId": "getReportsTagsByTagKeyValuesByTagValueResources",
        "summary": "Resources by tag",
        "description": "Resources by tag",
        "tags": [
          "Showback (Cost Attribution)"
        ],
        "parameters": [
          {
            "name": "tagKey",
            "in": "path",
            "required": true,
            "description": "The tag key.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tagValue",
            "in": "path",
            "required": true,
            "description": "The tag value.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/reports/tags/trends": {
      "get": {
        "operationId": "getReportsTagsTrends",
        "summary": "Tag cost trends",
        "description": "Tag cost trends",
        "tags": [
          "Showback (Cost Attribution)"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/budgets/summary": {
      "get": {
        "operationId": "getBudgetsSummary",
        "summary": "Budget summary",
        "description": "Budget summary",
        "tags": [
          "Budgets"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/budgets": {
      "get": {
        "operationId": "getBudgets",
        "summary": "List budgets",
        "description": "List budgets",
        "tags": [
          "Budgets"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "postBudgets",
        "summary": "Create budget",
        "description": "Create budget",
        "tags": [
          "Budgets"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/budgets/{budgetID}": {
      "put": {
        "operationId": "putBudgetsByBudgetID",
        "summary": "Update budget",
        "description": "Update budget",
        "tags": [
          "Budgets"
        ],
        "parameters": [
          {
            "name": "budgetID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the budget.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteBudgetsByBudgetID",
        "summary": "Delete budget",
        "description": "Delete budget",
        "tags": [
          "Budgets"
        ],
        "parameters": [
          {
            "name": "budgetID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the budget.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/events": {
      "get": {
        "operationId": "getEvents",
        "summary": "List scheduler events",
        "description": "List scheduler events",
        "tags": [
          "Budgets"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "postEvents",
        "summary": "Record scheduler event",
        "description": "Record scheduler event",
        "tags": [
          "Budgets"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/currency-exchange-rate": {
      "get": {
        "operationId": "getCurrencyExchangeRate",
        "summary": "Current foreign-exchange rates used by reports",
        "description": "Current foreign-exchange rates used by reports",
        "tags": [
          "Budgets"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/billing/sync-status": {
      "get": {
        "operationId": "getBillingSyncStatus",
        "summary": "Billing sync status for every cloud account in the org",
        "description": "Billing sync status for every cloud account in the org",
        "tags": [
          "Billing"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/billing/verify": {
      "post": {
        "operationId": "postBillingVerify",
        "summary": "Verify billing access for one cloud account. Body: {cloudAccountId, provider}",
        "description": "Verify billing access for one cloud account. Body: {cloudAccountId, provider}",
        "tags": [
          "Billing"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "202": {
            "description": "Accepted. Triggers a billing sync across every connected cloud account and returns a job reference; poll `GET /billing/sync-status` until each entry reports a terminal state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/recommendations/resources": {
      "get": {
        "operationId": "getRecommendationsResources",
        "summary": "List resources with recommendation summaries",
        "description": "List resources with recommendation summaries",
        "tags": [
          "Recommendations"
        ],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "1-based page number.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 1
            }
          },
          {
            "name": "size",
            "in": "query",
            "required": false,
            "description": "Items per page (maximum 100).",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 10,
              "maximum": 100
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response. `data` carries the page plus its counts.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/recommendations/rules": {
      "get": {
        "operationId": "getRecommendationsRules",
        "summary": "List rules with recommendation summaries",
        "description": "List rules with recommendation summaries",
        "tags": [
          "Recommendations"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/recommendations": {
      "get": {
        "operationId": "getRecommendations",
        "summary": "List individual recommendations",
        "description": "List individual recommendations",
        "tags": [
          "Recommendations"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/recommendations/summary": {
      "get": {
        "operationId": "getRecommendationsSummary",
        "summary": "Recommendation summary",
        "description": "Recommendation summary",
        "tags": [
          "Recommendations"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/recommendations/summary/providers": {
      "get": {
        "operationId": "getRecommendationsSummaryProviders",
        "summary": "Provider breakdown",
        "description": "Provider breakdown",
        "tags": [
          "Recommendations"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/recommendations/filter-fields": {
      "get": {
        "operationId": "getRecommendationsFilterFields",
        "summary": "Get available filter fields",
        "description": "Get available filter fields",
        "tags": [
          "Recommendations"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/recommendations/resources/{resourceUID}": {
      "get": {
        "operationId": "getRecommendationsResourcesByResourceUID",
        "summary": "Resource recommendations (deprecated)",
        "description": "Resource recommendations (deprecated)",
        "tags": [
          "Recommendations"
        ],
        "deprecated": true,
        "parameters": [
          {
            "name": "resourceUID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the resource.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/recommendations/{recID}/detail": {
      "get": {
        "operationId": "getRecommendationsByRecIDDetail",
        "summary": "Recommendation detail",
        "description": "Recommendation detail",
        "tags": [
          "Recommendations"
        ],
        "parameters": [
          {
            "name": "recID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the rec.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/recommendations/{recommendationID}": {
      "patch": {
        "operationId": "patchRecommendationsByRecommendationID",
        "summary": "Update recommendation",
        "description": "Update recommendation",
        "tags": [
          "Recommendations"
        ],
        "parameters": [
          {
            "name": "recommendationID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the recommendation.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/recommendations/refresh": {
      "post": {
        "operationId": "postRecommendationsRefresh",
        "summary": "Refresh recommendations",
        "description": "Refresh recommendations",
        "tags": [
          "Recommendations"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/smart-tags": {
      "get": {
        "operationId": "getSmartTags",
        "summary": "List derived/accepted virtual tags + org-wide counts",
        "description": "List derived/accepted virtual tags + org-wide counts",
        "tags": [
          "Smart Tags"
        ],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "1-based page number.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 1
            }
          },
          {
            "name": "size",
            "in": "query",
            "required": false,
            "description": "Items per page (maximum 100).",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 20,
              "maximum": 100
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response. `data` carries the page plus its counts.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "patch": {
        "operationId": "patchSmartTags",
        "summary": "Accept or revoke tags (body: resourceUid, keys, all, accepted)",
        "description": "Accept or revoke tags (body: resourceUid, keys, all, accepted)",
        "tags": [
          "Smart Tags"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response. `data` carries the page plus its counts.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/tagging/policies/catalog": {
      "get": {
        "operationId": "getTaggingPoliciesCatalog",
        "summary": "Tagging-policy form vocabulary",
        "description": "Tagging-policy form vocabulary",
        "tags": [
          "Smart Tags"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/tagging/policies/validations": {
      "post": {
        "operationId": "postTaggingPoliciesValidations",
        "summary": "Validate a tagging-policy spec before create",
        "description": "Validate a tagging-policy spec before create",
        "tags": [
          "Smart Tags"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/autoscaler-policies": {
      "get": {
        "operationId": "getAutoscalerPolicies",
        "summary": "List autoscaler policies",
        "description": "List autoscaler policies",
        "tags": [
          "VM Autoscaling"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "postAutoscalerPolicies",
        "summary": "Create policy",
        "description": "Create policy",
        "tags": [
          "VM Autoscaling"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/autoscaler-policies/count": {
      "get": {
        "operationId": "getAutoscalerPoliciesCount",
        "summary": "Count policies by status",
        "description": "Count policies by status",
        "tags": [
          "VM Autoscaling"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/autoscaler-policies/filters": {
      "get": {
        "operationId": "getAutoscalerPoliciesFilters",
        "summary": "Distinct filter values",
        "description": "Distinct filter values",
        "tags": [
          "VM Autoscaling"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/autoscaler-policies/smart-defaults": {
      "get": {
        "operationId": "getAutoscalerPoliciesSmartDefaults",
        "summary": "Smart defaults for a target",
        "description": "Smart defaults for a target",
        "tags": [
          "VM Autoscaling"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/autoscaler/cloud-scaling-policies": {
      "get": {
        "operationId": "getAutoscalerCloudScalingPolicies",
        "summary": "Inspect the scaling policies already configured on a target in your cloud account",
        "description": "Inspect the scaling policies already configured on a target in your cloud account",
        "tags": [
          "VM Autoscaling"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/autoscaler-policies/required-permissions": {
      "get": {
        "operationId": "getAutoscalerPoliciesRequiredPermissions",
        "summary": "IAM permissions to provision infra",
        "description": "IAM permissions to provision infra",
        "tags": [
          "VM Autoscaling"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/autoscaler-policies/create-infrastructure": {
      "post": {
        "operationId": "postAutoscalerPoliciesCreateInfrastructure",
        "summary": "Provision autoscaler infrastructure",
        "description": "Provision autoscaler infrastructure",
        "tags": [
          "VM Autoscaling"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/autoscaler-policies/infrastructure-status": {
      "get": {
        "operationId": "getAutoscalerPoliciesInfrastructureStatus",
        "summary": "Provisioning status for a cloud account",
        "description": "Provisioning status for a cloud account",
        "tags": [
          "VM Autoscaling"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/autoscaler-policies/{policyID}": {
      "get": {
        "operationId": "getAutoscalerPoliciesByPolicyID",
        "summary": "Get policy",
        "description": "Get policy",
        "tags": [
          "VM Autoscaling"
        ],
        "parameters": [
          {
            "name": "policyID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the policy.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "put": {
        "operationId": "putAutoscalerPoliciesByPolicyID",
        "summary": "Update policy",
        "description": "Update policy",
        "tags": [
          "VM Autoscaling"
        ],
        "parameters": [
          {
            "name": "policyID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the policy.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteAutoscalerPoliciesByPolicyID",
        "summary": "Delete policy",
        "description": "Delete policy",
        "tags": [
          "VM Autoscaling"
        ],
        "parameters": [
          {
            "name": "policyID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the policy.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/autoscaler-policies/{policyID}/apply": {
      "post": {
        "operationId": "postAutoscalerPoliciesByPolicyIDApply",
        "summary": "Apply latest recommendation",
        "description": "Apply latest recommendation",
        "tags": [
          "VM Autoscaling"
        ],
        "parameters": [
          {
            "name": "policyID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the policy.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/autoscaler-policies/{policyID}/pause": {
      "post": {
        "operationId": "postAutoscalerPoliciesByPolicyIDPause",
        "summary": "Pause evaluation",
        "description": "Pause evaluation",
        "tags": [
          "VM Autoscaling"
        ],
        "parameters": [
          {
            "name": "policyID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the policy.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/autoscaler-policies/{policyID}/resume": {
      "post": {
        "operationId": "postAutoscalerPoliciesByPolicyIDResume",
        "summary": "Resume evaluation",
        "description": "Resume evaluation",
        "tags": [
          "VM Autoscaling"
        ],
        "parameters": [
          {
            "name": "policyID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the policy.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/autoscaler-policies/{policyID}/remove": {
      "post": {
        "operationId": "postAutoscalerPoliciesByPolicyIDRemove",
        "summary": "Soft-delete the policy",
        "description": "Soft-delete the policy",
        "tags": [
          "VM Autoscaling"
        ],
        "parameters": [
          {
            "name": "policyID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the policy.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/autoscaler-policies/{policyID}/events": {
      "get": {
        "operationId": "getAutoscalerPoliciesByPolicyIDEvents",
        "summary": "Per-policy event log",
        "description": "Per-policy event log",
        "tags": [
          "VM Autoscaling"
        ],
        "parameters": [
          {
            "name": "policyID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the policy.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/event-readiness": {
      "get": {
        "operationId": "getEventReadiness",
        "summary": "List plans",
        "description": "List plans",
        "tags": [
          "Event Readiness"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "postEventReadiness",
        "summary": "Create a plan",
        "description": "Create a plan",
        "tags": [
          "Event Readiness"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/event-readiness/calculate": {
      "get": {
        "operationId": "getEventReadinessCalculate",
        "summary": "Preview scaled capacity",
        "description": "Preview scaled capacity",
        "tags": [
          "Event Readiness"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/event-readiness/calculate-db": {
      "get": {
        "operationId": "getEventReadinessCalculateDb",
        "summary": "Preview database tier change",
        "description": "Preview database tier change",
        "tags": [
          "Event Readiness"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/event-readiness/preview-readiness": {
      "post": {
        "operationId": "postEventReadinessPreviewReadiness",
        "summary": "Preview a full plan without saving",
        "description": "Preview a full plan without saving",
        "tags": [
          "Event Readiness"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/event-readiness/count": {
      "get": {
        "operationId": "getEventReadinessCount",
        "summary": "Count plans",
        "description": "Count plans",
        "tags": [
          "Event Readiness"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/event-readiness/filters": {
      "get": {
        "operationId": "getEventReadinessFilters",
        "summary": "Filter values",
        "description": "Filter values",
        "tags": [
          "Event Readiness"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/event-readiness/{eventID}": {
      "get": {
        "operationId": "getEventReadinessByEventID",
        "summary": "Get a plan",
        "description": "Get a plan",
        "tags": [
          "Event Readiness"
        ],
        "parameters": [
          {
            "name": "eventID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the event.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "put": {
        "operationId": "putEventReadinessByEventID",
        "summary": "Update a plan",
        "description": "Update a plan",
        "tags": [
          "Event Readiness"
        ],
        "parameters": [
          {
            "name": "eventID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the event.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteEventReadinessByEventID",
        "summary": "Delete a plan",
        "description": "Delete a plan",
        "tags": [
          "Event Readiness"
        ],
        "parameters": [
          {
            "name": "eventID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the event.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/event-readiness/{eventID}/db-impact": {
      "get": {
        "operationId": "getEventReadinessByEventIDDbImpact",
        "summary": "Estimated DB impact",
        "description": "Estimated DB impact",
        "tags": [
          "Event Readiness"
        ],
        "parameters": [
          {
            "name": "eventID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the event.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/event-readiness/{eventID}/cost-estimate": {
      "get": {
        "operationId": "getEventReadinessByEventIDCostEstimate",
        "summary": "Estimated extra cost",
        "description": "Estimated extra cost",
        "tags": [
          "Event Readiness"
        ],
        "parameters": [
          {
            "name": "eventID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the event.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/event-readiness/{eventID}/readiness-check": {
      "get": {
        "operationId": "getEventReadinessByEventIDReadinessCheck",
        "summary": "Re-validate the plan",
        "description": "Re-validate the plan",
        "tags": [
          "Event Readiness"
        ],
        "parameters": [
          {
            "name": "eventID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the event.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/event-readiness/{eventID}/schedule": {
      "post": {
        "operationId": "postEventReadinessByEventIDSchedule",
        "summary": "Dispatch the plan to executor",
        "description": "Dispatch the plan to executor",
        "tags": [
          "Event Readiness"
        ],
        "parameters": [
          {
            "name": "eventID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the event.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/event-readiness/{eventID}/cancel": {
      "post": {
        "operationId": "postEventReadinessByEventIDCancel",
        "summary": "Cancel an active plan",
        "description": "Cancel an active plan",
        "tags": [
          "Event Readiness"
        ],
        "parameters": [
          {
            "name": "eventID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the event.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/event-readiness/{eventID}/logs": {
      "get": {
        "operationId": "getEventReadinessByEventIDLogs",
        "summary": "Plan audit log",
        "description": "Plan audit log",
        "tags": [
          "Event Readiness"
        ],
        "parameters": [
          {
            "name": "eventID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the event.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/dashboards": {
      "get": {
        "operationId": "getDashboards",
        "summary": "List dashboards (system presets + user-created)",
        "description": "List dashboards (system presets + user-created)",
        "tags": [
          "Dashboards"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "postDashboards",
        "summary": "Create a dashboard",
        "description": "Create a dashboard",
        "tags": [
          "Dashboards"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/dashboards/{dashboardID}": {
      "get": {
        "operationId": "getDashboardsByDashboardID",
        "summary": "Get a dashboard",
        "description": "Get a dashboard",
        "tags": [
          "Dashboards"
        ],
        "parameters": [
          {
            "name": "dashboardID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the dashboard.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "patch": {
        "operationId": "patchDashboardsByDashboardID",
        "summary": "Update a dashboard",
        "description": "Update a dashboard",
        "tags": [
          "Dashboards"
        ],
        "parameters": [
          {
            "name": "dashboardID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the dashboard.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteDashboardsByDashboardID",
        "summary": "Delete a dashboard",
        "description": "Delete a dashboard",
        "tags": [
          "Dashboards"
        ],
        "parameters": [
          {
            "name": "dashboardID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the dashboard.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/dashboards/default": {
      "put": {
        "operationId": "putDashboardsDefault",
        "summary": "Set the org default dashboard",
        "description": "Set the org default dashboard",
        "tags": [
          "Dashboards"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/notifications": {
      "get": {
        "operationId": "getNotifications",
        "summary": "List notifications (legacy)",
        "description": "List notifications (legacy)",
        "tags": [
          "Notifications"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "postNotifications",
        "summary": "Create notification (legacy)",
        "description": "Create notification (legacy)",
        "tags": [
          "Notifications"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/notifications/{notificationID}": {
      "put": {
        "operationId": "putNotificationsByNotificationID",
        "summary": "Update notification (legacy)",
        "description": "Update notification (legacy)",
        "tags": [
          "Notifications"
        ],
        "parameters": [
          {
            "name": "notificationID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the notification.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteNotificationsByNotificationID",
        "summary": "Delete notification (legacy)",
        "description": "Delete notification (legacy)",
        "tags": [
          "Notifications"
        ],
        "parameters": [
          {
            "name": "notificationID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the notification.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/notifications/channels": {
      "get": {
        "operationId": "getNotificationsChannels",
        "summary": "List notification channels",
        "description": "List notification channels",
        "tags": [
          "Notifications"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "postNotificationsChannels",
        "summary": "Create notification channel",
        "description": "Create notification channel",
        "tags": [
          "Notifications"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/notifications/channels/{channelID}": {
      "put": {
        "operationId": "putNotificationsChannelsByChannelID",
        "summary": "Update notification channel",
        "description": "Update notification channel",
        "tags": [
          "Notifications"
        ],
        "parameters": [
          {
            "name": "channelID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the channel.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteNotificationsChannelsByChannelID",
        "summary": "Delete notification channel",
        "description": "Delete notification channel",
        "tags": [
          "Notifications"
        ],
        "parameters": [
          {
            "name": "channelID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the channel.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/notifications/subscriptions": {
      "get": {
        "operationId": "getNotificationsSubscriptions",
        "summary": "List subscriptions",
        "description": "List subscriptions",
        "tags": [
          "Notifications"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "postNotificationsSubscriptions",
        "summary": "Create subscription",
        "description": "Create subscription",
        "tags": [
          "Notifications"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/notifications/subscriptions/{subID}": {
      "put": {
        "operationId": "putNotificationsSubscriptionsBySubID",
        "summary": "Update subscription",
        "description": "Update subscription",
        "tags": [
          "Notifications"
        ],
        "parameters": [
          {
            "name": "subID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the sub.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteNotificationsSubscriptionsBySubID",
        "summary": "Delete subscription",
        "description": "Delete subscription",
        "tags": [
          "Notifications"
        ],
        "parameters": [
          {
            "name": "subID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the sub.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/notifications/subscriptions/bulk": {
      "post": {
        "operationId": "postNotificationsSubscriptionsBulk",
        "summary": "Bulk create/update subscriptions",
        "description": "Bulk create/update subscriptions",
        "tags": [
          "Notifications"
        ],
        "requestBody": {
          "required": true,
          "description": "Create or update many subscriptions at once. An existing subscription matched on channelID + eventType + scope is updated; anything unmatched is created.",
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "subscriptions"
                ],
                "properties": {
                  "subscriptions": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "channelID": {
                          "type": "string"
                        },
                        "eventType": {
                          "type": "string"
                        },
                        "scopeType": {
                          "type": "string"
                        },
                        "scopeID": {
                          "type": "string"
                        },
                        "enabled": {
                          "type": "boolean"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/notifications/event-types": {
      "get": {
        "operationId": "getNotificationsEventTypes",
        "summary": "List event types",
        "description": "List event types",
        "tags": [
          "Notifications"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/notifications/email-preferences": {
      "get": {
        "operationId": "getNotificationsEmailPreferences",
        "summary": "Get email preferences",
        "description": "Get email preferences",
        "tags": [
          "Notifications"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/notifications/email-preferences/{eventKey}": {
      "put": {
        "operationId": "putNotificationsEmailPreferencesByEventKey",
        "summary": "Update email preference",
        "description": "Update email preference",
        "tags": [
          "Notifications"
        ],
        "parameters": [
          {
            "name": "eventKey",
            "in": "path",
            "required": true,
            "description": "The event key.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/notifications/share/recommendation/{recID}": {
      "post": {
        "operationId": "postNotificationsShareRecommendationByRecID",
        "summary": "Share recommendation",
        "description": "Share recommendation",
        "tags": [
          "Notifications"
        ],
        "parameters": [
          {
            "name": "recID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the rec.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/notifications/channels/{channelID}/test": {
      "post": {
        "operationId": "postNotificationsChannelsByChannelIDTest",
        "summary": "Test channel delivery",
        "description": "Test channel delivery",
        "tags": [
          "Notifications"
        ],
        "parameters": [
          {
            "name": "channelID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the channel.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/users": {
      "get": {
        "operationId": "getUsers",
        "summary": "List users",
        "description": "List users",
        "tags": [
          "Users & Teams"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "postUsers",
        "summary": "Invite user",
        "description": "Invite user",
        "tags": [
          "Users & Teams"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/users/{email}": {
      "patch": {
        "operationId": "patchUsersByEmail",
        "summary": "Update user",
        "description": "Update user",
        "tags": [
          "Users & Teams"
        ],
        "parameters": [
          {
            "name": "email",
            "in": "path",
            "required": true,
            "description": "The email.",
            "schema": {
              "type": "string",
              "format": "email"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteUsersByEmail",
        "summary": "Remove user",
        "description": "Remove user",
        "tags": [
          "Users & Teams"
        ],
        "parameters": [
          {
            "name": "email",
            "in": "path",
            "required": true,
            "description": "The email.",
            "schema": {
              "type": "string",
              "format": "email"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/teams": {
      "get": {
        "operationId": "getTeams",
        "summary": "List teams",
        "description": "List teams",
        "tags": [
          "Users & Teams"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "postTeams",
        "summary": "Create team",
        "description": "Create team",
        "tags": [
          "Users & Teams"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/teams/{teamID}": {
      "get": {
        "operationId": "getTeamsByTeamID",
        "summary": "Get team",
        "description": "Get team",
        "tags": [
          "Users & Teams"
        ],
        "parameters": [
          {
            "name": "teamID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the team.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "put": {
        "operationId": "putTeamsByTeamID",
        "summary": "Update team",
        "description": "Update team",
        "tags": [
          "Users & Teams"
        ],
        "parameters": [
          {
            "name": "teamID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the team.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteTeamsByTeamID",
        "summary": "Delete team",
        "description": "Delete team",
        "tags": [
          "Users & Teams"
        ],
        "parameters": [
          {
            "name": "teamID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the team.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/teams/{teamID}/members": {
      "get": {
        "operationId": "getTeamsByTeamIDMembers",
        "summary": "List team members",
        "description": "List team members",
        "tags": [
          "Users & Teams"
        ],
        "parameters": [
          {
            "name": "teamID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the team.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "postTeamsByTeamIDMembers",
        "summary": "Add team member. Body: {email, roleId}",
        "description": "Add team member. Body: {email, roleId}",
        "tags": [
          "Users & Teams"
        ],
        "parameters": [
          {
            "name": "teamID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the team.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/teams/{teamID}/members/{email}": {
      "put": {
        "operationId": "putTeamsByTeamIDMembersByEmail",
        "summary": "Change a member's team role. Body: {roleId}",
        "description": "Change a member's team role. Body: {roleId}",
        "tags": [
          "Users & Teams"
        ],
        "parameters": [
          {
            "name": "teamID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the team.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "email",
            "in": "path",
            "required": true,
            "description": "The email.",
            "schema": {
              "type": "string",
              "format": "email"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteTeamsByTeamIDMembersByEmail",
        "summary": "Remove team member",
        "description": "Remove team member",
        "tags": [
          "Users & Teams"
        ],
        "parameters": [
          {
            "name": "teamID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the team.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "email",
            "in": "path",
            "required": true,
            "description": "The email.",
            "schema": {
              "type": "string",
              "format": "email"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/teams/{teamID}/resources": {
      "get": {
        "operationId": "getTeamsByTeamIDResources",
        "summary": "List team resources",
        "description": "List team resources",
        "tags": [
          "Users & Teams"
        ],
        "parameters": [
          {
            "name": "teamID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the team.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "postTeamsByTeamIDResources",
        "summary": "Assign resource to team",
        "description": "Assign resource to team",
        "tags": [
          "Users & Teams"
        ],
        "parameters": [
          {
            "name": "teamID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the team.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteTeamsByTeamIDResources",
        "summary": "Unassign a resource. Body: {resourceUid}",
        "description": "Unassign a resource. Body: {resourceUid}",
        "tags": [
          "Users & Teams"
        ],
        "parameters": [
          {
            "name": "teamID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the team.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/roles": {
      "get": {
        "operationId": "getRoles",
        "summary": "List roles",
        "description": "List roles",
        "tags": [
          "Roles & Permissions"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "postRoles",
        "summary": "Create role",
        "description": "Create role",
        "tags": [
          "Roles & Permissions"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/roles/{roleID}": {
      "get": {
        "operationId": "getRolesByRoleID",
        "summary": "Get role",
        "description": "Get role",
        "tags": [
          "Roles & Permissions"
        ],
        "parameters": [
          {
            "name": "roleID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the role.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "put": {
        "operationId": "putRolesByRoleID",
        "summary": "Update role",
        "description": "Update role",
        "tags": [
          "Roles & Permissions"
        ],
        "parameters": [
          {
            "name": "roleID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the role.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteRolesByRoleID",
        "summary": "Delete role",
        "description": "Delete role",
        "tags": [
          "Roles & Permissions"
        ],
        "parameters": [
          {
            "name": "roleID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the role.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/roles/policies": {
      "get": {
        "operationId": "getRolesPolicies",
        "summary": "List policies",
        "description": "List policies",
        "tags": [
          "Roles & Permissions"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/assignments": {
      "get": {
        "operationId": "getAssignments",
        "summary": "List role assignments",
        "description": "List role assignments",
        "tags": [
          "Roles & Permissions"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "postAssignments",
        "summary": "Create assignment",
        "description": "Create assignment",
        "tags": [
          "Roles & Permissions"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/assignments/{assignmentID}": {
      "put": {
        "operationId": "putAssignmentsByAssignmentID",
        "summary": "Update assignment",
        "description": "Update assignment",
        "tags": [
          "Roles & Permissions"
        ],
        "parameters": [
          {
            "name": "assignmentID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the assignment.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteAssignmentsByAssignmentID",
        "summary": "Delete assignment",
        "description": "Delete assignment",
        "tags": [
          "Roles & Permissions"
        ],
        "parameters": [
          {
            "name": "assignmentID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the assignment.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/permissions": {
      "get": {
        "operationId": "getPermissions",
        "summary": "Get current user permissions",
        "description": "Get current user permissions",
        "tags": [
          "Roles & Permissions"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/users/{email}/permissions": {
      "get": {
        "operationId": "getUsersByEmailPermissions",
        "summary": "Get user permissions",
        "description": "Get user permissions",
        "tags": [
          "Roles & Permissions"
        ],
        "parameters": [
          {
            "name": "email",
            "in": "path",
            "required": true,
            "description": "The email.",
            "schema": {
              "type": "string",
              "format": "email"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/users/{email}/permissions/verify": {
      "get": {
        "operationId": "getUsersByEmailPermissionsVerify",
        "summary": "Verify permission",
        "description": "Verify permission",
        "tags": [
          "Roles & Permissions"
        ],
        "parameters": [
          {
            "name": "email",
            "in": "path",
            "required": true,
            "description": "The email.",
            "schema": {
              "type": "string",
              "format": "email"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/organisation": {
      "get": {
        "operationId": "getOrganisation",
        "summary": "Get current organization",
        "description": "Get current organization",
        "tags": [
          "Organizations"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "put": {
        "operationId": "putOrganisation",
        "summary": "Update organization",
        "description": "Update organization",
        "tags": [
          "Organizations"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteOrganisation",
        "summary": "Delete organization",
        "description": "Delete organization",
        "tags": [
          "Organizations"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/audit-logs": {
      "get": {
        "operationId": "getAuditLogs",
        "summary": "List audit logs",
        "description": "List audit logs",
        "tags": [
          "Audit Logs"
        ],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "1-based page number.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 1
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Items per page (maximum 200).",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 50,
              "maximum": 200
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response. `data` carries the page plus its counts.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/audit-logs/export": {
      "post": {
        "operationId": "postAuditLogsExport",
        "summary": "Export audit logs as CSV",
        "description": "Export audit logs as CSV",
        "tags": [
          "Audit Logs"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/spaces": {
      "get": {
        "operationId": "getSpaces",
        "summary": "List deployment spaces",
        "description": "List deployment spaces",
        "tags": [
          "Deployment Spaces"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "postSpaces",
        "summary": "Register an existing cluster as a space",
        "description": "Register an existing cluster as a space",
        "tags": [
          "Deployment Spaces"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/spaces/{spaceID}": {
      "get": {
        "operationId": "getSpacesBySpaceID",
        "summary": "Get a space",
        "description": "Get a space",
        "tags": [
          "Deployment Spaces"
        ],
        "parameters": [
          {
            "name": "spaceID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the space.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "patch": {
        "operationId": "patchSpacesBySpaceID",
        "summary": "Update the space config, e.g. { config: { observability: { metrics: '<integrationID>' | null, logs: '<integrationID>' | null } } } to attach or detach a metrics or logs backend",
        "description": "Update the space config, e.g. { config: { observability: { metrics: '<integrationID>' | null, logs: '<integrationID>' | null } } } to attach or detach a metrics or logs backend",
        "tags": [
          "Deployment Spaces"
        ],
        "parameters": [
          {
            "name": "spaceID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the space.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteSpacesBySpaceID",
        "summary": "Delete a space",
        "description": "Delete a space",
        "tags": [
          "Deployment Spaces"
        ],
        "parameters": [
          {
            "name": "spaceID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the space.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/spaces/{spaceID}/status": {
      "patch": {
        "operationId": "patchSpacesBySpaceIDStatus",
        "summary": "Toggle a space active/inactive",
        "description": "Toggle a space active/inactive",
        "tags": [
          "Deployment Spaces"
        ],
        "parameters": [
          {
            "name": "spaceID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the space.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/components": {
      "post": {
        "operationId": "postComponents",
        "summary": "Install or re-apply a cluster or VM component, e.g. { spaceId, targetType: 'vm', component: 'observability-agent' }. Returns an actionId to poll",
        "description": "Install or re-apply a cluster or VM component, e.g. { spaceId, targetType: 'vm', component: 'observability-agent' }. Returns an actionId to poll",
        "tags": [
          "Deployment Spaces"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "get": {
        "operationId": "getComponents",
        "summary": "List the component catalog (?targetType=) or poll an install (?actionId=)",
        "description": "List the component catalog (?targetType=) or poll an install (?actionId=)",
        "tags": [
          "Deployment Spaces"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/space-discovery/{spaceID}/namespaces": {
      "get": {
        "operationId": "getSpaceDiscoveryBySpaceIDNamespaces",
        "summary": "List namespaces on a space’s cluster",
        "description": "List namespaces on a space’s cluster",
        "tags": [
          "Deployment Spaces"
        ],
        "parameters": [
          {
            "name": "spaceID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the space.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "postSpaceDiscoveryBySpaceIDNamespaces",
        "summary": "Create a namespace on a space’s cluster",
        "description": "Create a namespace on a space’s cluster",
        "tags": [
          "Deployment Spaces"
        ],
        "parameters": [
          {
            "name": "spaceID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the space.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/provisioning-jobs": {
      "post": {
        "operationId": "postProvisioningJobs",
        "summary": "Create a provisioning job",
        "description": "Create a provisioning job",
        "tags": [
          "Provisioning"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "202": {
            "description": "Accepted. Creates a provisioning job; poll `GET /provisioning-jobs/{jobID}` for status.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "get": {
        "operationId": "getProvisioningJobs",
        "summary": "List provisioning jobs",
        "description": "List provisioning jobs",
        "tags": [
          "Provisioning"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/provisioning-jobs/{jobID}": {
      "get": {
        "operationId": "getProvisioningJobsByJobID",
        "summary": "Get a job",
        "description": "Get a job",
        "tags": [
          "Provisioning"
        ],
        "parameters": [
          {
            "name": "jobID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the job.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "patch": {
        "operationId": "patchProvisioningJobsByJobID",
        "summary": "Update lightweight job fields",
        "description": "Update lightweight job fields",
        "tags": [
          "Provisioning"
        ],
        "parameters": [
          {
            "name": "jobID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the job.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteProvisioningJobsByJobID",
        "summary": "Delete a job",
        "description": "Delete a job",
        "tags": [
          "Provisioning"
        ],
        "parameters": [
          {
            "name": "jobID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the job.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/provisioning-jobs/{jobID}/retry": {
      "post": {
        "operationId": "postProvisioningJobsByJobIDRetry",
        "summary": "Retry a failed job",
        "description": "Retry a failed job",
        "tags": [
          "Provisioning"
        ],
        "parameters": [
          {
            "name": "jobID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the job.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/provisioning-jobs/{jobID}/databases": {
      "post": {
        "operationId": "postProvisioningJobsByJobIDDatabases",
        "summary": "Create a database on the parent datastore",
        "description": "Create a database on the parent datastore",
        "tags": [
          "Provisioning"
        ],
        "parameters": [
          {
            "name": "jobID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the job.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "get": {
        "operationId": "getProvisioningJobsByJobIDDatabases",
        "summary": "List databases",
        "description": "List databases",
        "tags": [
          "Provisioning"
        ],
        "parameters": [
          {
            "name": "jobID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the job.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/provisioning-jobs/{jobID}/databases/{dbID}": {
      "get": {
        "operationId": "getProvisioningJobsByJobIDDatabasesByDbID",
        "summary": "Get a database",
        "description": "Get a database",
        "tags": [
          "Provisioning"
        ],
        "parameters": [
          {
            "name": "jobID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the job.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dbID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the db.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteProvisioningJobsByJobIDDatabasesByDbID",
        "summary": "Delete a database",
        "description": "Delete a database",
        "tags": [
          "Provisioning"
        ],
        "parameters": [
          {
            "name": "jobID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the job.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dbID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the db.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/provisioning-jobs/{jobID}/connections": {
      "post": {
        "operationId": "postProvisioningJobsByJobIDConnections",
        "summary": "Create a job-scoped connection",
        "description": "Create a job-scoped connection",
        "tags": [
          "Provisioning"
        ],
        "parameters": [
          {
            "name": "jobID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the job.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "get": {
        "operationId": "getProvisioningJobsByJobIDConnections",
        "summary": "List job-scoped connections",
        "description": "List job-scoped connections",
        "tags": [
          "Provisioning"
        ],
        "parameters": [
          {
            "name": "jobID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the job.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/provisioning-jobs/{jobID}/connections/{connID}": {
      "get": {
        "operationId": "getProvisioningJobsByJobIDConnectionsByConnID",
        "summary": "Get a job-scoped connection",
        "description": "Get a job-scoped connection",
        "tags": [
          "Provisioning"
        ],
        "parameters": [
          {
            "name": "jobID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the job.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "connID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the conn.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteProvisioningJobsByJobIDConnectionsByConnID",
        "summary": "Delete a job-scoped connection",
        "description": "Delete a job-scoped connection",
        "tags": [
          "Provisioning"
        ],
        "parameters": [
          {
            "name": "jobID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the job.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "connID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the conn.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/provisioning-jobs/{jobID}/databases/{dbID}/connections": {
      "post": {
        "operationId": "postProvisioningJobsByJobIDDatabasesByDbIDConnections",
        "summary": "Create a database-scoped connection",
        "description": "Create a database-scoped connection",
        "tags": [
          "Provisioning"
        ],
        "parameters": [
          {
            "name": "jobID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the job.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dbID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the db.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "get": {
        "operationId": "getProvisioningJobsByJobIDDatabasesByDbIDConnections",
        "summary": "List database-scoped connections",
        "description": "List database-scoped connections",
        "tags": [
          "Provisioning"
        ],
        "parameters": [
          {
            "name": "jobID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the job.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dbID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the db.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/provisioning-jobs/{jobID}/databases/{dbID}/connections/{connID}": {
      "get": {
        "operationId": "getProvisioningJobsByJobIDDatabasesByDbIDConnectionsByConnID",
        "summary": "Get a database-scoped connection",
        "description": "Get a database-scoped connection",
        "tags": [
          "Provisioning"
        ],
        "parameters": [
          {
            "name": "jobID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the job.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dbID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the db.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "connID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the conn.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteProvisioningJobsByJobIDDatabasesByDbIDConnectionsByConnID",
        "summary": "Delete a database-scoped connection",
        "description": "Delete a database-scoped connection",
        "tags": [
          "Provisioning"
        ],
        "parameters": [
          {
            "name": "jobID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the job.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dbID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the db.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "connID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the conn.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/recommendations/{recID}/workflow": {
      "get": {
        "operationId": "getRecommendationsByRecIDWorkflow",
        "summary": "Preview the remediation workflow for a recommendation",
        "description": "Preview the remediation workflow for a recommendation",
        "tags": [
          "Remediation Workflows"
        ],
        "parameters": [
          {
            "name": "recID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the rec.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "postRecommendationsByRecIDWorkflow",
        "summary": "Start the remediation workflow for a recommendation",
        "description": "Start the remediation workflow for a recommendation",
        "tags": [
          "Remediation Workflows"
        ],
        "parameters": [
          {
            "name": "recID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the rec.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/workflows/pending-approval": {
      "get": {
        "operationId": "getWorkflowsPendingApproval",
        "summary": "List workflow steps waiting for approval",
        "description": "List workflow steps waiting for approval",
        "tags": [
          "Remediation Workflows"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/workflows/pending-confirmation": {
      "get": {
        "operationId": "getWorkflowsPendingConfirmation",
        "summary": "List workflow steps waiting for confirmation",
        "description": "List workflow steps waiting for confirmation",
        "tags": [
          "Remediation Workflows"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/workflows/{jobID}": {
      "get": {
        "operationId": "getWorkflowsByJobID",
        "summary": "Get a workflow and its steps",
        "description": "Get a workflow and its steps",
        "tags": [
          "Remediation Workflows"
        ],
        "parameters": [
          {
            "name": "jobID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the job.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/workflows/{jobID}/cancel": {
      "post": {
        "operationId": "postWorkflowsByJobIDCancel",
        "summary": "Cancel a running workflow",
        "description": "Cancel a running workflow",
        "tags": [
          "Remediation Workflows"
        ],
        "parameters": [
          {
            "name": "jobID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the job.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/workflows/{jobID}/steps-by-id/{stepID}": {
      "patch": {
        "operationId": "patchWorkflowsByJobIDStepsByIdByStepID",
        "summary": "Approve, reject or advance a step. Body: {action: approve | reject | advance}",
        "description": "Approve, reject or advance a step. Body: {action: approve | reject | advance}",
        "tags": [
          "Remediation Workflows"
        ],
        "parameters": [
          {
            "name": "jobID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the job.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "stepID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the step.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/deployments": {
      "get": {
        "operationId": "getDeployments",
        "summary": "List deployments",
        "description": "List deployments",
        "tags": [
          "Deployments"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "postDeployments",
        "summary": "Create a deployment",
        "description": "Create a deployment",
        "tags": [
          "Deployments"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/deployments/{id}": {
      "get": {
        "operationId": "getDeploymentsById",
        "summary": "Get a deployment",
        "description": "Get a deployment",
        "tags": [
          "Deployments"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the resource.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteDeploymentsById",
        "summary": "Delete a deployment and tear down what it runs",
        "description": "Delete a deployment and tear down what it runs",
        "tags": [
          "Deployments"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the resource.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/deployments/{id}/configs": {
      "patch": {
        "operationId": "patchDeploymentsByIdConfigs",
        "summary": "Update configs (creates a revision on next deploy)",
        "description": "Update configs (creates a revision on next deploy)",
        "tags": [
          "Deployments"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the resource.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/deployments/{id}/canvas-position": {
      "patch": {
        "operationId": "patchDeploymentsByIdCanvasPosition",
        "summary": "Persist canvas (x, y) coordinate",
        "description": "Persist canvas (x, y) coordinate",
        "tags": [
          "Deployments"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the resource.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/deployments/{id}/analyze": {
      "post": {
        "operationId": "postDeploymentsByIdAnalyze",
        "summary": "Re-run deploy-readiness checks",
        "description": "Re-run deploy-readiness checks",
        "tags": [
          "Deployments"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the resource.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/deployments/{id}/revisions": {
      "post": {
        "operationId": "postDeploymentsByIdRevisions",
        "summary": "Create a revision",
        "description": "Create a revision",
        "tags": [
          "Deployments"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the resource.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "get": {
        "operationId": "getDeploymentsByIdRevisions",
        "summary": "List revisions",
        "description": "List revisions",
        "tags": [
          "Deployments"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the resource.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/deployments/{id}/revisions/{revID}": {
      "get": {
        "operationId": "getDeploymentsByIdRevisionsByRevID",
        "summary": "Get a revision",
        "description": "Get a revision",
        "tags": [
          "Deployments"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the resource.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "revID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the rev.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/deployments/{id}/rollback": {
      "post": {
        "operationId": "postDeploymentsByIdRollback",
        "summary": "Roll back to a prior revision",
        "description": "Roll back to a prior revision",
        "tags": [
          "Deployments"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the resource.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/deployments/{id}/events": {
      "get": {
        "operationId": "getDeploymentsByIdEvents",
        "summary": "Deployment event timeline",
        "description": "Deployment event timeline",
        "tags": [
          "Deployments"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the resource.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/deployments/{id}/loadbalancer": {
      "get": {
        "operationId": "getDeploymentsByIdLoadbalancer",
        "summary": "LoadBalancer status",
        "description": "LoadBalancer status",
        "tags": [
          "Deployments"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the resource.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/environments/{envID}/deployments": {
      "get": {
        "operationId": "getEnvironmentsByEnvIDDeployments",
        "summary": "List deployments in env",
        "description": "List deployments in env",
        "tags": [
          "Deployments"
        ],
        "parameters": [
          {
            "name": "envID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the env.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "postEnvironmentsByEnvIDDeployments",
        "summary": "Create deployment in env",
        "description": "Create deployment in env",
        "tags": [
          "Deployments"
        ],
        "parameters": [
          {
            "name": "envID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the env.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/analyze": {
      "post": {
        "operationId": "postAnalyze",
        "summary": "Analyze a repo for deploy readiness (wizard pre-create)",
        "description": "Analyze a repo for deploy readiness (wizard pre-create)",
        "tags": [
          "Builds"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/repositories": {
      "get": {
        "operationId": "getRepositories",
        "summary": "List connected repositories",
        "description": "List connected repositories",
        "tags": [
          "Builds"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/branches": {
      "get": {
        "operationId": "getBranches",
        "summary": "List branches in a repository. Connected: integrationId + repo. Public: repoUrl (github.com only)",
        "description": "List branches in a repository. Connected: integrationId + repo. Public: repoUrl (github.com only)",
        "tags": [
          "Builds"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/projects": {
      "post": {
        "operationId": "postProjects",
        "summary": "Create a project",
        "description": "Create a project",
        "tags": [
          "Projects & Environments"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "get": {
        "operationId": "getProjects",
        "summary": "List projects",
        "description": "List projects",
        "tags": [
          "Projects & Environments"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/projects/stats": {
      "get": {
        "operationId": "getProjectsStats",
        "summary": "Batch project stats (env count, status buckets)",
        "description": "Batch project stats (env count, status buckets)",
        "tags": [
          "Projects & Environments"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/projects/{projectID}": {
      "get": {
        "operationId": "getProjectsByProjectID",
        "summary": "Get a project",
        "description": "Get a project",
        "tags": [
          "Projects & Environments"
        ],
        "parameters": [
          {
            "name": "projectID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the project.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "patch": {
        "operationId": "patchProjectsByProjectID",
        "summary": "Update a project",
        "description": "Update a project",
        "tags": [
          "Projects & Environments"
        ],
        "parameters": [
          {
            "name": "projectID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the project.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteProjectsByProjectID",
        "summary": "Delete a project",
        "description": "Delete a project",
        "tags": [
          "Projects & Environments"
        ],
        "parameters": [
          {
            "name": "projectID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the project.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/projects/{projectID}/environments": {
      "post": {
        "operationId": "postProjectsByProjectIDEnvironments",
        "summary": "Create environment",
        "description": "Create environment",
        "tags": [
          "Projects & Environments"
        ],
        "parameters": [
          {
            "name": "projectID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the project.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "get": {
        "operationId": "getProjectsByProjectIDEnvironments",
        "summary": "List environments",
        "description": "List environments",
        "tags": [
          "Projects & Environments"
        ],
        "parameters": [
          {
            "name": "projectID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the project.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/projects/{projectID}/environments/{envID}": {
      "get": {
        "operationId": "getProjectsByProjectIDEnvironmentsByEnvID",
        "summary": "Get env (nested)",
        "description": "Get env (nested)",
        "tags": [
          "Projects & Environments"
        ],
        "parameters": [
          {
            "name": "projectID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the project.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "envID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the env.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "patch": {
        "operationId": "patchProjectsByProjectIDEnvironmentsByEnvID",
        "summary": "Update env",
        "description": "Update env",
        "tags": [
          "Projects & Environments"
        ],
        "parameters": [
          {
            "name": "projectID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the project.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "envID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the env.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteProjectsByProjectIDEnvironmentsByEnvID",
        "summary": "Delete env",
        "description": "Delete env",
        "tags": [
          "Projects & Environments"
        ],
        "parameters": [
          {
            "name": "projectID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the project.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "envID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the env.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/environments/{envID}": {
      "get": {
        "operationId": "getEnvironmentsByEnvID",
        "summary": "Get env (flat lookup)",
        "description": "Get env (flat lookup)",
        "tags": [
          "Projects & Environments"
        ],
        "parameters": [
          {
            "name": "envID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the env.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/environments/{envID}/cluster-discovery": {
      "get": {
        "operationId": "getEnvironmentsByEnvIDClusterDiscovery",
        "summary": "Live cluster discovery (ingress + cert-manager)",
        "description": "Live cluster discovery (ingress + cert-manager)",
        "tags": [
          "Projects & Environments"
        ],
        "parameters": [
          {
            "name": "envID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the env.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/integrations": {
      "get": {
        "operationId": "getIntegrations",
        "summary": "List integrations",
        "description": "List integrations",
        "tags": [
          "Integrations"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "postIntegrations",
        "summary": "Create an integration",
        "description": "Create an integration",
        "tags": [
          "Integrations"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/integrations/test": {
      "post": {
        "operationId": "postIntegrationsTest",
        "summary": "Observability backends only: run the write/read connection probe against the given backend without saving it",
        "description": "Observability backends only: run the write/read connection probe against the given backend without saving it",
        "tags": [
          "Integrations"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/integrations/{id}": {
      "get": {
        "operationId": "getIntegrationsById",
        "summary": "Get an integration",
        "description": "Get an integration",
        "tags": [
          "Integrations"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the resource.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "put": {
        "operationId": "putIntegrationsById",
        "summary": "Update an integration",
        "description": "Update an integration",
        "tags": [
          "Integrations"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the resource.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteIntegrationsById",
        "summary": "Delete an integration",
        "description": "Delete an integration",
        "tags": [
          "Integrations"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the resource.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/integrations/github/install": {
      "get": {
        "operationId": "getIntegrationsGithubInstall",
        "summary": "Begin GitHub App install flow. Optional ?role=read|write selects the App to install (write for IaC-CI orgs; defaults to read)",
        "description": "Begin GitHub App install flow. Optional ?role=read|write selects the App to install (write for IaC-CI orgs; defaults to read)",
        "tags": [
          "Integrations"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/integrations/github/callback": {
      "get": {
        "operationId": "getIntegrationsGithubCallback",
        "summary": "GitHub install/OAuth callback",
        "description": "GitHub install/OAuth callback",
        "tags": [
          "Integrations"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/webhooks/github": {
      "post": {
        "operationId": "postWebhooksGithub",
        "summary": "GitHub event delivery (HMAC-signed; duplicate deliveries are ignored)",
        "description": "GitHub event delivery (HMAC-signed; duplicate deliveries are ignored)",
        "tags": [
          "Webhooks"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    },
    "/build-callbacks/{revisionID}": {
      "post": {
        "operationId": "postBuildCallbacksByRevisionID",
        "summary": "Build runner reports image readiness (authenticated by the callback JWT in the body)",
        "description": "Build runner reports image readiness (authenticated by the callback JWT in the body)",
        "tags": [
          "Webhooks"
        ],
        "parameters": [
          {
            "name": "revisionID",
            "in": "path",
            "required": true,
            "description": "Unique identifier of the revision.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was malformed or failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "description": "Missing, expired or invalid bearer token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "The caller is authenticated but lacks permission.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "No such resource, or it is not visible to this caller.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded: more than 100 requests in the current one-minute window for this organization. No `Retry-After` or `X-RateLimit-*` headers are returned — back off exponentially (1s, 2s, 4s). The window is fixed and resets on the clock minute, so a 429 late in a minute clears quickly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "description": "A JWT access token from POST /auth/login, or a Personal Access Token minted self-serve from Developer Settings. Send as `Authorization: Bearer <token>`."
      }
    },
    "schemas": {
      "GenericResponse": {
        "type": "object",
        "additionalProperties": true,
        "description": "Response payload. Per-endpoint response schemas are not yet published — see the linked documentation for the concrete shape of each."
      },
      "PaginatedResponse": {
        "type": "object",
        "description": "A page of results with its counts. Documented for /audit-logs and /state-history (administration/audit-logs.mdx, operations/actions.mdx).",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "items": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": true
                }
              },
              "total": {
                "type": "integer",
                "description": "Total matching items across all pages."
              },
              "page": {
                "type": "integer",
                "description": "The page returned."
              },
              "limit": {
                "type": "integer",
                "description": "Items per page for this response."
              }
            }
          }
        }
      },
      "ListResponse": {
        "type": "object",
        "description": "A page of results with no counts envelope. Documented for /resources (core-concepts/resources.mdx) — page through it until a short page comes back.",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "ApiError": {
        "description": "Error payload. Three shapes are in use: the GoFr service envelope, a bare string at the gateway, and RFC 6749 on the /oauth/* endpoints. Verified against the live API rather than inferred from documentation.",
        "oneOf": [
          {
            "type": "object",
            "title": "Service error (GoFr envelope)",
            "description": "Returned by the platform services — the common case. Example: `{\"error\":{\"message\":\"missing auth header in key 'Authorization'\"}}`.",
            "required": [
              "error"
            ],
            "properties": {
              "error": {
                "type": "object",
                "required": [
                  "message"
                ],
                "properties": {
                  "message": {
                    "type": "string",
                    "description": "Human-readable reason, written by the service that handled the request."
                  }
                }
              }
            }
          },
          {
            "type": "object",
            "title": "Gateway error (bare string)",
            "description": "Returned by the gateway, in front of the services. Observed on 401, 405 and 429 — the shape is decided by which layer answered, not by the status code, so do not switch on status to pick a branch. Example: `{\"error\":\"rate limit exceeded\"}`.",
            "required": [
              "error"
            ],
            "not": {
              "required": [
                "error_description"
              ]
            },
            "properties": {
              "error": {
                "type": "string",
                "description": "Human-readable reason."
              }
            }
          },
          {
            "type": "object",
            "title": "OAuth error (RFC 6749)",
            "description": "Returned by the /oauth/* endpoints only, per RFC 6749 section 5.2. Example: `{\"error\":\"invalid_redirect_uri\",\"error_description\":\"redirect_uris is required (RFC 7591 section 2)\"}`.",
            "required": [
              "error",
              "error_description"
            ],
            "properties": {
              "error": {
                "type": "string",
                "description": "RFC 6749 error code, e.g. `invalid_request`, `invalid_grant`."
              },
              "error_description": {
                "type": "string",
                "description": "Human-readable detail. Present on OAuth errors; absent on the other two shapes."
              }
            }
          }
        ]
      }
    }
  }
}
