{
  "components": {
    "schemas": {
      "AnnouncementImpact": {
        "enum": [
          "NONE",
          "MINOR",
          "MAJOR",
          "CRITICAL"
        ],
        "type": "string"
      },
      "AnnouncementListStatus": {
        "enum": [
          "open",
          "resolved"
        ],
        "type": "string"
      },
      "AnnouncementStatus": {
        "enum": [
          "INVESTIGATING",
          "IDENTIFIED",
          "MONITORING",
          "RESOLVED"
        ],
        "type": "string"
      },
      "AnnouncementTimelineEntryV1": {
        "properties": {
          "body": {
            "example": "A fix is being rolled out.",
            "type": "string"
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "example": 900,
            "readOnly": true,
            "type": "integer"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AnnouncementStatus"
              }
            ],
            "nullable": true
          }
        },
        "required": [
          "id",
          "status",
          "body",
          "createdAt"
        ],
        "type": "object"
      },
      "AnnouncementUpdateV1Response": {
        "properties": {
          "announcementId": {
            "example": 77,
            "type": "integer"
          },
          "body": {
            "example": "A fix is being rolled out.",
            "type": "string"
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "example": 900,
            "readOnly": true,
            "type": "integer"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AnnouncementStatus"
              }
            ],
            "nullable": true
          }
        },
        "required": [
          "id",
          "status",
          "body",
          "createdAt",
          "announcementId"
        ],
        "type": "object"
      },
      "AnnouncementV1Page": {
        "properties": {
          "itemCount": {
            "example": 1,
            "type": "integer"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/AnnouncementV1Response"
            },
            "type": "array"
          },
          "limit": {
            "example": 25,
            "type": "integer"
          },
          "page": {
            "example": 1,
            "type": "integer"
          },
          "pageCount": {
            "example": 1,
            "type": "integer"
          },
          "total": {
            "example": 1,
            "type": "integer"
          }
        },
        "required": [
          "total",
          "page",
          "itemCount",
          "pageCount",
          "limit",
          "items"
        ],
        "type": "object"
      },
      "AnnouncementV1Response": {
        "properties": {
          "componentIds": {
            "example": [
              3,
              4
            ],
            "items": {
              "type": "integer"
            },
            "type": "array"
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "example": 77,
            "readOnly": true,
            "type": "integer"
          },
          "impact": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AnnouncementImpact"
              }
            ],
            "nullable": true
          },
          "publicId": {
            "description": "Stable public identifier (lower-case ULID).",
            "example": "01j9z3k8m4v6x2c5b7n1q0w8e4",
            "readOnly": true,
            "type": "string"
          },
          "resolvedAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AnnouncementStatus"
              }
            ]
          },
          "statusPageId": {
            "example": 5,
            "type": "integer"
          },
          "title": {
            "example": "Degraded API latency",
            "type": "string"
          },
          "updates": {
            "items": {
              "$ref": "#/components/schemas/AnnouncementTimelineEntryV1"
            },
            "type": "array"
          }
        },
        "required": [
          "id",
          "publicId",
          "statusPageId",
          "title",
          "status",
          "impact",
          "resolvedAt",
          "createdAt",
          "componentIds",
          "updates"
        ],
        "type": "object"
      },
      "ApiKeyPermission": {
        "enum": [
          "read_only",
          "read_write"
        ],
        "type": "string"
      },
      "CheckStatus": {
        "enum": [
          "NEW",
          "OK",
          "LATE",
          "DOWN",
          "PAUSED",
          "RESUMED"
        ],
        "type": "string"
      },
      "CheckType": {
        "enum": [
          "HTTP",
          "HEARTBEAT",
          "DNS",
          "TCP",
          "SSL"
        ],
        "type": "string"
      },
      "CheckV1PageResponse": {
        "properties": {
          "itemCount": {
            "example": 1,
            "type": "integer"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/CheckV1Response"
            },
            "type": "array"
          },
          "limit": {
            "example": 25,
            "type": "integer"
          },
          "page": {
            "example": 1,
            "type": "integer"
          },
          "pageCount": {
            "example": 1,
            "type": "integer"
          },
          "total": {
            "example": 1,
            "type": "integer"
          }
        },
        "required": [
          "total",
          "page",
          "itemCount",
          "pageCount",
          "limit",
          "items"
        ],
        "type": "object"
      },
      "CheckV1Response": {
        "properties": {
          "checkType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CheckType"
              }
            ],
            "example": "HTTP"
          },
          "config": {
            "allOf": [
              {
                "$ref": "#/components/schemas/V1HttpCheckConfigResponse"
              }
            ],
            "description": "Probe configuration. null only if the check has no live probe config (an inconsistency, never produced by v1 writes).",
            "nullable": true,
            "type": "object"
          },
          "createdAt": {
            "example": "2026-10-01T00:00:00.000Z",
            "format": "date-time",
            "type": "string"
          },
          "downSeverity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/IncidentSeverity"
              }
            ],
            "example": "P1"
          },
          "graceSeconds": {
            "example": 5,
            "type": "integer"
          },
          "id": {
            "example": 123,
            "type": "integer"
          },
          "intervalSeconds": {
            "example": 300,
            "type": "integer"
          },
          "lateSeverity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/IncidentSeverity"
              }
            ],
            "example": "P3"
          },
          "muteNotifications": {
            "example": false,
            "type": "boolean"
          },
          "name": {
            "example": "Uptime - Public API",
            "type": "string"
          },
          "paused": {
            "description": "status === PAUSED. Change it with /pause and /resume.",
            "example": false,
            "type": "boolean"
          },
          "projectId": {
            "example": 7,
            "type": "integer"
          },
          "slug": {
            "example": "public-api",
            "nullable": true,
            "type": "string"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CheckStatus"
              }
            ],
            "example": "OK",
            "readOnly": true
          },
          "updatedAt": {
            "example": "2026-10-01T00:00:00.000Z",
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "id",
          "slug",
          "name",
          "projectId",
          "checkType",
          "intervalSeconds",
          "graceSeconds",
          "muteNotifications",
          "downSeverity",
          "lateSeverity",
          "paused",
          "status",
          "config",
          "createdAt",
          "updatedAt"
        ],
        "type": "object"
      },
      "CreateAnnouncementUpdateV1Dto": {
        "properties": {
          "message": {
            "example": "A fix is being rolled out.",
            "maxLength": 5000,
            "minLength": 1,
            "type": "string"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AnnouncementStatus"
              }
            ]
          }
        },
        "required": [
          "status",
          "message"
        ],
        "type": "object"
      },
      "CreateAnnouncementV1Dto": {
        "properties": {
          "componentIds": {
            "description": "Status page component ids the announcement affects.",
            "example": [
              3,
              4
            ],
            "items": {
              "type": "integer"
            },
            "type": "array"
          },
          "impact": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AnnouncementImpact"
              }
            ]
          },
          "message": {
            "description": "Initial update body shown on the status page timeline.",
            "maxLength": 5000,
            "type": "string"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AnnouncementStatus"
              }
            ]
          },
          "title": {
            "example": "Degraded API latency",
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "title"
        ],
        "type": "object"
      },
      "CreateCheckV1Dto": {
        "properties": {
          "checkType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CheckType"
              }
            ],
            "default": "HTTP",
            "description": "Probe type. Only HTTP is supported in v1; any other value is 422 CHECK_TYPE_NOT_SUPPORTED.",
            "example": "HTTP"
          },
          "config": {
            "$ref": "#/components/schemas/V1HttpCheckConfigDto"
          },
          "downSeverity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/IncidentSeverity"
              }
            ],
            "default": "P1",
            "description": "Incident severity when the check goes DOWN. Computed default: P1.",
            "example": "P1"
          },
          "graceSeconds": {
            "default": 5,
            "description": "Grace period in seconds. Computed default: 5.",
            "example": 30,
            "maximum": 60,
            "minimum": 5,
            "type": "integer"
          },
          "intervalSeconds": {
            "default": 300,
            "description": "Probe interval in seconds. The plan sets a floor. Computed default: 300.",
            "example": 300,
            "maximum": 3600,
            "minimum": 10,
            "type": "integer"
          },
          "lateSeverity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/IncidentSeverity"
              }
            ],
            "default": "P3",
            "description": "Incident severity when the check goes LATE. Computed default: P3.",
            "example": "P3"
          },
          "muteNotifications": {
            "default": false,
            "description": "Suppress notifications for this check. Setting true is plan-gated. Computed default: false.",
            "example": false,
            "type": "boolean"
          },
          "name": {
            "example": "Uptime - Public API",
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          },
          "projectId": {
            "example": 7,
            "minimum": 1,
            "type": "integer"
          },
          "slug": {
            "description": "Unique per workspace; addresses the check as `slug:<slug>`. Released on delete.",
            "example": "public-api",
            "maxLength": 64,
            "nullable": true,
            "pattern": "^[a-z0-9_-]{1,64}$",
            "type": "string"
          }
        },
        "required": [
          "name",
          "projectId",
          "config"
        ],
        "type": "object"
      },
      "CreateDeploymentV1Dto": {
        "properties": {
          "author": {
            "maxLength": 255,
            "type": "string"
          },
          "autoPause": {
            "description": "Pause associated checks for the window. Defaults to true (see controller).",
            "type": "boolean"
          },
          "checkIds": {
            "description": "Specific check IDs to pause. Omitted → all checks in the project.",
            "example": [
              12,
              13
            ],
            "items": {
              "type": "integer"
            },
            "type": "array"
          },
          "link": {
            "maxLength": 2048,
            "type": "string"
          },
          "name": {
            "maxLength": 255,
            "type": "string"
          },
          "projectId": {
            "example": 7,
            "type": "integer"
          },
          "ttlMinutes": {
            "description": "Server-side auto-end, in minutes from now (1–1440). A fail-safe cleanup for\norphaned windows when the explicit `/end` call never fires.",
            "example": 30,
            "maximum": 1440,
            "minimum": 1,
            "type": "integer"
          },
          "version": {
            "maxLength": 255,
            "type": "string"
          }
        },
        "required": [
          "projectId"
        ],
        "type": "object"
      },
      "CreateIncidentV1Dto": {
        "properties": {
          "checkId": {
            "description": "At most one of checkId / jobId / dependencyId (enforced in the controller).",
            "example": 12,
            "type": "integer"
          },
          "dependencyId": {
            "example": 5,
            "type": "integer"
          },
          "description": {
            "maxLength": 2000,
            "type": "string"
          },
          "jobId": {
            "example": 34,
            "type": "integer"
          },
          "severity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/IncidentSeverity"
              }
            ]
          },
          "title": {
            "example": "Checkout latency spike",
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "title"
        ],
        "type": "object"
      },
      "CreateJobV1Dto": {
        "properties": {
          "downSeverity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/IncidentSeverity"
              }
            ],
            "description": "Severity of DOWN incidents. Default P1.",
            "example": "P1"
          },
          "graceSeconds": {
            "description": "Lateness tolerated before the job goes LATE. Default 300.",
            "example": 600,
            "maximum": 86400,
            "minimum": 5,
            "type": "integer"
          },
          "intervalSeconds": {
            "description": "Expected ping interval in seconds. Default 3600.",
            "example": 86400,
            "maximum": 604800,
            "minimum": 10,
            "type": "integer"
          },
          "lateSeverity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/IncidentSeverity"
              }
            ],
            "description": "Severity of LATE incidents. Default P3.",
            "example": "P3"
          },
          "muteNotifications": {
            "description": "Default false.",
            "example": false,
            "type": "boolean"
          },
          "name": {
            "example": "Nightly Backup Heartbeat",
            "maxLength": 255,
            "type": "string"
          },
          "projectId": {
            "example": 7,
            "type": "integer"
          },
          "slug": {
            "description": "Stable, human-chosen identifier, unique per workspace. Addressable as `slug:<slug>` in `:id`.",
            "example": "nightly-backup",
            "maxLength": 64,
            "nullable": true,
            "pattern": "^[a-z0-9_-]{1,64}$",
            "type": "string"
          }
        },
        "required": [
          "name",
          "projectId"
        ],
        "type": "object"
      },
      "CreateMaintenanceWindowV1Dto": {
        "properties": {
          "description": {
            "maxLength": 2000,
            "type": "string"
          },
          "endAt": {
            "description": "The natural TTL — the 60s processor auto-completes the window past endAt.",
            "format": "date-time",
            "type": "string"
          },
          "name": {
            "example": "Database upgrade",
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          },
          "projectIds": {
            "description": "Projects the window applies to. Omitted → all projects in the workspace.",
            "example": [
              7
            ],
            "items": {
              "type": "integer"
            },
            "type": "array"
          },
          "startAt": {
            "description": "Window start. Defaults to now (see controller).",
            "format": "date-time",
            "type": "string"
          },
          "suppressAlerts": {
            "description": "Suppress alerts during the window. Defaults to true.",
            "type": "boolean"
          },
          "suppressIncidents": {
            "description": "Suppress incidents during the window. Defaults to true.",
            "type": "boolean"
          }
        },
        "required": [
          "name",
          "endAt"
        ],
        "type": "object"
      },
      "CreateProjectV1Dto": {
        "properties": {
          "description": {
            "description": "Free-text description. Stored as null when omitted.",
            "example": "Card payment rails",
            "maxLength": 255,
            "nullable": true,
            "type": "string"
          },
          "name": {
            "example": "Payments",
            "maxLength": 255,
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "DeploymentStatus": {
        "enum": [
          "SCHEDULED",
          "ACTIVE",
          "ENDED"
        ],
        "type": "string"
      },
      "DeploymentV1Page": {
        "properties": {
          "itemCount": {
            "example": 1,
            "type": "integer"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/DeploymentV1Response"
            },
            "type": "array"
          },
          "limit": {
            "example": 25,
            "type": "integer"
          },
          "page": {
            "example": 1,
            "type": "integer"
          },
          "pageCount": {
            "example": 1,
            "type": "integer"
          },
          "total": {
            "example": 1,
            "type": "integer"
          }
        },
        "required": [
          "total",
          "page",
          "itemCount",
          "pageCount",
          "limit",
          "items"
        ],
        "type": "object"
      },
      "DeploymentV1Response": {
        "properties": {
          "author": {
            "example": "ci-bot",
            "nullable": true,
            "type": "string"
          },
          "autoPause": {
            "example": true,
            "type": "boolean"
          },
          "checkIds": {
            "description": "Checks scoped to the window. Null means every check in the project.",
            "example": null,
            "items": {
              "type": "integer"
            },
            "nullable": true,
            "type": "array"
          },
          "endedAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "id": {
            "example": 101,
            "readOnly": true,
            "type": "integer"
          },
          "link": {
            "example": null,
            "nullable": true,
            "type": "string"
          },
          "name": {
            "example": "Release 2026.10.11",
            "nullable": true,
            "type": "string"
          },
          "projectId": {
            "example": 7,
            "type": "integer"
          },
          "scheduledEndAt": {
            "description": "Server-side auto-end time (set by `ttlMinutes`).",
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "startedAt": {
            "format": "date-time",
            "type": "string"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DeploymentStatus"
              }
            ]
          },
          "version": {
            "example": "1.42.0",
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "id",
          "projectId",
          "name",
          "version",
          "author",
          "link",
          "status",
          "autoPause",
          "checkIds",
          "startedAt",
          "endedAt",
          "scheduledEndAt"
        ],
        "type": "object"
      },
      "IncidentReason": {
        "enum": [
          "SERVICE_DOWN",
          "SERVICE_DEGRADED",
          "DEPENDENCY_DOWN",
          "MANUAL"
        ],
        "type": "string"
      },
      "IncidentSeverity": {
        "enum": [
          "P1",
          "P2",
          "P3",
          "P4"
        ],
        "type": "string"
      },
      "IncidentState": {
        "enum": [
          "ACTIVE",
          "MONITORING",
          "RESOLVED"
        ],
        "type": "string"
      },
      "IncidentV1AcknowledgedUser": {
        "properties": {
          "email": {
            "example": "oncall@example.com",
            "type": "string"
          },
          "id": {
            "example": 3,
            "type": "integer"
          }
        },
        "required": [
          "id",
          "email"
        ],
        "type": "object"
      },
      "IncidentV1CheckRef": {
        "properties": {
          "id": {
            "example": 12,
            "type": "integer"
          },
          "name": {
            "example": "Checkout API",
            "type": "string"
          }
        },
        "required": [
          "id",
          "name"
        ],
        "type": "object"
      },
      "IncidentV1DetailResponse": {
        "properties": {
          "acknowledgedAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "acknowledgedBy": {
            "description": "User id of the acknowledger.",
            "nullable": true,
            "type": "integer"
          },
          "acknowledgedByUser": {
            "allOf": [
              {
                "$ref": "#/components/schemas/IncidentV1AcknowledgedUser"
              }
            ],
            "nullable": true,
            "type": "object"
          },
          "check": {
            "allOf": [
              {
                "$ref": "#/components/schemas/IncidentV1CheckRef"
              }
            ],
            "nullable": true,
            "type": "object"
          },
          "checkId": {
            "example": 12,
            "nullable": true,
            "type": "integer"
          },
          "dependencyId": {
            "example": null,
            "nullable": true,
            "type": "integer"
          },
          "dependencyName": {
            "example": null,
            "nullable": true,
            "type": "string"
          },
          "id": {
            "example": 501,
            "readOnly": true,
            "type": "integer"
          },
          "monitorId": {
            "example": 12,
            "nullable": true,
            "type": "integer"
          },
          "monitorType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/MonitorType"
              }
            ],
            "nullable": true
          },
          "publicId": {
            "description": "Stable public identifier (lower-case ULID).",
            "example": "01j9z3k8m4v6x2c5b7n1q0w8e4",
            "readOnly": true,
            "type": "string"
          },
          "reason": {
            "allOf": [
              {
                "$ref": "#/components/schemas/IncidentReason"
              }
            ]
          },
          "recoveredAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "resolvedAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "severity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/IncidentSeverity"
              }
            ]
          },
          "startedAt": {
            "format": "date-time",
            "type": "string"
          },
          "state": {
            "allOf": [
              {
                "$ref": "#/components/schemas/IncidentState"
              }
            ]
          },
          "summary": {
            "description": "Sanitized HTML summary.",
            "nullable": true,
            "type": "string"
          },
          "title": {
            "example": "Checkout latency spike",
            "type": "string"
          }
        },
        "required": [
          "id",
          "publicId",
          "title",
          "state",
          "reason",
          "severity",
          "checkId",
          "monitorType",
          "monitorId",
          "dependencyId",
          "dependencyName",
          "startedAt",
          "acknowledgedAt",
          "acknowledgedBy",
          "resolvedAt",
          "summary",
          "recoveredAt",
          "acknowledgedByUser",
          "check"
        ],
        "type": "object"
      },
      "IncidentV1Page": {
        "properties": {
          "itemCount": {
            "example": 1,
            "type": "integer"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/IncidentV1Response"
            },
            "type": "array"
          },
          "limit": {
            "example": 25,
            "type": "integer"
          },
          "page": {
            "example": 1,
            "type": "integer"
          },
          "pageCount": {
            "example": 1,
            "type": "integer"
          },
          "total": {
            "example": 1,
            "type": "integer"
          }
        },
        "required": [
          "total",
          "page",
          "itemCount",
          "pageCount",
          "limit",
          "items"
        ],
        "type": "object"
      },
      "IncidentV1Response": {
        "properties": {
          "acknowledgedAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "acknowledgedBy": {
            "description": "User id of the acknowledger.",
            "nullable": true,
            "type": "integer"
          },
          "checkId": {
            "example": 12,
            "nullable": true,
            "type": "integer"
          },
          "dependencyId": {
            "example": null,
            "nullable": true,
            "type": "integer"
          },
          "dependencyName": {
            "example": null,
            "nullable": true,
            "type": "string"
          },
          "id": {
            "example": 501,
            "readOnly": true,
            "type": "integer"
          },
          "monitorId": {
            "example": 12,
            "nullable": true,
            "type": "integer"
          },
          "monitorType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/MonitorType"
              }
            ],
            "nullable": true
          },
          "publicId": {
            "description": "Stable public identifier (lower-case ULID).",
            "example": "01j9z3k8m4v6x2c5b7n1q0w8e4",
            "readOnly": true,
            "type": "string"
          },
          "reason": {
            "allOf": [
              {
                "$ref": "#/components/schemas/IncidentReason"
              }
            ]
          },
          "resolvedAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "severity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/IncidentSeverity"
              }
            ]
          },
          "startedAt": {
            "format": "date-time",
            "type": "string"
          },
          "state": {
            "allOf": [
              {
                "$ref": "#/components/schemas/IncidentState"
              }
            ]
          },
          "title": {
            "example": "Checkout latency spike",
            "type": "string"
          }
        },
        "required": [
          "id",
          "publicId",
          "title",
          "state",
          "reason",
          "severity",
          "checkId",
          "monitorType",
          "monitorId",
          "dependencyId",
          "dependencyName",
          "startedAt",
          "acknowledgedAt",
          "acknowledgedBy",
          "resolvedAt"
        ],
        "type": "object"
      },
      "IpFamily": {
        "enum": [
          "AUTO",
          "IPV4",
          "IPV6"
        ],
        "type": "string"
      },
      "JobV1Page": {
        "properties": {
          "itemCount": {
            "example": 1,
            "type": "integer"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/JobV1Response"
            },
            "type": "array"
          },
          "limit": {
            "example": 25,
            "type": "integer"
          },
          "page": {
            "example": 1,
            "type": "integer"
          },
          "pageCount": {
            "example": 1,
            "type": "integer"
          },
          "total": {
            "example": 1,
            "type": "integer"
          }
        },
        "required": [
          "total",
          "page",
          "itemCount",
          "pageCount",
          "limit",
          "items"
        ],
        "type": "object"
      },
      "JobV1Response": {
        "properties": {
          "createdAt": {
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "downSeverity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/IncidentSeverity"
              }
            ],
            "example": "P1"
          },
          "graceSeconds": {
            "example": 600,
            "type": "integer"
          },
          "id": {
            "example": 456,
            "readOnly": true,
            "type": "integer"
          },
          "intervalSeconds": {
            "description": "Null only for legacy jobs created from an unparseable schedule.",
            "example": 86400,
            "nullable": true,
            "type": "integer"
          },
          "lateSeverity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/IncidentSeverity"
              }
            ],
            "example": "P3"
          },
          "muteNotifications": {
            "example": false,
            "type": "boolean"
          },
          "name": {
            "example": "Nightly Backup Heartbeat",
            "type": "string"
          },
          "paused": {
            "description": "True when status is PAUSED. Change it with pause / resume.",
            "example": false,
            "readOnly": true,
            "type": "boolean"
          },
          "pingToken": {
            "description": "Heartbeat credential. Null unless the key is READ_WRITE, projects to MEMBER or higher, and covers mcp:jobs or mcp:signals (OAuth: jobs:write).",
            "nullable": true,
            "readOnly": true,
            "type": "string"
          },
          "pingUrl": {
            "description": "Null whenever pingToken is null.",
            "example": "https://signal.ionhour.com/api/signals/ping/<token>",
            "nullable": true,
            "readOnly": true,
            "type": "string"
          },
          "projectId": {
            "example": 7,
            "nullable": true,
            "type": "integer"
          },
          "slug": {
            "example": "nightly-backup",
            "nullable": true,
            "pattern": "^[a-z0-9_-]{1,64}$",
            "type": "string"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CheckStatus"
              }
            ],
            "example": "OK",
            "readOnly": true
          },
          "updatedAt": {
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          }
        },
        "required": [
          "id",
          "slug",
          "name",
          "projectId",
          "intervalSeconds",
          "graceSeconds",
          "muteNotifications",
          "downSeverity",
          "lateSeverity",
          "paused",
          "status",
          "pingToken",
          "pingUrl",
          "createdAt",
          "updatedAt"
        ],
        "type": "object"
      },
      "MaintenanceWindowState": {
        "enum": [
          "SCHEDULED",
          "ACTIVE",
          "COMPLETED",
          "CANCELLED"
        ],
        "type": "string"
      },
      "MaintenanceWindowV1Page": {
        "properties": {
          "itemCount": {
            "example": 1,
            "type": "integer"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/MaintenanceWindowV1Response"
            },
            "type": "array"
          },
          "limit": {
            "example": 25,
            "type": "integer"
          },
          "page": {
            "example": 1,
            "type": "integer"
          },
          "pageCount": {
            "example": 1,
            "type": "integer"
          },
          "total": {
            "example": 1,
            "type": "integer"
          }
        },
        "required": [
          "total",
          "page",
          "itemCount",
          "pageCount",
          "limit",
          "items"
        ],
        "type": "object"
      },
      "MaintenanceWindowV1Response": {
        "properties": {
          "description": {
            "example": null,
            "nullable": true,
            "type": "string"
          },
          "endAt": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "example": 88,
            "readOnly": true,
            "type": "integer"
          },
          "name": {
            "example": "Database upgrade",
            "type": "string"
          },
          "projectIds": {
            "description": "Projects the window applies to. Empty means every project.",
            "example": [
              7
            ],
            "items": {
              "type": "integer"
            },
            "type": "array"
          },
          "startAt": {
            "format": "date-time",
            "type": "string"
          },
          "state": {
            "allOf": [
              {
                "$ref": "#/components/schemas/MaintenanceWindowState"
              }
            ]
          },
          "suppressAlerts": {
            "example": true,
            "type": "boolean"
          },
          "suppressIncidents": {
            "example": true,
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "name",
          "description",
          "state",
          "startAt",
          "endAt",
          "suppressAlerts",
          "suppressIncidents",
          "projectIds"
        ],
        "type": "object"
      },
      "MonitorType": {
        "enum": [
          "JOB",
          "CHECK"
        ],
        "type": "string"
      },
      "OutboundHttpMethod": {
        "enum": [
          "GET",
          "HEAD",
          "POST",
          "PUT",
          "PATCH"
        ],
        "type": "string"
      },
      "PrincipalKind": {
        "enum": [
          "personal",
          "service",
          "oauth"
        ],
        "type": "string"
      },
      "ProjectV1Page": {
        "properties": {
          "itemCount": {
            "example": 1,
            "type": "integer"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/ProjectV1Response"
            },
            "type": "array"
          },
          "limit": {
            "example": 25,
            "type": "integer"
          },
          "page": {
            "example": 1,
            "type": "integer"
          },
          "pageCount": {
            "example": 1,
            "type": "integer"
          },
          "total": {
            "example": 1,
            "type": "integer"
          }
        },
        "required": [
          "total",
          "page",
          "itemCount",
          "pageCount",
          "limit",
          "items"
        ],
        "type": "object"
      },
      "ProjectV1Response": {
        "properties": {
          "createdAt": {
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "description": {
            "example": null,
            "nullable": true,
            "type": "string"
          },
          "id": {
            "example": 7,
            "readOnly": true,
            "type": "integer"
          },
          "name": {
            "example": "Payments",
            "type": "string"
          },
          "updatedAt": {
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "description",
          "createdAt",
          "updatedAt"
        ],
        "type": "object"
      },
      "RegionV1Response": {
        "properties": {
          "displayName": {
            "example": "US East (Virginia)",
            "type": "string"
          },
          "enabled": {
            "example": true,
            "type": "boolean"
          },
          "flag": {
            "example": "🇺🇸",
            "type": "string"
          },
          "id": {
            "example": "us-east-1",
            "type": "string"
          }
        },
        "required": [
          "id",
          "displayName",
          "flag",
          "enabled"
        ],
        "type": "object"
      },
      "ResolveIncidentV1Dto": {
        "properties": {
          "resolutionNote": {
            "maxLength": 2000,
            "type": "string"
          }
        },
        "type": "object"
      },
      "StatusPageV1Page": {
        "properties": {
          "itemCount": {
            "example": 1,
            "type": "integer"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/StatusPageV1Response"
            },
            "type": "array"
          },
          "limit": {
            "example": 25,
            "type": "integer"
          },
          "page": {
            "example": 1,
            "type": "integer"
          },
          "pageCount": {
            "example": 1,
            "type": "integer"
          },
          "total": {
            "example": 1,
            "type": "integer"
          }
        },
        "required": [
          "total",
          "page",
          "itemCount",
          "pageCount",
          "limit",
          "items"
        ],
        "type": "object"
      },
      "StatusPageV1Response": {
        "properties": {
          "id": {
            "example": 5,
            "readOnly": true,
            "type": "integer"
          },
          "name": {
            "example": "Acme Status",
            "type": "string"
          },
          "slug": {
            "example": "acme-status",
            "type": "string"
          },
          "visibility": {
            "allOf": [
              {
                "$ref": "#/components/schemas/StatusPageVisibility"
              }
            ]
          }
        },
        "required": [
          "id",
          "slug",
          "name",
          "visibility"
        ],
        "type": "object"
      },
      "StatusPageVisibility": {
        "enum": [
          "PUBLIC",
          "PASSWORD_PROTECTED",
          "PRIVATE"
        ],
        "type": "string"
      },
      "UpdateAnnouncementV1Dto": {
        "properties": {
          "componentIds": {
            "description": "Status page component ids the announcement affects.",
            "example": [
              3,
              4
            ],
            "items": {
              "type": "integer"
            },
            "type": "array"
          },
          "impact": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AnnouncementImpact"
              }
            ]
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AnnouncementStatus"
              }
            ]
          },
          "title": {
            "maxLength": 255,
            "type": "string"
          }
        },
        "type": "object"
      },
      "UpdateCheckV1Dto": {
        "properties": {
          "checkType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CheckType"
              }
            ],
            "description": "Accepted only as HTTP (the type cannot change through v1).",
            "example": "HTTP"
          },
          "config": {
            "$ref": "#/components/schemas/V1HttpCheckConfigPatchDto"
          },
          "downSeverity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/IncidentSeverity"
              }
            ],
            "example": "P1"
          },
          "graceSeconds": {
            "example": 30,
            "maximum": 60,
            "minimum": 5,
            "type": "integer"
          },
          "intervalSeconds": {
            "example": 300,
            "maximum": 3600,
            "minimum": 10,
            "type": "integer"
          },
          "lateSeverity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/IncidentSeverity"
              }
            ],
            "example": "P3"
          },
          "muteNotifications": {
            "example": false,
            "type": "boolean"
          },
          "name": {
            "example": "Uptime - Public API",
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          },
          "projectId": {
            "description": "Move the check to another project in the same workspace.",
            "example": 7,
            "minimum": 1,
            "type": "integer"
          },
          "slug": {
            "description": "New slug, or null to clear it.",
            "example": "public-api",
            "maxLength": 64,
            "nullable": true,
            "pattern": "^[a-z0-9_-]{1,64}$",
            "type": "string"
          }
        },
        "type": "object"
      },
      "UpdateJobV1Dto": {
        "properties": {
          "downSeverity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/IncidentSeverity"
              }
            ],
            "example": "P1"
          },
          "graceSeconds": {
            "example": 600,
            "maximum": 86400,
            "minimum": 5,
            "type": "integer"
          },
          "intervalSeconds": {
            "example": 86400,
            "maximum": 604800,
            "minimum": 10,
            "type": "integer"
          },
          "lateSeverity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/IncidentSeverity"
              }
            ],
            "example": "P3"
          },
          "muteNotifications": {
            "example": false,
            "type": "boolean"
          },
          "name": {
            "example": "Nightly Backup Heartbeat",
            "maxLength": 255,
            "type": "string"
          },
          "projectId": {
            "example": 7,
            "type": "integer"
          },
          "slug": {
            "description": "Send null to clear.",
            "example": "nightly-backup",
            "maxLength": 64,
            "nullable": true,
            "pattern": "^[a-z0-9_-]{1,64}$",
            "type": "string"
          }
        },
        "type": "object"
      },
      "UpdateProjectV1Dto": {
        "properties": {
          "description": {
            "description": "Send null to clear.",
            "example": "Card payment rails",
            "maxLength": 255,
            "nullable": true,
            "type": "string"
          },
          "name": {
            "example": "Payments",
            "maxLength": 255,
            "type": "string"
          }
        },
        "type": "object"
      },
      "V1ErrorResponse": {
        "properties": {
          "code": {
            "description": "Stable machine-readable error code.",
            "example": "NOT_FOUND",
            "type": "string"
          },
          "detail": {
            "additionalProperties": true,
            "description": "Structured context passed through for some codes. PLAN_LIMIT_EXCEEDED carries `{ limit, resource }` (`limit` is null for a feature gate) and, for API keys, `plan`.",
            "example": {
              "limit": 5,
              "plan": "pro",
              "resource": "checks"
            },
            "nullable": true,
            "type": "object"
          },
          "error": {
            "example": "NOT_FOUND",
            "type": "string"
          },
          "message": {
            "description": "Human-readable message (string, or a list for validation failures).",
            "example": "Job not found.",
            "oneOf": [
              {
                "type": "string"
              },
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              }
            ]
          },
          "statusCode": {
            "example": 404,
            "type": "integer"
          }
        },
        "required": [
          "statusCode",
          "error",
          "code",
          "message"
        ],
        "type": "object"
      },
      "V1HttpCheckConfigDto": {
        "properties": {
          "blockHttpDowngrade": {
            "default": true,
            "description": "Fail an HTTPS to HTTP downgrade redirect. Computed default: true.",
            "example": true,
            "nullable": true,
            "type": "boolean"
          },
          "bodyContains": {
            "description": "Pass only if the body contains this substring (case-insensitive). null clears. Plan-gated.",
            "example": "\"status\":\"ok\"",
            "maxLength": 1000,
            "nullable": true,
            "type": "string"
          },
          "bodyNotContains": {
            "description": "Fail if the body contains this substring (case-insensitive). null clears. Plan-gated.",
            "example": "error",
            "maxLength": 1000,
            "nullable": true,
            "type": "string"
          },
          "customHeaders": {
            "additionalProperties": {
              "type": "string"
            },
            "description": "Custom request headers (at most 10). Keys are LOWERCASED on write and read back lowercased; two keys that differ only in case are rejected. Reserved names (authorization, cookie, host, proxy-*, x-forwarded-*, hop-by-hop) are rejected with 422. null clears. Plan-gated.",
            "example": {
              "x-custom-auth": "token123"
            },
            "nullable": true,
            "type": "object"
          },
          "expectedStatusMax": {
            "default": 399,
            "description": "Highest passing HTTP status, inclusive. Computed default: 399.",
            "example": 399,
            "maximum": 599,
            "minimum": 100,
            "nullable": true,
            "type": "integer"
          },
          "expectedStatusMin": {
            "default": 200,
            "description": "Lowest passing HTTP status, inclusive. Computed default: 200. Must be <= expectedStatusMax.",
            "example": 200,
            "maximum": 599,
            "minimum": 100,
            "nullable": true,
            "type": "integer"
          },
          "failAfterConsecutive": {
            "default": 3,
            "description": "Consecutive failures before an incident opens. Computed default: 3.",
            "example": 3,
            "maximum": 10,
            "minimum": 1,
            "nullable": true,
            "type": "integer"
          },
          "followRedirects": {
            "default": true,
            "description": "Follow redirects. Computed default: true.",
            "example": true,
            "nullable": true,
            "type": "boolean"
          },
          "latencyWarnMs": {
            "description": "Latency alert threshold in ms. null disables. Plan-gated.",
            "example": 1500,
            "minimum": 1,
            "nullable": true,
            "type": "integer"
          },
          "maxRedirects": {
            "default": 3,
            "description": "Maximum redirects to follow. Computed default: 3.",
            "example": 3,
            "maximum": 3,
            "minimum": 0,
            "nullable": true,
            "type": "integer"
          },
          "method": {
            "allOf": [
              {
                "$ref": "#/components/schemas/OutboundHttpMethod"
              }
            ],
            "default": "GET",
            "description": "HTTP method the probe sends. Computed default: GET.",
            "example": "GET",
            "nullable": true
          },
          "regions": {
            "description": "Probe region ids (see GET /v1/regions); each must be served by this environment. Omitted or null stores no list and the check runs from the environment default regions, which GET renders. The count is plan-limited.",
            "example": [
              "us-east-1"
            ],
            "items": {
              "type": "string"
            },
            "maxItems": 6,
            "minItems": 1,
            "nullable": true,
            "type": "array",
            "uniqueItems": true
          },
          "resolveAfterConsecutiveSuccess": {
            "default": 2,
            "description": "Consecutive successes before an incident resolves. Computed default: 2.",
            "example": 2,
            "maximum": 10,
            "minimum": 1,
            "nullable": true,
            "type": "integer"
          },
          "sslExpiryWarnDays": {
            "default": 14,
            "description": "TLS certificate expiry alert threshold in days. Computed default: 14 (null resets to it). Setting a value is plan-gated.",
            "example": 14,
            "maximum": 365,
            "minimum": 1,
            "nullable": true,
            "type": "integer"
          },
          "timeoutMs": {
            "default": 8000,
            "description": "Probe timeout in milliseconds. Computed default: 8000.",
            "example": 8000,
            "maximum": 15000,
            "minimum": 1000,
            "nullable": true,
            "type": "integer"
          },
          "url": {
            "description": "Target URL (http or https). Immutable after create: delete and recreate to change it.",
            "example": "https://api.example.com/health",
            "format": "uri",
            "maxLength": 2048,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "V1HttpCheckConfigPatchDto": {
        "properties": {
          "blockHttpDowngrade": {
            "default": true,
            "description": "Fail an HTTPS to HTTP downgrade redirect. Computed default: true.",
            "example": true,
            "nullable": true,
            "type": "boolean"
          },
          "bodyContains": {
            "description": "Pass only if the body contains this substring (case-insensitive). null clears. Plan-gated.",
            "example": "\"status\":\"ok\"",
            "maxLength": 1000,
            "nullable": true,
            "type": "string"
          },
          "bodyNotContains": {
            "description": "Fail if the body contains this substring (case-insensitive). null clears. Plan-gated.",
            "example": "error",
            "maxLength": 1000,
            "nullable": true,
            "type": "string"
          },
          "customHeaders": {
            "additionalProperties": {
              "type": "string"
            },
            "description": "Custom request headers (at most 10). Keys are LOWERCASED on write and read back lowercased; two keys that differ only in case are rejected. Reserved names (authorization, cookie, host, proxy-*, x-forwarded-*, hop-by-hop) are rejected with 422. null clears. Plan-gated.",
            "example": {
              "x-custom-auth": "token123"
            },
            "nullable": true,
            "type": "object"
          },
          "expectedStatusMax": {
            "default": 399,
            "description": "Highest passing HTTP status, inclusive. Computed default: 399.",
            "example": 399,
            "maximum": 599,
            "minimum": 100,
            "nullable": true,
            "type": "integer"
          },
          "expectedStatusMin": {
            "default": 200,
            "description": "Lowest passing HTTP status, inclusive. Computed default: 200. Must be <= expectedStatusMax.",
            "example": 200,
            "maximum": 599,
            "minimum": 100,
            "nullable": true,
            "type": "integer"
          },
          "failAfterConsecutive": {
            "default": 3,
            "description": "Consecutive failures before an incident opens. Computed default: 3.",
            "example": 3,
            "maximum": 10,
            "minimum": 1,
            "nullable": true,
            "type": "integer"
          },
          "followRedirects": {
            "default": true,
            "description": "Follow redirects. Computed default: true.",
            "example": true,
            "nullable": true,
            "type": "boolean"
          },
          "latencyWarnMs": {
            "description": "Latency alert threshold in ms. null disables. Plan-gated.",
            "example": 1500,
            "minimum": 1,
            "nullable": true,
            "type": "integer"
          },
          "maxRedirects": {
            "default": 3,
            "description": "Maximum redirects to follow. Computed default: 3.",
            "example": 3,
            "maximum": 3,
            "minimum": 0,
            "nullable": true,
            "type": "integer"
          },
          "method": {
            "allOf": [
              {
                "$ref": "#/components/schemas/OutboundHttpMethod"
              }
            ],
            "default": "GET",
            "description": "HTTP method the probe sends. Computed default: GET.",
            "example": "GET",
            "nullable": true
          },
          "regions": {
            "description": "Probe region ids (see GET /v1/regions); each must be served by this environment. Omitted or null stores no list and the check runs from the environment default regions, which GET renders. The count is plan-limited.",
            "example": [
              "us-east-1"
            ],
            "items": {
              "type": "string"
            },
            "maxItems": 6,
            "minItems": 1,
            "nullable": true,
            "type": "array",
            "uniqueItems": true
          },
          "resolveAfterConsecutiveSuccess": {
            "default": 2,
            "description": "Consecutive successes before an incident resolves. Computed default: 2.",
            "example": 2,
            "maximum": 10,
            "minimum": 1,
            "nullable": true,
            "type": "integer"
          },
          "sslExpiryWarnDays": {
            "default": 14,
            "description": "TLS certificate expiry alert threshold in days. Computed default: 14 (null resets to it). Setting a value is plan-gated.",
            "example": 14,
            "maximum": 365,
            "minimum": 1,
            "nullable": true,
            "type": "integer"
          },
          "timeoutMs": {
            "default": 8000,
            "description": "Probe timeout in milliseconds. Computed default: 8000.",
            "example": 8000,
            "maximum": 15000,
            "minimum": 1000,
            "nullable": true,
            "type": "integer"
          },
          "url": {
            "description": "Immutable. Accepted only when equal to the stored url; anything else is 422 VALIDATION_FAILED.",
            "example": "https://api.example.com/health",
            "format": "uri",
            "maxLength": 2048,
            "minLength": 1,
            "type": "string"
          }
        },
        "type": "object"
      },
      "V1HttpCheckConfigResponse": {
        "properties": {
          "blockHttpDowngrade": {
            "nullable": true,
            "type": "boolean"
          },
          "bodyContains": {
            "nullable": true,
            "type": "string"
          },
          "bodyNotContains": {
            "nullable": true,
            "type": "string"
          },
          "customHeaders": {
            "additionalProperties": {
              "type": "string"
            },
            "nullable": true,
            "type": "object"
          },
          "expectedStatusMax": {
            "nullable": true,
            "type": "integer"
          },
          "expectedStatusMin": {
            "nullable": true,
            "type": "integer"
          },
          "failAfterConsecutive": {
            "type": "integer"
          },
          "followRedirects": {
            "nullable": true,
            "type": "boolean"
          },
          "ipFamily": {
            "allOf": [
              {
                "$ref": "#/components/schemas/IpFamily"
              }
            ],
            "example": "AUTO",
            "readOnly": true
          },
          "latencyWarnMs": {
            "nullable": true,
            "type": "integer"
          },
          "maxRedirects": {
            "nullable": true,
            "type": "integer"
          },
          "maxResponseBytes": {
            "description": "Read-only, computed per check type.",
            "example": 262144,
            "type": "integer"
          },
          "method": {
            "allOf": [
              {
                "$ref": "#/components/schemas/OutboundHttpMethod"
              }
            ],
            "nullable": true
          },
          "regions": {
            "description": "Stored regions, or the environment defaults when none are stored.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "resolveAfterConsecutiveSuccess": {
            "type": "integer"
          },
          "skipTlsVerification": {
            "description": "Read-only, computed.",
            "example": false,
            "type": "boolean"
          },
          "sslExpiryWarnDays": {
            "type": "integer"
          },
          "timeoutMs": {
            "type": "integer"
          },
          "url": {
            "description": "null only for a non-HTTP check (read-only through v1).",
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "url",
          "method",
          "customHeaders",
          "timeoutMs",
          "expectedStatusMin",
          "expectedStatusMax",
          "regions",
          "followRedirects",
          "maxRedirects",
          "blockHttpDowngrade",
          "failAfterConsecutive",
          "resolveAfterConsecutiveSuccess",
          "latencyWarnMs",
          "sslExpiryWarnDays",
          "bodyContains",
          "bodyNotContains",
          "ipFamily",
          "skipTlsVerification",
          "maxResponseBytes"
        ],
        "type": "object"
      },
      "V1RateLimitResponse": {
        "properties": {
          "code": {
            "description": "RATE_LIMIT_EXCEEDED_KEY or OAUTH_RATE_LIMITED.",
            "example": "RATE_LIMIT_EXCEEDED_KEY",
            "type": "string"
          },
          "error": {
            "example": "TOO_MANY_REQUESTS",
            "type": "string"
          },
          "limit": {
            "description": "Requests per minute allowed in the bucket that tripped.",
            "example": 60,
            "type": "integer"
          },
          "message": {
            "description": "Human-readable message (string, or a list for validation failures).",
            "example": "Rate limit of 60 requests per minute exceeded.",
            "oneOf": [
              {
                "type": "string"
              },
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              }
            ]
          },
          "plan": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WorkspacePlan"
              }
            ],
            "example": "pro"
          },
          "scope": {
            "allOf": [
              {
                "$ref": "#/components/schemas/V1RateLimitScope"
              }
            ],
            "example": "principal"
          },
          "statusCode": {
            "example": 429,
            "type": "integer"
          }
        },
        "required": [
          "statusCode",
          "error",
          "code",
          "message",
          "scope",
          "limit"
        ],
        "type": "object"
      },
      "V1RateLimitScope": {
        "enum": [
          "ip",
          "principal",
          "workspace",
          "app",
          "installation"
        ],
        "type": "string"
      },
      "WhoamiV1Response": {
        "properties": {
          "apiKeyPrefix": {
            "description": "Display prefix of the API key. Null for OAuth access tokens.",
            "example": "ionh_live_9f",
            "nullable": true,
            "type": "string"
          },
          "permissionLevel": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ApiKeyPermission"
              }
            ],
            "example": "read_write"
          },
          "principalKind": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PrincipalKind"
              }
            ],
            "example": "service"
          },
          "projectedRole": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WorkspaceRole"
              }
            ],
            "example": "admin",
            "nullable": true
          },
          "workspaceId": {
            "example": 42,
            "type": "integer"
          },
          "workspaceName": {
            "example": "Acme",
            "type": "string"
          }
        },
        "required": [
          "workspaceId",
          "workspaceName",
          "permissionLevel",
          "projectedRole",
          "apiKeyPrefix",
          "principalKind"
        ],
        "type": "object"
      },
      "WorkspacePlan": {
        "enum": [
          "free",
          "pro",
          "business",
          "unsubscribed"
        ],
        "type": "string"
      },
      "WorkspaceRole": {
        "enum": [
          "owner",
          "admin",
          "member",
          "viewer"
        ],
        "type": "string"
      }
    },
    "securitySchemes": {
      "bearer": {
        "description": "Ionhour API key (ionh_...) or OAuth access token (ionh_oat_...)",
        "scheme": "bearer",
        "type": "http"
      }
    }
  },
  "info": {
    "contact": {},
    "description": "",
    "title": "Ionhour Integration API",
    "version": "1"
  },
  "openapi": "3.0.0",
  "paths": {
    "/v1/checks": {
      "get": {
        "operationId": "checks_list",
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "default": 1,
              "example": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Page size; values above 100 are clamped to 100.",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 25,
              "example": 25,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "projectId",
            "required": false,
            "schema": {
              "example": 7,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "checkType",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/CheckType"
            }
          },
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/CheckStatus"
            }
          },
          {
            "in": "query",
            "name": "slug",
            "required": false,
            "schema": {
              "example": "public-api",
              "pattern": "^[a-z0-9_-]{1,64}$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CheckV1PageResponse"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List checks",
        "tags": [
          "Checks"
        ]
      },
      "post": {
        "operationId": "checks_create",
        "parameters": [
          {
            "description": "Optional client-chosen key (1-128 printable ASCII characters, no spaces) that makes this create safe to retry. Scoped to the workspace, the calling credential and this route, and remembered for 24 hours. A retry with the same key and body returns the original status and the current state of the created resource with `Idempotency-Replayed: true`; the same key with a different body is rejected.",
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "schema": {
              "maxLength": 128,
              "minLength": 1,
              "pattern": "^[\\x21-\\x7E]{1,128}$",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCheckV1Dto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CheckV1Response"
                }
              }
            },
            "description": "",
            "headers": {
              "Idempotency-Replayed": {
                "description": "Present with value `true` only when this response replays an earlier request with the same Idempotency-Key.",
                "schema": {
                  "enum": [
                    "true"
                  ],
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "PLAN_LIMIT_EXCEEDED: the plan caps the number of checks or gates a requested config field (`detail.resource` names it). The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "Project not in this workspace"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "IDEMPOTENCY_KEY_IN_PROGRESS: an earlier request with the same Idempotency-Key is still being processed after a 5 second wait. Retry later.\n\nSLUG_TAKEN"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "IDEMPOTENCY_KEY_REUSED: the Idempotency-Key was already used with a different request body. VALIDATION_FAILED: the Idempotency-Key header is malformed.\n\nCHECK_TYPE_NOT_SUPPORTED or VALIDATION_FAILED"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create an HTTP check",
        "tags": [
          "Checks"
        ]
      }
    },
    "/v1/checks/{id}": {
      "delete": {
        "operationId": "checks_remove",
        "parameters": [
          {
            "description": "Numeric check id, or `slug:<slug>`.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "example": "slug:public-api",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "NOT_FOUND: the resource does not exist in the credential's workspace."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete a check (soft delete; releases its slug)",
        "tags": [
          "Checks"
        ]
      },
      "get": {
        "operationId": "checks_getOne",
        "parameters": [
          {
            "description": "Numeric check id, or `slug:<slug>`.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "example": "slug:public-api",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CheckV1Response"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "NOT_FOUND: the resource does not exist in the credential's workspace."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get a check",
        "tags": [
          "Checks"
        ]
      },
      "patch": {
        "operationId": "checks_update",
        "parameters": [
          {
            "description": "Numeric check id, or `slug:<slug>`.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "example": "slug:public-api",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCheckV1Dto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CheckV1Response"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "PLAN_LIMIT_EXCEEDED: the plan caps the number of checks or gates a requested config field (`detail.resource` names it). The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "NOT_FOUND: the resource does not exist in the credential's workspace."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "SLUG_TAKEN"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "CHECK_TYPE_NOT_SUPPORTED or VALIDATION_FAILED"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update a check (partial; config merged per key; url immutable)",
        "tags": [
          "Checks"
        ]
      }
    },
    "/v1/checks/{id}/pause": {
      "post": {
        "operationId": "checks_pause",
        "parameters": [
          {
            "description": "Numeric check id, or `slug:<slug>`.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "example": "slug:public-api",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CheckV1Response"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "NOT_FOUND: the resource does not exist in the credential's workspace."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Pause a check (idempotent)",
        "tags": [
          "Checks"
        ]
      }
    },
    "/v1/checks/{id}/resume": {
      "post": {
        "operationId": "checks_resume",
        "parameters": [
          {
            "description": "Numeric check id, or `slug:<slug>`.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "example": "slug:public-api",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CheckV1Response"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "NOT_FOUND: the resource does not exist in the credential's workspace."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Resume a check (idempotent)",
        "tags": [
          "Checks"
        ]
      }
    },
    "/v1/deployments": {
      "get": {
        "operationId": "deployments_list",
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "default": 1,
              "example": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Page size; values above 100 are clamped to 100.",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 25,
              "example": 25,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "projectId",
            "required": false,
            "schema": {
              "example": 7,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/DeploymentStatus"
            }
          },
          {
            "in": "query",
            "name": "from",
            "required": false,
            "schema": {
              "format": "date-time",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "to",
            "required": false,
            "schema": {
              "format": "date-time",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeploymentV1Page"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "tags": [
          "Deployments"
        ]
      },
      "post": {
        "operationId": "deployments_create",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateDeploymentV1Dto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeploymentV1Response"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "Project not in this workspace"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "tags": [
          "Deployments"
        ]
      }
    },
    "/v1/deployments/{id}/end": {
      "post": {
        "operationId": "deployments_end",
        "parameters": [
          {
            "description": "Deployment id.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeploymentV1Response"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "NOT_FOUND: the resource does not exist in the credential's workspace."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "tags": [
          "Deployments"
        ]
      }
    },
    "/v1/incidents": {
      "get": {
        "operationId": "incidents_list",
        "parameters": [
          {
            "in": "query",
            "name": "state",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/IncidentState"
            }
          },
          {
            "in": "query",
            "name": "from",
            "required": false,
            "schema": {
              "format": "date-time",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "to",
            "required": false,
            "schema": {
              "format": "date-time",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "checkId",
            "required": false,
            "schema": {
              "example": 12,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "default": 1,
              "example": 1,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "example": 25,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IncidentV1Page"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "tags": [
          "Incidents"
        ]
      },
      "post": {
        "operationId": "incidents_create",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateIncidentV1Dto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IncidentV1Response"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "Linked check, job or dependency not in this workspace"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "tags": [
          "Incidents"
        ]
      }
    },
    "/v1/incidents/{id}": {
      "get": {
        "operationId": "incidents_getOne",
        "parameters": [
          {
            "description": "Incident id.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IncidentV1DetailResponse"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "NOT_FOUND: the resource does not exist in the credential's workspace."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "tags": [
          "Incidents"
        ]
      }
    },
    "/v1/incidents/{id}/acknowledge": {
      "post": {
        "operationId": "incidents_acknowledge",
        "parameters": [
          {
            "description": "Incident id.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IncidentV1Response"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "NOT_FOUND: the resource does not exist in the credential's workspace."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "tags": [
          "Incidents"
        ]
      }
    },
    "/v1/incidents/{id}/resolve": {
      "post": {
        "operationId": "incidents_resolve",
        "parameters": [
          {
            "description": "Incident id.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResolveIncidentV1Dto"
              }
            }
          },
          "required": false
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IncidentV1Response"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "NOT_FOUND: the resource does not exist in the credential's workspace."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "tags": [
          "Incidents"
        ]
      }
    },
    "/v1/jobs": {
      "get": {
        "operationId": "jobs_list",
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "default": 1,
              "example": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Page size; values above 100 are clamped to 100.",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 25,
              "example": 25,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "projectId",
            "required": false,
            "schema": {
              "example": 7,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/CheckStatus"
            }
          },
          {
            "in": "query",
            "name": "slug",
            "required": false,
            "schema": {
              "example": "nightly-backup",
              "maxLength": 64,
              "pattern": "^[a-z0-9_-]{1,64}$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobV1Page"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List jobs",
        "tags": [
          "Jobs"
        ]
      },
      "post": {
        "operationId": "jobs_create",
        "parameters": [
          {
            "description": "Optional client-chosen key (1-128 printable ASCII characters, no spaces) that makes this create safe to retry. Scoped to the workspace, the calling credential and this route, and remembered for 24 hours. A retry with the same key and body returns the original status and the current state of the created resource with `Idempotency-Replayed: true`; the same key with a different body is rejected.",
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "schema": {
              "maxLength": 128,
              "minLength": 1,
              "pattern": "^[\\x21-\\x7E]{1,128}$",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateJobV1Dto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobV1Response"
                }
              }
            },
            "description": "",
            "headers": {
              "Idempotency-Replayed": {
                "description": "Present with value `true` only when this response replays an earlier request with the same Idempotency-Key.",
                "schema": {
                  "enum": [
                    "true"
                  ],
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "Project not in this workspace"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "IDEMPOTENCY_KEY_IN_PROGRESS: an earlier request with the same Idempotency-Key is still being processed after a 5 second wait. Retry later.\n\nSLUG_TAKEN"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "IDEMPOTENCY_KEY_REUSED: the Idempotency-Key was already used with a different request body. VALIDATION_FAILED: the Idempotency-Key header is malformed."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create a job",
        "tags": [
          "Jobs"
        ]
      }
    },
    "/v1/jobs/{id}": {
      "delete": {
        "operationId": "jobs_remove",
        "parameters": [
          {
            "description": "Numeric job id, or `slug:<slug>`.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "example": "slug:nightly-backup",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "NOT_FOUND: the resource does not exist in the credential's workspace."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete a job",
        "tags": [
          "Jobs"
        ]
      },
      "get": {
        "operationId": "jobs_getOne",
        "parameters": [
          {
            "description": "Numeric job id, or `slug:<slug>`.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "example": "slug:nightly-backup",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobV1Response"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "NOT_FOUND: the resource does not exist in the credential's workspace."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get a job",
        "tags": [
          "Jobs"
        ]
      },
      "patch": {
        "operationId": "jobs_update",
        "parameters": [
          {
            "description": "Numeric job id, or `slug:<slug>`.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "example": "slug:nightly-backup",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateJobV1Dto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobV1Response"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "NOT_FOUND: the resource does not exist in the credential's workspace."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "SLUG_TAKEN"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update a job",
        "tags": [
          "Jobs"
        ]
      }
    },
    "/v1/jobs/{id}/pause": {
      "post": {
        "operationId": "jobs_pause",
        "parameters": [
          {
            "description": "Numeric job id, or `slug:<slug>`.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "example": "slug:nightly-backup",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobV1Response"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "NOT_FOUND: the resource does not exist in the credential's workspace."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Pause a job (idempotent)",
        "tags": [
          "Jobs"
        ]
      }
    },
    "/v1/jobs/{id}/resume": {
      "post": {
        "operationId": "jobs_resume",
        "parameters": [
          {
            "description": "Numeric job id, or `slug:<slug>`.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "example": "slug:nightly-backup",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobV1Response"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "NOT_FOUND: the resource does not exist in the credential's workspace."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Resume a job (idempotent)",
        "tags": [
          "Jobs"
        ]
      }
    },
    "/v1/maintenance-windows": {
      "get": {
        "operationId": "maintenance_list",
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "default": 1,
              "example": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Page size; values above 100 are clamped to 100.",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 25,
              "example": 25,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "state",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/MaintenanceWindowState"
            }
          },
          {
            "in": "query",
            "name": "projectId",
            "required": false,
            "schema": {
              "example": 7,
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "from",
            "required": false,
            "schema": {
              "format": "date-time",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "to",
            "required": false,
            "schema": {
              "format": "date-time",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MaintenanceWindowV1Page"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "tags": [
          "Maintenance"
        ]
      },
      "post": {
        "operationId": "maintenance_create",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateMaintenanceWindowV1Dto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MaintenanceWindowV1Response"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "One or more projects not in this workspace"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "tags": [
          "Maintenance"
        ]
      }
    },
    "/v1/maintenance-windows/{id}/end": {
      "post": {
        "operationId": "maintenance_end",
        "parameters": [
          {
            "description": "Maintenance window id.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MaintenanceWindowV1Response"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "NOT_FOUND: the resource does not exist in the credential's workspace."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "tags": [
          "Maintenance"
        ]
      }
    },
    "/v1/projects": {
      "get": {
        "operationId": "projects_list",
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "default": 1,
              "example": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Page size; values above 100 are clamped to 100.",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 25,
              "example": 25,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Exact project name match.",
            "in": "query",
            "name": "name",
            "required": false,
            "schema": {
              "example": "Payments",
              "maxLength": 255,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectV1Page"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List projects",
        "tags": [
          "Projects"
        ]
      },
      "post": {
        "operationId": "projects_create",
        "parameters": [
          {
            "description": "Optional client-chosen key (1-128 printable ASCII characters, no spaces) that makes this create safe to retry. Scoped to the workspace, the calling credential and this route, and remembered for 24 hours. A retry with the same key and body returns the original status and the current state of the created resource with `Idempotency-Replayed: true`; the same key with a different body is rejected.",
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "schema": {
              "maxLength": 128,
              "minLength": 1,
              "pattern": "^[\\x21-\\x7E]{1,128}$",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateProjectV1Dto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectV1Response"
                }
              }
            },
            "description": "",
            "headers": {
              "Idempotency-Replayed": {
                "description": "Present with value `true` only when this response replays an earlier request with the same Idempotency-Key.",
                "schema": {
                  "enum": [
                    "true"
                  ],
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "IDEMPOTENCY_KEY_IN_PROGRESS: an earlier request with the same Idempotency-Key is still being processed after a 5 second wait. Retry later."
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "IDEMPOTENCY_KEY_REUSED: the Idempotency-Key was already used with a different request body. VALIDATION_FAILED: the Idempotency-Key header is malformed."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Create a project",
        "tags": [
          "Projects"
        ]
      }
    },
    "/v1/projects/{id}": {
      "delete": {
        "operationId": "projects_remove",
        "parameters": [
          {
            "description": "Numeric project id. Anything else is 404 NOT_FOUND.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "example": "7",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "NOT_FOUND: the resource does not exist in the credential's workspace."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "PROJECT_NOT_EMPTY: the project still has active checks or jobs."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Delete an empty project",
        "tags": [
          "Projects"
        ]
      },
      "get": {
        "operationId": "projects_getOne",
        "parameters": [
          {
            "description": "Numeric project id. Anything else is 404 NOT_FOUND.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "example": "7",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectV1Response"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "NOT_FOUND: the resource does not exist in the credential's workspace."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get a project",
        "tags": [
          "Projects"
        ]
      },
      "patch": {
        "operationId": "projects_update",
        "parameters": [
          {
            "description": "Numeric project id. Anything else is 404 NOT_FOUND.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "example": "7",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateProjectV1Dto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectV1Response"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "NOT_FOUND: the resource does not exist in the credential's workspace."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update a project",
        "tags": [
          "Projects"
        ]
      }
    },
    "/v1/regions": {
      "get": {
        "operationId": "regions_list",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/RegionV1Response"
                  },
                  "type": "array"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "List probe regions",
        "tags": [
          "Regions"
        ]
      }
    },
    "/v1/status-pages": {
      "get": {
        "operationId": "statusPages_list",
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "default": 1,
              "example": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Page size; values above 100 are clamped to 100.",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 25,
              "example": 25,
              "minimum": 1,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatusPageV1Page"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "tags": [
          "Status Pages"
        ]
      }
    },
    "/v1/status-pages/{id}/announcements": {
      "get": {
        "operationId": "announcements_list",
        "parameters": [
          {
            "description": "Status page id or slug.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "default": 1,
              "example": 1,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Page size; values above 100 are clamped to 100.",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 25,
              "example": 25,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "`open` = not yet resolved; `resolved` = resolved.",
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/AnnouncementListStatus"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnnouncementV1Page"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "NOT_FOUND: the resource does not exist in the credential's workspace."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "tags": [
          "Announcements"
        ]
      },
      "post": {
        "operationId": "announcements_create",
        "parameters": [
          {
            "description": "Status page id or slug.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateAnnouncementV1Dto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnnouncementV1Response"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "NOT_FOUND: the resource does not exist in the credential's workspace."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "tags": [
          "Announcements"
        ]
      }
    },
    "/v1/status-pages/{id}/announcements/{announcementId}": {
      "patch": {
        "operationId": "announcements_update",
        "parameters": [
          {
            "description": "Status page id or slug.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Announcement id.",
            "in": "path",
            "name": "announcementId",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateAnnouncementV1Dto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnnouncementV1Response"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "NOT_FOUND: the resource does not exist in the credential's workspace."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "tags": [
          "Announcements"
        ]
      }
    },
    "/v1/status-pages/{id}/announcements/{announcementId}/updates": {
      "post": {
        "operationId": "announcements_addUpdate",
        "parameters": [
          {
            "description": "Status page id or slug.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Announcement id.",
            "in": "path",
            "name": "announcementId",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateAnnouncementUpdateV1Dto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnnouncementUpdateV1Response"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "NOT_FOUND: the resource does not exist in the credential's workspace."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "tags": [
          "Announcements"
        ]
      }
    },
    "/v1/status-pages/{id}/summary": {
      "get": {
        "operationId": "statusPages_summary",
        "parameters": [
          {
            "description": "Status page id or slug.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object"
                }
              }
            },
            "description": "The public status page payload (components, active incidents, maintenance), including private and disabled pages. Not yet modelled field by field."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "NOT_FOUND: the resource does not exist in the credential's workspace."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "tags": [
          "Status Pages"
        ]
      }
    },
    "/v1/whoami": {
      "get": {
        "operationId": "whoami_whoami",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WhoamiV1Response"
                }
              }
            },
            "description": ""
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "VALIDATION_FAILED: malformed body, query or path parameter. `message` lists every failed constraint."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential was not accepted. MISSING_BEARER: no bearer token. INVALID_KEY: unknown, revoked or disabled. KEY_EXPIRED: past its expiry. SERVICE_KEY_INACTIVE: a service key that is disabled, expired, or whose workspace is no longer active. INVALID_PRINCIPAL: the credential has no resolvable acting user."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "The credential is valid but may not perform this call: KEY_READ_ONLY, KEY_SCOPE_DENIED, OAUTH_SCOPE_DENIED, KEY_OWNER_NO_ACCESS, INSUFFICIENT_ROLE or INTEGRATION_API_DISABLED. Plan limits answer PLAN_LIMIT_EXCEEDED with a `detail` object."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1RateLimitResponse"
                }
              }
            },
            "description": "A rate limit tripped; `scope` names the bucket and `limit` its per-minute allowance. RATE_LIMIT_EXCEEDED_KEY always sends `Retry-After`; wait that many seconds. OAUTH_RATE_LIMITED buckets are fixed 60 s windows; when `Retry-After` is absent, wait 60 s.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorResponse"
                }
              }
            },
            "description": "INTERNAL_ERROR: an unexpected server error. Details are logged, never returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "tags": [
          "Whoami"
        ]
      }
    }
  },
  "security": [
    {
      "bearer": []
    }
  ],
  "servers": [
    {
      "url": "https://api.ionhour.com/api"
    }
  ],
  "tags": []
}
