openapi: 3.0.3 info: title: 'Statuswerk API Reference' description: '' version: 1.0.0 servers: - url: 'https://statuswerk.eu' tags: - name: Endpoints description: '' components: securitySchemes: default: type: http scheme: bearer description: 'You can generate an API token in your dashboard under API Tokens. Pass it as `Authorization: Bearer YOUR_TOKEN` and set the `X-Tenant-Id` header to scope requests to a workspace.' security: - default: [] paths: /api/v1/statuspage: get: summary: 'Get the current statuspage details.' operationId: getTheCurrentStatuspageDetails description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints patch: summary: 'Update the statuspage settings.' operationId: updateTheStatuspageSettings description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: 'value darf nicht mehr als 255 Zeichen haben.' example: b timezone: type: string description: 'Must be a valid time zone, such as Africa/Accra.' example: Asia/Ulaanbaatar language: type: string description: 'value darf nicht mehr als 10 Zeichen haben.' example: gzmiyv is_public: type: boolean description: '' example: false allow_subscriptions: type: boolean description: '' example: true show_uptime: type: boolean description: '' example: false uptime_days_to_show: type: integer description: 'value muss mindestens 1 sein. value darf nicht größer als 365 sein.' example: 1 allow_email_subscribers: type: boolean description: '' example: false allow_sms_subscribers: type: boolean description: '' example: false allow_webhook_subscribers: type: boolean description: '' example: true allow_rss_subscribers: type: boolean description: '' example: true meta_title: type: string description: 'value darf nicht mehr als 255 Zeichen haben.' example: l nullable: true meta_description: type: string description: 'value darf nicht mehr als 500 Zeichen haben.' example: j nullable: true /api/v1/statuspage/status: get: summary: 'Get overall status summary (useful for CI/CD checks).' operationId: getOverallStatusSummaryusefulForCICDChecks description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints /api/v1/components: get: summary: 'List all components.' operationId: listAllComponents description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints post: summary: 'Create a new component.' operationId: createANewComponent description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'value darf nicht mehr als 255 Zeichen haben.' example: b description: type: string description: 'value darf nicht mehr als 1000 Zeichen haben.' example: 'Et animi quos velit et fugiat.' nullable: true group_id: type: string description: 'value muss eine gültige UUID sein.' example: 5707ca55-f609-3528-be8b-1baeaee1567e nullable: true status: type: string description: '' example: partial_outage enum: - operational - degraded_performance - partial_outage - major_outage - maintenance nullable: true position: type: integer description: 'value muss mindestens 0 sein.' example: 9 nullable: true show_uptime: type: boolean description: '' example: false nullable: true uptime_start_date: type: string description: 'value muss ein gültiges Datum sein.' example: '2026-09-10T11:02:16' nullable: true visible: type: boolean description: '' example: true nullable: true required: - name '/api/v1/components/{id}': get: summary: 'Get a specific component.' operationId: getASpecificComponent description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints put: summary: 'Update a component.' operationId: updateAComponent description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: 'value darf nicht mehr als 255 Zeichen haben.' example: b description: type: string description: 'value darf nicht mehr als 1000 Zeichen haben.' example: 'Et animi quos velit et fugiat.' nullable: true group_id: type: string description: 'value muss eine gültige UUID sein.' example: 5707ca55-f609-3528-be8b-1baeaee1567e nullable: true status: type: string description: '' example: partial_outage enum: - operational - degraded_performance - partial_outage - major_outage - maintenance position: type: integer description: 'value muss mindestens 0 sein.' example: 9 nullable: true show_uptime: type: boolean description: '' example: false nullable: true uptime_start_date: type: string description: 'value muss ein gültiges Datum sein.' example: '2026-09-10T11:02:16' nullable: true visible: type: boolean description: '' example: true nullable: true delete: summary: 'Delete a component.' operationId: deleteAComponent description: '' parameters: [] responses: { } tags: - Endpoints parameters: - in: path name: id description: 'The ID of the component.' example: architecto required: true schema: type: string '/api/v1/components/{component}/status': post: summary: 'Update component status (CI/CD-friendly endpoint).' operationId: updateComponentStatusCICDFriendlyEndpoint description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: status: type: string description: '' example: major_outage enum: - operational - degraded_performance - partial_outage - major_outage - maintenance required: - status parameters: - in: path name: component description: 'The component.' example: architecto required: true schema: type: string /api/v1/components/reorder: post: summary: 'Reorder components.' operationId: reorderComponents description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: components: type: array description: '' example: - [] items: type: object properties: id: type: string description: 'value muss eine gültige UUID sein.' example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed position: type: integer description: 'value muss mindestens 0 sein.' example: 84 required: - id - position required: - components /api/v1/component-groups: get: summary: 'List all component groups.' operationId: listAllComponentGroups description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints post: summary: 'Create a new component group.' operationId: createANewComponentGroup description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'value darf nicht mehr als 255 Zeichen haben.' example: b description: type: string description: 'value darf nicht mehr als 1000 Zeichen haben.' example: 'Et animi quos velit et fugiat.' nullable: true position: type: integer description: 'value muss mindestens 0 sein.' example: 42 nullable: true collapsed_by_default: type: boolean description: '' example: true nullable: true visible: type: boolean description: '' example: true nullable: true required: - name '/api/v1/component-groups/{id}': get: summary: 'Get a specific component group.' operationId: getASpecificComponentGroup description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints put: summary: 'Update a component group.' operationId: updateAComponentGroup description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: 'value darf nicht mehr als 255 Zeichen haben.' example: b description: type: string description: 'value darf nicht mehr als 1000 Zeichen haben.' example: 'Et animi quos velit et fugiat.' nullable: true position: type: integer description: 'value muss mindestens 0 sein.' example: 42 nullable: true collapsed_by_default: type: boolean description: '' example: false nullable: true visible: type: boolean description: '' example: true nullable: true delete: summary: 'Delete a component group.' operationId: deleteAComponentGroup description: '' parameters: [] responses: { } tags: - Endpoints parameters: - in: path name: id description: 'The ID of the component group.' example: architecto required: true schema: type: string /api/v1/incidents: get: summary: 'List all incidents.' operationId: listAllIncidents description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints post: summary: 'Create a new incident.' operationId: createANewIncident description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: title: type: string description: 'value darf nicht mehr als 255 Zeichen haben.' example: b message: type: string description: 'value darf nicht mehr als 10000 Zeichen haben.' example: 'n' status: type: string description: '' example: resolved enum: - investigating - identified - monitoring - resolved nullable: true severity: type: string description: '' example: major enum: - minor - major - critical nullable: true impact: type: string description: 'value darf nicht mehr als 255 Zeichen haben.' example: g nullable: true visible: type: boolean description: '' example: true nullable: true stickied: type: boolean description: '' example: true nullable: true notify_subscribers: type: boolean description: '' example: false nullable: true occurred_at: type: string description: 'value muss ein gültiges Datum sein.' example: '2026-09-10T11:02:16' nullable: true components: type: array description: '' example: null items: type: object nullable: true properties: id: type: string description: 'value muss eine gültige UUID sein.' example: c90237e9-ced5-3af6-88ea-84aeaa148878 status: type: string description: '' example: degraded_performance enum: - operational - degraded_performance - partial_outage - major_outage - maintenance nullable: true required: - id required: - title - message '/api/v1/incidents/{id}': get: summary: 'Get a specific incident.' operationId: getASpecificIncident description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints put: summary: 'Update an incident.' operationId: updateAnIncident description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: false content: application/json: schema: type: object properties: title: type: string description: 'value darf nicht mehr als 255 Zeichen haben.' example: b message: type: string description: 'value darf nicht mehr als 10000 Zeichen haben.' example: 'n' status: type: string description: '' example: investigating enum: - investigating - identified - monitoring - resolved severity: type: string description: '' example: major enum: - minor - major - critical nullable: true impact: type: string description: 'value darf nicht mehr als 255 Zeichen haben.' example: g nullable: true visible: type: boolean description: '' example: true nullable: true stickied: type: boolean description: '' example: false nullable: true notify_subscribers: type: boolean description: '' example: true nullable: true components: type: array description: '' example: null items: type: object nullable: true properties: id: type: string description: 'value muss eine gültige UUID sein.' example: c90237e9-ced5-3af6-88ea-84aeaa148878 status: type: string description: '' example: operational enum: - operational - degraded_performance - partial_outage - major_outage - maintenance nullable: true required: - id delete: summary: 'Delete an incident.' operationId: deleteAnIncident description: '' parameters: [] responses: { } tags: - Endpoints parameters: - in: path name: id description: 'The ID of the incident.' example: architecto required: true schema: type: string '/api/v1/incidents/{incident_id}/updates': get: summary: 'List all updates for an incident.' operationId: listAllUpdatesForAnIncident description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints post: summary: 'Create a new incident update.' operationId: createANewIncidentUpdate description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: status: type: string description: '' example: identified enum: - investigating - identified - monitoring - resolved message: type: string description: 'value darf nicht mehr als 10000 Zeichen haben.' example: b notify_subscribers: type: boolean description: '' example: true nullable: true required: - status - message parameters: - in: path name: incident_id description: 'The ID of the incident.' example: architecto required: true schema: type: string '/api/v1/incidents/{incident}/resolve': patch: summary: 'Resolve an incident (CI/CD-friendly endpoint).' operationId: resolveAnIncidentCICDFriendlyEndpoint description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: false content: application/json: schema: type: object properties: message: type: string description: 'value darf nicht mehr als 10000 Zeichen haben.' example: b nullable: true notify_subscribers: type: boolean description: '' example: false nullable: true parameters: - in: path name: incident description: 'The incident.' example: architecto required: true schema: type: string /api/v1/incident-templates: get: summary: 'List all incident templates.' operationId: listAllIncidentTemplates description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints post: summary: 'Create a new incident template.' operationId: createANewIncidentTemplate description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'value darf nicht mehr als 255 Zeichen haben.' example: b title_template: type: string description: 'value darf nicht mehr als 255 Zeichen haben.' example: 'n' message_template: type: string description: 'value darf nicht mehr als 10000 Zeichen haben.' example: g default_status: type: string description: '' example: monitoring enum: - investigating - identified - monitoring - resolved nullable: true default_severity: type: string description: '' example: minor enum: - minor - major - critical nullable: true visible: type: boolean description: '' example: false nullable: true stickied: type: boolean description: '' example: false nullable: true notify_subscribers: type: boolean description: '' example: false nullable: true default_component_ids: type: array description: 'value muss eine gültige UUID sein.' example: - c90237e9-ced5-3af6-88ea-84aeaa148878 items: type: string required: - name - title_template - message_template '/api/v1/incident-templates/{id}': get: summary: 'Get a specific incident template.' operationId: getASpecificIncidentTemplate description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints put: summary: 'Update an incident template.' operationId: updateAnIncidentTemplate description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: 'value darf nicht mehr als 255 Zeichen haben.' example: b title_template: type: string description: 'value darf nicht mehr als 255 Zeichen haben.' example: 'n' message_template: type: string description: 'value darf nicht mehr als 10000 Zeichen haben.' example: g default_status: type: string description: '' example: identified enum: - investigating - identified - monitoring - resolved nullable: true default_severity: type: string description: '' example: minor enum: - minor - major - critical nullable: true visible: type: boolean description: '' example: false nullable: true stickied: type: boolean description: '' example: true nullable: true notify_subscribers: type: boolean description: '' example: true nullable: true default_component_ids: type: array description: 'value muss eine gültige UUID sein.' example: - c90237e9-ced5-3af6-88ea-84aeaa148878 items: type: string delete: summary: 'Delete an incident template.' operationId: deleteAnIncidentTemplate description: '' parameters: [] responses: { } tags: - Endpoints parameters: - in: path name: id description: 'The ID of the incident template.' example: architecto required: true schema: type: string '/api/v1/incident-templates/{incident_template}/apply': post: summary: 'Open an incident from this template.' operationId: openAnIncidentFromThisTemplate description: "The endpoint CI/CD and alerting hooks use: name the template, optionally pass\nvariables for the placeholders, and every other field comes from the template." parameters: [] responses: { } tags: - Endpoints requestBody: required: false content: application/json: schema: type: object properties: occurred_at: type: string description: 'value muss ein gültiges Datum sein.' example: '2026-09-10T11:02:16' nullable: true variables: type: array description: 'value darf nicht mehr als 255 Zeichen haben.' example: - b items: type: string nullable: true parameters: - in: path name: incident_template description: '' example: architecto required: true schema: type: string /api/v1/maintenances: get: summary: 'List all scheduled maintenances.' operationId: listAllScheduledMaintenances description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints post: summary: 'Create a new scheduled maintenance.' operationId: createANewScheduledMaintenance description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: title: type: string description: 'value darf nicht mehr als 255 Zeichen haben.' example: b message: type: string description: 'value darf nicht mehr als 10000 Zeichen haben.' example: 'n' scheduled_start_at: type: string description: 'value muss ein gültiges Datum sein. value muss ein Datum nach now sein.' example: '2052-10-03' scheduled_end_at: type: string description: 'value muss ein gültiges Datum sein. value muss ein Datum nach scheduled_start_at sein.' example: '2052-10-03' auto_start: type: boolean description: '' example: true nullable: true auto_complete: type: boolean description: '' example: true nullable: true notify_subscribers: type: boolean description: '' example: true nullable: true notify_at_scheduled: type: boolean description: '' example: false nullable: true send_reminder_1h: type: boolean description: '' example: false nullable: true notify_at_start: type: boolean description: '' example: true nullable: true notify_at_end: type: boolean description: '' example: false nullable: true update_component_status: type: boolean description: '' example: false nullable: true component_ids: type: array description: 'value muss eine gültige UUID sein.' example: - a4855dc5-0acb-33c3-b921-f4291f719ca0 items: type: string required: - title - message - scheduled_start_at - scheduled_end_at '/api/v1/maintenances/{id}': get: summary: 'Get a specific maintenance.' operationId: getASpecificMaintenance description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints put: summary: 'Update a maintenance.' operationId: updateAMaintenance description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: false content: application/json: schema: type: object properties: title: type: string description: 'value darf nicht mehr als 255 Zeichen haben.' example: b message: type: string description: 'value darf nicht mehr als 10000 Zeichen haben.' example: 'n' scheduled_start_at: type: string description: 'value muss ein gültiges Datum sein.' example: '2026-09-10T11:02:16' scheduled_end_at: type: string description: 'value muss ein gültiges Datum sein. value muss ein Datum nach scheduled_start_at sein.' example: '2052-10-03' auto_start: type: boolean description: '' example: true nullable: true auto_complete: type: boolean description: '' example: true nullable: true notify_subscribers: type: boolean description: '' example: false nullable: true notify_at_scheduled: type: boolean description: '' example: false nullable: true send_reminder_1h: type: boolean description: '' example: false nullable: true notify_at_start: type: boolean description: '' example: false nullable: true notify_at_end: type: boolean description: '' example: false nullable: true update_component_status: type: boolean description: '' example: false nullable: true component_ids: type: array description: 'value muss eine gültige UUID sein.' example: - a4855dc5-0acb-33c3-b921-f4291f719ca0 items: type: string delete: summary: 'Delete a maintenance.' operationId: deleteAMaintenance description: '' parameters: [] responses: { } tags: - Endpoints parameters: - in: path name: id description: 'The ID of the maintenance.' example: architecto required: true schema: type: string '/api/v1/maintenances/{maintenance}/start': post: summary: 'Start a maintenance (CI/CD-friendly endpoint).' operationId: startAMaintenanceCICDFriendlyEndpoint description: '' parameters: [] responses: { } tags: - Endpoints parameters: - in: path name: maintenance description: 'The maintenance.' example: architecto required: true schema: type: string '/api/v1/maintenances/{maintenance}/complete': post: summary: 'Complete a maintenance (CI/CD-friendly endpoint).' operationId: completeAMaintenanceCICDFriendlyEndpoint description: '' parameters: [] responses: { } tags: - Endpoints parameters: - in: path name: maintenance description: 'The maintenance.' example: architecto required: true schema: type: string /api/v1/maintenance-templates: get: summary: 'List all maintenance templates.' operationId: listAllMaintenanceTemplates description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints post: summary: 'Create a new maintenance template.' operationId: createANewMaintenanceTemplate description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'value darf nicht mehr als 255 Zeichen haben.' example: b title_template: type: string description: 'value darf nicht mehr als 255 Zeichen haben.' example: 'n' message_template: type: string description: 'value darf nicht mehr als 10000 Zeichen haben.' example: g default_duration_minutes: type: integer description: 'value muss mindestens 1 sein. value darf nicht größer als 43200 sein.' example: 16 nullable: true notify_subscribers: type: boolean description: '' example: true nullable: true send_reminder_1h: type: boolean description: '' example: true nullable: true auto_start: type: boolean description: '' example: false nullable: true notify_at_start: type: boolean description: '' example: false nullable: true auto_complete: type: boolean description: '' example: false nullable: true notify_at_end: type: boolean description: '' example: false nullable: true update_component_status: type: boolean description: '' example: false nullable: true default_component_ids: type: array description: 'value muss eine gültige UUID sein.' example: - 977e5426-8d13-3824-86aa-b092f8ae52c5 items: type: string required: - name - title_template - message_template '/api/v1/maintenance-templates/{id}': get: summary: 'Get a specific maintenance template.' operationId: getASpecificMaintenanceTemplate description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints put: summary: 'Update a maintenance template.' operationId: updateAMaintenanceTemplate description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: 'value darf nicht mehr als 255 Zeichen haben.' example: b title_template: type: string description: 'value darf nicht mehr als 255 Zeichen haben.' example: 'n' message_template: type: string description: 'value darf nicht mehr als 10000 Zeichen haben.' example: g default_duration_minutes: type: integer description: 'value muss mindestens 1 sein. value darf nicht größer als 43200 sein.' example: 16 nullable: true notify_subscribers: type: boolean description: '' example: false nullable: true send_reminder_1h: type: boolean description: '' example: false nullable: true auto_start: type: boolean description: '' example: true nullable: true notify_at_start: type: boolean description: '' example: false nullable: true auto_complete: type: boolean description: '' example: true nullable: true notify_at_end: type: boolean description: '' example: true nullable: true update_component_status: type: boolean description: '' example: true nullable: true default_component_ids: type: array description: 'value muss eine gültige UUID sein.' example: - 977e5426-8d13-3824-86aa-b092f8ae52c5 items: type: string delete: summary: 'Delete a maintenance template.' operationId: deleteAMaintenanceTemplate description: '' parameters: [] responses: { } tags: - Endpoints parameters: - in: path name: id description: 'The ID of the maintenance template.' example: architecto required: true schema: type: string '/api/v1/maintenance-templates/{maintenance_template}/apply': post: summary: 'Create a scheduled maintenance from this template.' operationId: createAScheduledMaintenanceFromThisTemplate description: "This is the endpoint CI/CD and schedulers use: pick the template, give it a start\ntime, and every other field comes from the template." parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: scheduled_start_at: type: string description: 'value muss ein gültiges Datum sein.' example: '2026-09-10T11:02:16' scheduled_end_at: type: string description: 'value muss ein gültiges Datum sein. value muss ein Datum nach scheduled_start_at sein.' example: '2052-10-03' nullable: true variables: type: array description: 'value darf nicht mehr als 255 Zeichen haben.' example: - 'n' items: type: string nullable: true required: - scheduled_start_at parameters: - in: path name: maintenance_template description: '' example: architecto required: true schema: type: string /api/v1/metrics: get: summary: '' operationId: getApiV1Metrics description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints post: summary: '' operationId: postApiV1Metrics description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: key: type: string description: 'Must match the regex /^[a-z0-9][a-z0-9_.-]*$/. value darf nicht mehr als 64 Zeichen haben.' example: b name: type: string description: 'value darf nicht mehr als 255 Zeichen haben.' example: 'n' suffix: type: string description: 'value darf nicht mehr als 16 Zeichen haben.' example: gzmiyvdljnikhway nullable: true decimals: type: integer description: 'value muss mindestens 0 sein. value darf nicht größer als 6 sein.' example: 1 nullable: true aggregation: type: string description: '' example: avg enum: - avg - sum - min - max - last nullable: true description: type: string description: 'value darf nicht mehr als 2000 Zeichen haben.' example: 'Omnis nostrum aut adipisci quidem nostrum qui commodi.' nullable: true visible: type: boolean description: '' example: false nullable: true position: type: integer description: 'value muss mindestens 0 sein.' example: 3 nullable: true y_axis_min: type: number description: '' example: 4326.41688 nullable: true y_axis_max: type: number description: '' example: 4326.41688 nullable: true required: - key - name '/api/v1/metrics/{metricKey}': get: summary: '' operationId: getApiV1MetricsMetricKey description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints put: summary: '' operationId: putApiV1MetricsMetricKey description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: false content: application/json: schema: type: object properties: key: type: string description: 'Must match the regex /^[a-z0-9][a-z0-9_.-]*$/. value darf nicht mehr als 64 Zeichen haben.' example: b name: type: string description: 'value darf nicht mehr als 255 Zeichen haben.' example: 'n' suffix: type: string description: 'value darf nicht mehr als 16 Zeichen haben.' example: gzmiyvdljnikhway nullable: true decimals: type: integer description: 'value muss mindestens 0 sein. value darf nicht größer als 6 sein.' example: 1 nullable: true aggregation: type: string description: '' example: min enum: - avg - sum - min - max - last nullable: true description: type: string description: 'value darf nicht mehr als 2000 Zeichen haben.' example: 'Omnis nostrum aut adipisci quidem nostrum qui commodi.' nullable: true visible: type: boolean description: '' example: false nullable: true position: type: integer description: 'value muss mindestens 0 sein.' example: 3 nullable: true y_axis_min: type: number description: '' example: 4326.41688 nullable: true y_axis_max: type: number description: '' example: 4326.41688 nullable: true delete: summary: '' operationId: deleteApiV1MetricsMetricKey description: '' parameters: [] responses: { } tags: - Endpoints parameters: - in: path name: metricKey description: '' example: architecto required: true schema: type: string '/api/v1/metrics/{metricKey}/points': post: summary: 'Push one point or a batch.' operationId: pushOnePointOrABatch description: "Idempotent: points are bucketed on write, so a client retrying a failed request\noverwrites rather than duplicates." parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: points: type: array description: 'value muss mindestens 1 Elemente haben. value darf nicht mehr als 5000 Elemente haben.' example: - [] items: type: object properties: value: type: number description: '' example: 4326.41688 timestamp: type: string description: 'value muss ein gültiges Datum sein.' example: '2026-09-10T11:02:16' nullable: true required: - value required: - points get: summary: "Read points back, for the customer's own dashboards or to verify an import." operationId: readPointsBackForTheCustomersOwnDashboardsOrToVerifyAnImport description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints requestBody: required: false content: application/json: schema: type: object properties: from: type: string description: 'value muss ein gültiges Datum sein.' example: '2026-09-10T11:02:16' nullable: true to: type: string description: 'value muss ein gültiges Datum sein.' example: '2026-09-10T11:02:16' nullable: true resolution: type: integer description: '' example: 16 nullable: true parameters: - in: path name: metricKey description: '' example: architecto required: true schema: type: string /api/v1/subscribers: get: summary: 'List all subscribers.' operationId: listAllSubscribers description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints post: summary: 'Create a new subscriber.' operationId: createANewSubscriber description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: false content: application/json: schema: type: object properties: email: type: string description: 'This field is required when none of phone and webhook_url are present. value muss eine gültige E-Mail-Adresse sein. value darf nicht mehr als 255 Zeichen haben.' example: gbailey@example.net nullable: true phone: type: string description: 'This field is required when none of email and webhook_url are present. value darf nicht mehr als 50 Zeichen haben.' example: m nullable: true webhook_url: type: string description: 'This field is required when none of email and phone are present. Must be a valid URL. value darf nicht mehr als 2000 Zeichen haben.' example: 'https://www.gulgowski.com/nihil-accusantium-harum-mollitia-modi-deserunt' nullable: true webhook_type: type: string description: 'This field is required when webhook_url is present.' example: generic enum: - generic - slack - microsoft_teams - discord - google_chat nullable: true webhook_secret: type: string description: 'value darf nicht mehr als 64 Zeichen haben.' example: w nullable: true channels: type: array description: '' example: - sms items: type: string enum: - email - sms - webhook component_ids: type: array description: 'value muss eine gültige UUID sein.' example: - 3c85cf54-98c1-36ed-b65a-abaafdecdfa9 items: type: string locale: type: string description: 'value darf nicht mehr als 10 Zeichen haben.' example: es_MX nullable: true skip_verification: type: boolean description: '' example: true nullable: true '/api/v1/subscribers/{id}': get: summary: 'Get a specific subscriber.' operationId: getASpecificSubscriber description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints delete: summary: 'Delete a subscriber.' operationId: deleteASubscriber description: '' parameters: [] responses: { } tags: - Endpoints parameters: - in: path name: id description: 'The ID of the subscriber.' example: architecto required: true schema: type: string '/api/v1/subscribers/{subscriber}/resend-verification': post: summary: 'Resend verification email.' operationId: resendVerificationEmail description: '' parameters: [] responses: { } tags: - Endpoints parameters: - in: path name: subscriber description: 'The subscriber.' example: architecto required: true schema: type: string /api/v1/integrations: get: summary: 'List all integrations for the current statuspage.' operationId: listAllIntegrationsForTheCurrentStatuspage description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints post: summary: 'Create a new integration.' operationId: createANewIntegration description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: type: type: string description: '' example: discord enum: - generic - slack - microsoft_teams - discord - google_chat name: type: string description: 'value darf nicht mehr als 255 Zeichen haben.' example: b url: type: string description: 'Must be a valid URL. value darf nicht mehr als 2000 Zeichen haben.' example: 'http://bailey.com/' is_enabled: type: boolean description: '' example: true nullable: true events: type: array description: '' example: - incident.resolved items: type: string enum: - incident.created - incident.updated - incident.resolved - maintenance.scheduled - maintenance.started - maintenance.completed required: - type - name - url '/api/v1/integrations/{id}': get: summary: 'Get a specific integration.' operationId: getASpecificIntegration description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints put: summary: 'Update an integration.' operationId: updateAnIntegration description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: false content: application/json: schema: type: object properties: type: type: string description: '' example: slack enum: - generic - slack - microsoft_teams - discord - google_chat name: type: string description: 'value darf nicht mehr als 255 Zeichen haben.' example: b url: type: string description: 'Must be a valid URL. value darf nicht mehr als 2000 Zeichen haben.' example: 'http://bailey.com/' is_enabled: type: boolean description: '' example: true events: type: array description: '' example: - incident.created items: type: string enum: - incident.created - incident.updated - incident.resolved - maintenance.scheduled - maintenance.started - maintenance.completed delete: summary: 'Delete an integration.' operationId: deleteAnIntegration description: '' parameters: [] responses: { } tags: - Endpoints parameters: - in: path name: id description: 'The ID of the integration.' example: architecto required: true schema: type: string '/api/v1/integrations/{integration}/test': post: summary: 'Send a test webhook to an integration.' operationId: sendATestWebhookToAnIntegration description: '' parameters: [] responses: { } tags: - Endpoints parameters: - in: path name: integration description: 'The integration.' example: architecto required: true schema: type: string /api/v1/statuspages: get: summary: '' operationId: getApiV1Statuspages description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints post: summary: '' operationId: postApiV1Statuspages description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'value darf nicht mehr als 255 Zeichen haben.' example: b subdomain: type: string description: 'Must match the regex /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/. value darf nicht mehr als 63 Zeichen haben.' example: 'n' nullable: true timezone: type: string description: 'Must be a valid time zone, such as Africa/Accra.' example: Antarctica/Rothera language: type: string description: 'value darf nicht mehr als 10 Zeichen haben.' example: zmiyvd required: - name '/api/v1/statuspages/{id}': get: summary: '' operationId: getApiV1StatuspagesId description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints delete: summary: '' operationId: deleteApiV1StatuspagesId description: '' parameters: [] responses: { } tags: - Endpoints parameters: - in: path name: id description: 'The ID of the statuspage.' example: architecto required: true schema: type: string '/api/v1/statuspages/{statuspage_id}/custom-domain': get: summary: '' operationId: getApiV1StatuspagesStatuspage_idCustomDomain description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints put: summary: '' operationId: putApiV1StatuspagesStatuspage_idCustomDomain description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: domain: type: string description: 'Must match the regex /^(?!-)[A-Za-z0-9-]{1,63}(?:\.[A-Za-z0-9-]{1,63})+$/. value darf nicht mehr als 255 Zeichen haben.' example: b required: - domain delete: summary: '' operationId: deleteApiV1StatuspagesStatuspage_idCustomDomain description: '' parameters: [] responses: { } tags: - Endpoints parameters: - in: path name: statuspage_id description: 'The ID of the statuspage.' example: architecto required: true schema: type: string '/api/v1/statuspages/{statuspage}/custom-domain/verify': post: summary: '' operationId: postApiV1StatuspagesStatuspageCustomDomainVerify description: '' parameters: [] responses: { } tags: - Endpoints parameters: - in: path name: statuspage description: 'The statuspage.' example: architecto required: true schema: type: string