diff --git a/docs/openapi/monitoring-api.json b/docs/openapi/monitoring-api.json index 31e1c44..a9c3942 100644 --- a/docs/openapi/monitoring-api.json +++ b/docs/openapi/monitoring-api.json @@ -273,7 +273,7 @@ { "name": "managedBy", "in": "query", - "description": "Filter by managed-by source (DASHBOARD, CLI, TERRAFORM, MCP, API)", + "description": "Filter by managed-by source (DASHBOARD, GIT, TERRAFORM, MCP, API; CLI = GIT until 2027-01-31)", "required": false, "schema": { "type": "string", @@ -282,7 +282,8 @@ "CLI", "TERRAFORM", "MCP", - "API" + "API", + "GIT" ] } }, @@ -296,11 +297,49 @@ } }, { - "name": "pageable", + "name": "page", "in": "query", - "required": true, + "description": "Zero-based page index (0..N)", + "required": false, "schema": { - "$ref": "#/components/schemas/Pageable" + "minimum": 0, + "type": "integer", + "default": 0 + } + }, + { + "name": "size", + "in": "query", + "description": "The size of the page to be returned", + "required": false, + "schema": { + "minimum": 1, + "type": "integer", + "default": 50 + } + }, + { + "name": "sort", + "in": "query", + "description": "Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [ + "createdAt,DESC" + ] + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } ], @@ -433,6 +472,26 @@ ], "summary": "Create a new alert channel with encrypted config", "operationId": "create_16", + "parameters": [ + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "requestBody": { "content": { "application/json": { @@ -583,6 +642,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -723,6 +791,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -873,6 +950,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -1015,6 +1101,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -1157,6 +1252,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -1309,6 +1413,24 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -1442,6 +1564,26 @@ ], "summary": "Test alert channel connectivity using raw config (no saved channel required)", "operationId": "testConfig", + "parameters": [ + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "requestBody": { "content": { "application/json": { @@ -1593,6 +1735,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -1736,6 +1887,24 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -1869,6 +2038,17 @@ ], "summary": "List API keys", "operationId": "list_14", + "parameters": [ + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", @@ -1998,6 +2178,26 @@ ], "summary": "Create API key", "operationId": "create_15", + "parameters": [ + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "requestBody": { "content": { "application/json": { @@ -2148,6 +2348,15 @@ "type": "integer", "format": "int32" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -2281,6 +2490,15 @@ "type": "integer", "format": "int32" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -2433,6 +2651,24 @@ "type": "integer", "format": "int32" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -2575,6 +2811,24 @@ "type": "integer", "format": "int32" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -2718,6 +2972,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -2847,6 +3110,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -3042,6 +3314,15 @@ "format": "int32", "default": 50 } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -3233,6 +3514,15 @@ "type": "string", "format": "date-time" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -3363,6 +3653,17 @@ "summary": "Start a device-code login", "description": "Returns a device code for the CLI to poll and a short user code for an admin to approve.", "operationId": "start_1", + "parameters": [ + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "requestBody": { "content": { "application/json": { @@ -3506,6 +3807,17 @@ "summary": "Poll a device-code login", "description": "Returns authorization_pending, slow_down, expired, denied, or complete. The API key is returned once, with complete.", "operationId": "token", + "parameters": [ + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "requestBody": { "content": { "application/json": { @@ -3649,6 +3961,17 @@ "summary": "Get current API key identity", "description": "Returns the authenticated API key's metadata, organization, billing plan, entitlements with usage, and current rate-limit quota. Only available for API key authentication (Bearer dh_live_...).", "operationId": "me_1", + "parameters": [ + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", @@ -3796,6 +4119,24 @@ "schema": { "type": "string" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -3945,6 +4286,26 @@ ], "summary": "Check every import without storing a bundle", "operationId": "check", + "parameters": [ + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "requestBody": { "content": { "application/json": { @@ -4096,6 +4457,15 @@ "type": "boolean", "default": false } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -4230,6 +4600,17 @@ "summary": "Dashboard overview", "description": "Returns monitor status counts, average uptime windows, and incident aggregates for the authenticated org. Results are cached for 1 minute.", "operationId": "overview", + "parameters": [ + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", @@ -4361,6 +4742,17 @@ ], "summary": "List definitions", "operationId": "list_23", + "parameters": [ + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", @@ -4501,6 +4893,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -4643,165 +5044,14 @@ "type": "string", "format": "uuid" } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/TableValueResultRevisionDto" - } - } - } - }, - "400": { - "description": "Bad request — the payload failed validation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized — missing or invalid credentials", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "402": { - "description": "Payment required — the plan or quota does not allow this", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden — the actor lacks permission for this resource", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not found — the requested resource does not exist", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "409": { - "description": "Conflict — the request collides with current resource state", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "410": { - "description": "Gone — the resource is no longer available", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "429": { - "description": "Too many requests — retry after the window resets", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal server error — see the message field for details", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "502": { - "description": "Bad gateway — an upstream provider returned an error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "503": { - "description": "Service unavailable — try again shortly", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/api/v1/demo-booking/availability": { - "get": { - "tags": [ - "dashboard-demo-booking-controller" - ], - "summary": "Get live demo times for the authenticated dashboard user", - "operationId": "getDashboardDemoAvailability", - "parameters": [ - { - "name": "date", - "in": "query", - "required": true, - "schema": { - "type": "string", - "format": "date" - } - }, - { - "name": "timezone", - "in": "query", - "required": true, - "schema": { - "type": "string" - } }, { - "name": "days", - "in": "query", + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", "required": false, "schema": { - "type": "integer", - "format": "int32", - "default": 1 + "type": "string" } } ], @@ -4811,7 +5061,176 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/DemoAvailabilityDto" + "$ref": "#/components/schemas/TableValueResultRevisionDto" + } + } + } + }, + "400": { + "description": "Bad request — the payload failed validation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized — missing or invalid credentials", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "402": { + "description": "Payment required — the plan or quota does not allow this", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden — the actor lacks permission for this resource", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not found — the requested resource does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict — the request collides with current resource state", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "410": { + "description": "Gone — the resource is no longer available", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "429": { + "description": "Too many requests — retry after the window resets", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error — see the message field for details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "502": { + "description": "Bad gateway — an upstream provider returned an error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "Service unavailable — try again shortly", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/demo-booking/availability": { + "get": { + "tags": [ + "dashboard-demo-booking-controller" + ], + "summary": "Get live demo times for the authenticated dashboard user", + "operationId": "getDashboardDemoAvailability", + "parameters": [ + { + "name": "date", + "in": "query", + "required": true, + "schema": { + "type": "string", + "format": "date" + } + }, + { + "name": "timezone", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "days", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 1 + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/DemoAvailabilityDto" } } } @@ -4936,6 +5355,26 @@ ], "summary": "Book a demo from the dashboard", "operationId": "createDashboardDemoBooking", + "parameters": [ + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "requestBody": { "content": { "application/json": { @@ -5085,6 +5524,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -5227,6 +5675,24 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -5361,6 +5827,17 @@ "summary": "Get current deploy lock", "description": "Returns the active deploy lock for the current workspace, if any.", "operationId": "current", + "parameters": [ + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", @@ -5491,6 +5968,26 @@ "summary": "Acquire deploy lock", "description": "Acquires an exclusive deploy lock for the current workspace. Returns 409 Conflict if the workspace is already locked by another session.", "operationId": "acquire", + "parameters": [ + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "requestBody": { "content": { "application/json": { @@ -5642,6 +6139,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -5780,6 +6286,15 @@ "minLength": 0, "type": "string" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -5914,6 +6429,24 @@ "schema": { "type": "string" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -6077,11 +6610,49 @@ } }, { - "name": "pageable", + "name": "page", "in": "query", - "required": true, + "description": "Zero-based page index (0..N)", + "required": false, "schema": { - "$ref": "#/components/schemas/Pageable" + "minimum": 0, + "type": "integer", + "default": 0 + } + }, + { + "name": "size", + "in": "query", + "description": "The size of the page to be returned", + "required": false, + "schema": { + "minimum": 1, + "type": "integer", + "default": 50 + } + }, + { + "name": "sort", + "in": "query", + "description": "Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [ + "createdAt,DESC" + ] + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } ], @@ -6214,6 +6785,26 @@ ], "summary": "Create an assigned or custom email testing domain", "operationId": "createEmailDomain", + "parameters": [ + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "requestBody": { "content": { "application/json": { @@ -6362,6 +6953,15 @@ "schema": { "type": "string" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -6501,6 +7101,15 @@ "schema": { "type": "string" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -6633,6 +7242,15 @@ "schema": { "type": "string" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -6792,6 +7410,15 @@ "schema": { "type": "string" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -6971,6 +7598,15 @@ "format": "int32", "default": 50 } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -7121,6 +7757,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -7269,6 +7914,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -7421,156 +8075,15 @@ "type": "string", "format": "uuid" } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/SingleValueResponseSignedDownload" - } - } - } - }, - "400": { - "description": "Bad request — the payload failed validation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } }, - "401": { - "description": "Unauthorized — missing or invalid credentials", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "402": { - "description": "Payment required — the plan or quota does not allow this", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden — the actor lacks permission for this resource", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not found — the requested resource does not exist", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "409": { - "description": "Conflict — the request collides with current resource state", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "410": { - "description": "Gone — the resource is no longer available", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "429": { - "description": "Too many requests — retry after the window resets", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal server error — see the message field for details", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "502": { - "description": "Bad gateway — an upstream provider returned an error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "503": { - "description": "Service unavailable — try again shortly", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/api/v1/email/domains/{domain}/messages/{messageId}/links": { - "get": { - "tags": [ - "Email Testing" - ], - "summary": "Extracted links on the message", - "operationId": "listEmailMessageLinks", - "parameters": [ { - "name": "domain", - "in": "path", - "required": true, + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { "type": "string" } - }, - { - "name": "messageId", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], "responses": { @@ -7579,7 +8092,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/TableValueResultInboundEmailLink" + "$ref": "#/components/schemas/SingleValueResponseSignedDownload" } } } @@ -7697,13 +8210,13 @@ } } }, - "/api/v1/email/domains/{domain}/messages/{messageId}/otp": { + "/api/v1/email/domains/{domain}/messages/{messageId}/links": { "get": { "tags": [ "Email Testing" ], - "summary": "Extracted one-time codes on the message", - "operationId": "listEmailMessageOtp", + "summary": "Extracted links on the message", + "operationId": "listEmailMessageLinks", "parameters": [ { "name": "domain", @@ -7721,6 +8234,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -7729,7 +8251,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/TableValueResultInboundOtpCode" + "$ref": "#/components/schemas/TableValueResultInboundEmailLink" } } } @@ -7847,13 +8369,13 @@ } } }, - "/api/v1/email/domains/{domain}/messages/{messageId}/raw": { + "/api/v1/email/domains/{domain}/messages/{messageId}/otp": { "get": { "tags": [ "Email Testing" ], - "summary": "Signed URL for the raw RFC822 object", - "operationId": "getEmailMessageRaw", + "summary": "Extracted one-time codes on the message", + "operationId": "listEmailMessageOtp", "parameters": [ { "name": "domain", @@ -7871,6 +8393,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -7879,7 +8410,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseSignedDownload" + "$ref": "#/components/schemas/TableValueResultInboundOtpCode" } } } @@ -7997,13 +8528,13 @@ } } }, - "/api/v1/email/domains/{domain}/messages/{messageId}/source": { + "/api/v1/email/domains/{domain}/messages/{messageId}/raw": { "get": { "tags": [ "Email Testing" ], - "summary": "Original message source as text", - "operationId": "getEmailMessageSource", + "summary": "Signed URL for the raw RFC822 object", + "operationId": "getEmailMessageRaw", "parameters": [ { "name": "domain", @@ -8021,6 +8552,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -8029,7 +8569,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseEmailMessageSourceDto" + "$ref": "#/components/schemas/SingleValueResponseSignedDownload" } } } @@ -8147,13 +8687,13 @@ } } }, - "/api/v1/email/domains/{domain}/messages/inject": { - "post": { + "/api/v1/email/domains/{domain}/messages/{messageId}/source": { + "get": { "tags": [ "Email Testing" ], - "summary": "Inject a JSON message onto the same durable path as SMTP", - "operationId": "injectEmailMessage", + "summary": "Original message source as text", + "operationId": "getEmailMessageSource", "parameters": [ { "name": "domain", @@ -8162,25 +8702,33 @@ "schema": { "type": "string" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InjectEmailMessageRequest" - } + }, + { + "name": "messageId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { - "202": { - "description": "Accepted", + "200": { + "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseInjectEmailMessageResponse" + "$ref": "#/components/schemas/SingleValueResponseEmailMessageSourceDto" } } } @@ -8298,13 +8846,13 @@ } } }, - "/api/v1/email/domains/{domain}/verify": { + "/api/v1/email/domains/{domain}/messages/inject": { "post": { "tags": [ "Email Testing" ], - "summary": "Re-check TXT and MX for a custom domain", - "operationId": "verifyEmailDomain", + "summary": "Inject a JSON message onto the same durable path as SMTP", + "operationId": "injectEmailMessage", "parameters": [ { "name": "domain", @@ -8313,161 +8861,43 @@ "schema": { "type": "string" } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/SingleValueResponseEmailDomainDto" - } - } - } - }, - "400": { - "description": "Bad request — the payload failed validation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized — missing or invalid credentials", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } }, - "402": { - "description": "Payment required — the plan or quota does not allow this", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden — the actor lacks permission for this resource", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not found — the requested resource does not exist", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "409": { - "description": "Conflict — the request collides with current resource state", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "410": { - "description": "Gone — the resource is no longer available", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "429": { - "description": "Too many requests — retry after the window resets", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal server error — see the message field for details", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "502": { - "description": "Bad gateway — an upstream provider returned an error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" } }, - "503": { - "description": "Service unavailable — try again shortly", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/api/v1/email/domains/activity": { - "get": { - "tags": [ - "Email Testing" - ], - "summary": "Last-24h received-message activity for email domains", - "operationId": "listEmailDomainActivity", - "parameters": [ { - "name": "domainIds", - "in": "query", - "description": "Comma-separated domain ids (1–100)", + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", "required": false, "schema": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } + "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InjectEmailMessageRequest" + } + } + }, + "required": true + }, "responses": { - "200": { - "description": "OK", + "202": { + "description": "Accepted", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseListEmailDomainActivityDto" + "$ref": "#/components/schemas/SingleValueResponseInjectEmailMessageResponse" } } } @@ -8585,30 +9015,48 @@ } } }, - "/api/v1/email/wait": { + "/api/v1/email/domains/{domain}/verify": { "post": { "tags": [ "Email Testing" ], - "summary": "Wait for the oldest matching captured email at a full address", - "operationId": "waitForEmail", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WaitEmailMessageRequest" - } + "summary": "Re-check TXT and MX for a custom domain", + "operationId": "verifyEmailDomain", + "parameters": [ + { + "name": "domain", + "in": "path", + "required": true, + "schema": { + "type": "string" } }, - "required": true - }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/WaitEmailMessageResponse" + "$ref": "#/components/schemas/SingleValueResponseEmailDomainDto" } } } @@ -8663,16 +9111,6 @@ } } }, - "408": { - "description": "Wait timed out — no match arrived (code WAIT_TIMEOUT)", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "409": { "description": "Conflict — the request collides with current resource state", "content": { @@ -8736,151 +9174,44 @@ } } }, - "/api/v1/entitlements": { + "/api/v1/email/domains/activity": { "get": { "tags": [ - "Entitlements" + "Email Testing" ], - "summary": "Get plan limits and this period's usage for the caller's organization", - "operationId": "getCurrentEntitlements", - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/SingleValueResponseEntitlementResponse" - } - } - } - }, - "400": { - "description": "Bad request — the payload failed validation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized — missing or invalid credentials", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "402": { - "description": "Payment required — the plan or quota does not allow this", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden — the actor lacks permission for this resource", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not found — the requested resource does not exist", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "409": { - "description": "Conflict — the request collides with current resource state", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "410": { - "description": "Gone — the resource is no longer available", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "429": { - "description": "Too many requests — retry after the window resets", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal server error — see the message field for details", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "502": { - "description": "Bad gateway — an upstream provider returned an error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "summary": "Last-24h received-message activity for email domains", + "operationId": "listEmailDomainActivity", + "parameters": [ + { + "name": "domainIds", + "in": "query", + "description": "Comma-separated domain ids (1–100)", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" } } }, - "503": { - "description": "Service unavailable — try again shortly", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } - } - } - }, - "/api/v1/environments": { - "get": { - "tags": [ - "Environments" ], - "summary": "List environments", - "operationId": "list_13", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/TableValueResultEnvironmentDto" + "$ref": "#/components/schemas/SingleValueResponseListEmailDomainActivityDto" } } } @@ -8996,30 +9327,52 @@ } } } - }, + } + }, + "/api/v1/email/wait": { "post": { "tags": [ - "Environments" + "Email Testing" + ], + "summary": "Wait for the oldest matching captured email at a full address", + "operationId": "waitForEmail", + "parameters": [ + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } ], - "summary": "Create environment", - "operationId": "create_14", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateEnvironmentRequest" + "$ref": "#/components/schemas/WaitEmailMessageRequest" } } }, "required": true }, "responses": { - "201": { - "description": "Created", + "200": { + "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseEnvironmentDto" + "$ref": "#/components/schemas/WaitEmailMessageResponse" } } } @@ -9074,6 +9427,16 @@ } } }, + "408": { + "description": "Wait timed out — no match arrived (code WAIT_TIMEOUT)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "409": { "description": "Conflict — the request collides with current resource state", "content": { @@ -9137,18 +9500,19 @@ } } }, - "/api/v1/environments/{slug}": { + "/api/v1/entitlements": { "get": { "tags": [ - "Environments" + "Entitlements" ], - "summary": "Get environment by slug", - "operationId": "get_7", + "summary": "Get plan limits and this period's usage for the caller's organization", + "operationId": "getCurrentEntitlements", "parameters": [ { - "name": "slug", - "in": "path", - "required": true, + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { "type": "string" } @@ -9160,7 +9524,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseEnvironmentDto" + "$ref": "#/components/schemas/SingleValueResponseEntitlementResponse" } } } @@ -9276,40 +9640,33 @@ } } } - }, - "put": { + } + }, + "/api/v1/environments": { + "get": { "tags": [ "Environments" ], - "summary": "Update environment", - "operationId": "update_13", + "summary": "List environments", + "operationId": "list_13", "parameters": [ { - "name": "slug", - "in": "path", - "required": true, + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateEnvironmentRequest" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseEnvironmentDto" + "$ref": "#/components/schemas/TableValueResultEnvironmentDto" } } } @@ -9426,25 +9783,52 @@ } } }, - "delete": { + "post": { "tags": [ "Environments" ], - "summary": "Delete environment", - "operationId": "delete_9", + "summary": "Create environment", + "operationId": "create_14", "parameters": [ { - "name": "slug", - "in": "path", - "required": true, + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateEnvironmentRequest" + } + } + }, + "required": true + }, "responses": { - "204": { - "description": "No Content" + "201": { + "description": "Created", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/SingleValueResponseEnvironmentDto" + } + } + } }, "400": { "description": "Bad request — the payload failed validation", @@ -9559,22 +9943,29 @@ } } }, - "/api/v1/forensics/incidents/{id}/timeline": { + "/api/v1/environments/{slug}": { "get": { "tags": [ - "Forensics" + "Environments" ], - "summary": "Full forensic timeline for an incident", - "description": "Returns every state-machine transition for this incident plus the rule evaluations that caused each transition, plus the policy snapshot that triggered confirmation. Correlate evaluations to transitions via evaluation.triggeringTransitionId == transition.id.", - "operationId": "getTimeline", + "summary": "Get environment by slug", + "operationId": "get_7", "parameters": [ { - "name": "id", + "name": "slug", "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } ], @@ -9584,7 +9975,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseIncidentTimelineDto" + "$ref": "#/components/schemas/SingleValueResponseEnvironmentDto" } } } @@ -9700,87 +10091,193 @@ } } } - } - }, - "/api/v1/forensics/monitors/{id}/rule-evaluations": { - "get": { + }, + "put": { "tags": [ - "Forensics" + "Environments" ], - "summary": "Paged list of rule evaluations for a monitor", - "description": "Filter by ruleType (e.g. consecutive_failures), region, onlyMatched=true to narrow to firing evaluations. Time window defaults to the last 7 days when from/to are omitted; windows wider than 30 days are clamped.", - "operationId": "listMonitorRuleEvaluations", + "summary": "Update environment", + "operationId": "update_13", "parameters": [ { - "name": "id", + "name": "slug", "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } }, { - "name": "ruleType", - "in": "query", + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", "required": false, "schema": { "type": "string" } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateEnvironmentRequest" + } + } }, - { - "name": "region", - "in": "query", - "required": false, - "schema": { - "type": "string" + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/SingleValueResponseEnvironmentDto" + } + } } }, - { - "name": "onlyMatched", - "in": "query", - "required": false, - "schema": { - "type": "boolean" + "400": { + "description": "Bad request — the payload failed validation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } } }, - { - "name": "from", - "in": "query", - "required": false, - "schema": { - "type": "string", - "format": "date-time" + "401": { + "description": "Unauthorized — missing or invalid credentials", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "402": { + "description": "Payment required — the plan or quota does not allow this", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden — the actor lacks permission for this resource", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } } }, + "404": { + "description": "Not found — the requested resource does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict — the request collides with current resource state", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "410": { + "description": "Gone — the resource is no longer available", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "429": { + "description": "Too many requests — retry after the window resets", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error — see the message field for details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "502": { + "description": "Bad gateway — an upstream provider returned an error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "Service unavailable — try again shortly", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Environments" + ], + "summary": "Delete environment", + "operationId": "delete_9", + "parameters": [ { - "name": "to", - "in": "query", - "required": false, + "name": "slug", + "in": "path", + "required": true, "schema": { - "type": "string", - "format": "date-time" + "type": "string" } }, { - "name": "pageable", - "in": "query", - "required": true, + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { - "$ref": "#/components/schemas/Pageable" + "type": "string" } } ], "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/TableValueResultRuleEvaluationDto" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad request — the payload failed validation", @@ -9895,14 +10392,14 @@ } } }, - "/api/v1/forensics/monitors/{id}/transitions": { + "/api/v1/forensics/incidents/{id}/timeline": { "get": { "tags": [ "Forensics" ], - "summary": "Paged list of state transitions for a monitor", - "description": "Time window defaults to the last 30 days when from/to are omitted; windows wider than 90 days are clamped.", - "operationId": "listMonitorTransitions", + "summary": "Full forensic timeline for an incident", + "description": "Returns every state-machine transition for this incident plus the rule evaluations that caused each transition, plus the policy snapshot that triggered confirmation. Correlate evaluations to transitions via evaluation.triggeringTransitionId == transition.id.", + "operationId": "getTimeline", "parameters": [ { "name": "id", @@ -9914,29 +10411,12 @@ } }, { - "name": "from", - "in": "query", - "required": false, - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "name": "to", - "in": "query", + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", "required": false, "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "name": "pageable", - "in": "query", - "required": true, - "schema": { - "$ref": "#/components/schemas/Pageable" + "type": "string" } } ], @@ -9946,7 +10426,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/TableValueResultIncidentStateTransitionDto" + "$ref": "#/components/schemas/SingleValueResponseIncidentTimelineDto" } } } @@ -10064,19 +10544,105 @@ } } }, - "/api/v1/forensics/policy-snapshots/{hashHex}": { + "/api/v1/forensics/monitors/{id}/rule-evaluations": { "get": { "tags": [ "Forensics" ], - "summary": "Fetch a policy snapshot by its content hash", - "description": "Hash is SHA-256 over canonical policy JSON, hex-encoded. Access is gated: caller's org must have evaluated against this hash at least once.", - "operationId": "getPolicySnapshot", + "summary": "Paged list of rule evaluations for a monitor", + "description": "Filter by ruleType (e.g. consecutive_failures), region, onlyMatched=true to narrow to firing evaluations. Time window defaults to the last 7 days when from/to are omitted; windows wider than 30 days are clamped.", + "operationId": "listMonitorRuleEvaluations", "parameters": [ { - "name": "hashHex", + "name": "id", "in": "path", "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "ruleType", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "region", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "onlyMatched", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "from", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "to", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "page", + "in": "query", + "description": "Zero-based page index (0..N)", + "required": false, + "schema": { + "minimum": 0, + "type": "integer", + "default": 0 + } + }, + { + "name": "size", + "in": "query", + "description": "The size of the page to be returned", + "required": false, + "schema": { + "minimum": 1, + "type": "integer", + "default": 20 + } + }, + { + "name": "sort", + "in": "query", + "description": "Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { "type": "string" } @@ -10088,7 +10654,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponsePolicySnapshotDto" + "$ref": "#/components/schemas/TableValueResultRuleEvaluationDto" } } } @@ -10206,23 +10772,84 @@ } } }, - "/api/v1/forensics/traces/{checkId}": { + "/api/v1/forensics/monitors/{id}/transitions": { "get": { "tags": [ "Forensics" ], - "summary": "Replay a single check execution", - "description": "Returns every rule evaluation and state transition emitted for this scheduler-minted check_id (V92), plus the policy snapshot that governed them.", - "operationId": "getTrace", + "summary": "Paged list of state transitions for a monitor", + "description": "Time window defaults to the last 30 days when from/to are omitted; windows wider than 90 days are clamped.", + "operationId": "listMonitorTransitions", "parameters": [ { - "name": "checkId", + "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "name": "from", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "to", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "page", + "in": "query", + "description": "Zero-based page index (0..N)", + "required": false, + "schema": { + "minimum": 0, + "type": "integer", + "default": 0 + } + }, + { + "name": "size", + "in": "query", + "description": "The size of the page to be returned", + "required": false, + "schema": { + "minimum": 1, + "type": "integer", + "default": 20 + } + }, + { + "name": "sort", + "in": "query", + "description": "Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -10231,7 +10858,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseCheckTraceDto" + "$ref": "#/components/schemas/TableValueResultIncidentStateTransitionDto" } } } @@ -10349,23 +10976,31 @@ } } }, - "/api/v1/heartbeat/{token}": { + "/api/v1/forensics/policy-snapshots/{hashHex}": { "get": { "tags": [ - "Heartbeat" + "Forensics" ], - "summary": "Record a heartbeat ping (GET)", - "description": "Called by external systems (cron jobs, scheduled tasks) to signal liveness. Always returns 200 OK.", - "operationId": "pingGet", + "summary": "Fetch a policy snapshot by its content hash", + "description": "Hash is SHA-256 over canonical policy JSON, hex-encoded. Access is gated: caller's org must have evaluated against this hash at least once.", + "operationId": "getPolicySnapshot", "parameters": [ { - "name": "token", + "name": "hashHex", "in": "path", - "description": "Ping endpoint token for the heartbeat monitor", "required": true, "schema": { "type": "string" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -10374,7 +11009,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/HeartbeatPingResponse" + "$ref": "#/components/schemas/SingleValueResponsePolicySnapshotDto" } } } @@ -10490,51 +11125,43 @@ } } } - }, - "post": { + } + }, + "/api/v1/forensics/traces/{checkId}": { + "get": { "tags": [ - "Heartbeat" + "Forensics" ], - "summary": "Record a heartbeat ping (POST)", - "description": "Called by external systems to signal liveness with an optional JSON payload. The payload can be inspected by heartbeat_payload_contains assertions. Always returns 200 OK.", - "operationId": "pingPost", + "summary": "Replay a single check execution", + "description": "Returns every rule evaluation and state transition emitted for this scheduler-minted check_id (V92), plus the policy snapshot that governed them.", + "operationId": "getTrace", "parameters": [ { - "name": "token", + "name": "checkId", "in": "path", - "description": "Ping endpoint token for the heartbeat monitor", "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "string" - } - }, - "text/plain": { - "schema": { - "type": "string" - } - }, - "*/*": { - "schema": { - "type": "string" - } - } - } - }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/HeartbeatPingResponse" + "$ref": "#/components/schemas/SingleValueResponseCheckTraceDto" } } } @@ -10652,20 +11279,31 @@ } } }, - "/api/v1/incidents": { + "/api/v1/heartbeat/{token}": { "get": { "tags": [ - "Incidents" + "Heartbeat" ], - "summary": "List incidents for the authenticated org", - "operationId": "list_12", + "summary": "Record a heartbeat ping (GET)", + "description": "Called by external systems (cron jobs, scheduled tasks) to signal liveness. Always returns 200 OK.", + "operationId": "pingGet", "parameters": [ { - "name": "params", - "in": "query", + "name": "token", + "in": "path", + "description": "Ping endpoint token for the heartbeat monitor", "required": true, "schema": { - "$ref": "#/components/schemas/IncidentFilterParams" + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } ], @@ -10675,7 +11313,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/TableValueResultIncidentDto" + "$ref": "#/components/schemas/HeartbeatPingResponse" } } } @@ -10794,27 +11432,57 @@ }, "post": { "tags": [ - "Incidents" + "Heartbeat" + ], + "summary": "Record a heartbeat ping (POST)", + "description": "Called by external systems to signal liveness with an optional JSON payload. The payload can be inspected by heartbeat_payload_contains assertions. Always returns 200 OK.", + "operationId": "pingPost", + "parameters": [ + { + "name": "token", + "in": "path", + "description": "Ping endpoint token for the heartbeat monitor", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } ], - "summary": "Create a manual incident", - "operationId": "create_13", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateManualIncidentRequest" + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "*/*": { + "schema": { + "type": "string" } } - }, - "required": true + } }, "responses": { - "201": { - "description": "Created", + "200": { + "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseIncidentDetailDto" + "$ref": "#/components/schemas/HeartbeatPingResponse" } } } @@ -10932,23 +11600,199 @@ } } }, - "/api/v1/incidents/{id}": { + "/api/v1/incidents": { "get": { "tags": [ "Incidents" ], - "summary": "Get incident details including update timeline", - "description": "Shell payload: incident row, updates, and linked status-page incidents. Trigger enrichment (forensics / check_results) is GET /{id}/trigger so first paint is not blocked on hypertable reads.", - "operationId": "get_9", + "summary": "List incidents for the authenticated org", + "operationId": "list_12", "parameters": [ { - "name": "id", - "in": "path", - "required": true, + "name": "status", + "in": "query", + "description": "Filter by incident lifecycle status; null returns every status", + "required": false, + "schema": { + "type": "string", + "description": "Filter by incident lifecycle status; null returns every status", + "enum": [ + "WATCHING", + "TRIGGERED", + "CONFIRMED", + "RESOLVED" + ] + } + }, + { + "name": "severity", + "in": "query", + "description": "Filter by severity; null returns every severity", + "required": false, + "schema": { + "type": "string", + "description": "Filter by severity; null returns every severity", + "enum": [ + "DOWN", + "DEGRADED", + "MAINTENANCE" + ] + } + }, + { + "name": "source", + "in": "query", + "description": "Filter by where the incident originated (auto, manual, third-party)", + "required": false, + "schema": { + "type": "string", + "description": "Filter by where the incident originated (auto, manual, third-party)", + "enum": [ + "AUTOMATIC", + "MANUAL", + "MONITORS", + "STATUS_DATA", + "RESOURCE_GROUP" + ] + } + }, + { + "name": "monitorId", + "in": "query", + "description": "Only return incidents tied to this monitor ID", + "required": false, + "schema": { + "type": "string", + "description": "Only return incidents tied to this monitor ID", + "format": "uuid" + } + }, + { + "name": "serviceId", + "in": "query", + "description": "Only return incidents tied to this service ID (third-party services)", + "required": false, "schema": { "type": "string", + "description": "Only return incidents tied to this service ID (third-party services)", "format": "uuid" } + }, + { + "name": "resourceGroupId", + "in": "query", + "description": "Only return incidents owned by this resource group (incidents.resource_group_id)", + "required": false, + "schema": { + "type": "string", + "description": "Only return incidents owned by this resource group (incidents.resource_group_id)", + "format": "uuid" + } + }, + { + "name": "tagId", + "in": "query", + "description": "Only return incidents whose monitor carries this tag", + "required": false, + "schema": { + "type": "string", + "description": "Only return incidents whose monitor carries this tag", + "format": "uuid" + } + }, + { + "name": "environmentId", + "in": "query", + "description": "Only return incidents whose monitor lives in this environment", + "required": false, + "schema": { + "type": "string", + "description": "Only return incidents whose monitor lives in this environment", + "format": "uuid" + } + }, + { + "name": "excludeId", + "in": "query", + "description": "Exclude this incident ID from results (related-incident lists)", + "required": false, + "schema": { + "type": "string", + "description": "Exclude this incident ID from results (related-incident lists)", + "format": "uuid" + } + }, + { + "name": "startedFrom", + "in": "query", + "description": "Earliest startedAt to include (inclusive, ISO 8601)", + "required": false, + "schema": { + "type": "string", + "description": "Earliest startedAt to include (inclusive, ISO 8601)", + "format": "date-time" + } + }, + { + "name": "startedTo", + "in": "query", + "description": "Latest startedAt to include (inclusive, ISO 8601)", + "required": false, + "schema": { + "type": "string", + "description": "Latest startedAt to include (inclusive, ISO 8601)", + "format": "date-time" + } + }, + { + "name": "search", + "in": "query", + "description": "Case-insensitive substring match on title or incident ID", + "required": false, + "schema": { + "maxLength": 200, + "minLength": 0, + "type": "string", + "description": "Case-insensitive substring match on title or incident ID" + } + }, + { + "name": "page", + "in": "query", + "description": "Zero-based page index (default: 0)", + "required": false, + "schema": { + "minimum": 0, + "type": "integer", + "description": "Zero-based page index (default: 0)", + "format": "int32", + "example": 0 + }, + "example": 0 + }, + { + "name": "size", + "in": "query", + "description": "Number of incidents per page (1–200, default: 10)", + "required": false, + "schema": { + "maximum": 200, + "minimum": 1, + "type": "integer", + "description": "Number of incidents per page (1–200, default: 10)", + "format": "int32", + "example": 10 + }, + "example": 10 + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -10957,7 +11801,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseIncidentDetailDto" + "$ref": "#/components/schemas/TableValueResultIncidentDto" } } } @@ -11074,20 +11918,29 @@ } } }, - "patch": { + "post": { "tags": [ "Incidents" ], - "summary": "Update incident title and/or severity", - "operationId": "update_16", + "summary": "Create a manual incident", + "operationId": "create_13", "parameters": [ { - "name": "id", - "in": "path", - "required": true, + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, "schema": { - "type": "string", - "format": "uuid" + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } ], @@ -11095,15 +11948,15 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateIncidentRequest" + "$ref": "#/components/schemas/CreateManualIncidentRequest" } } }, "required": true }, "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created", "content": { "*/*": { "schema": { @@ -11225,14 +12078,14 @@ } } }, - "/api/v1/incidents/{id}/acknowledge": { - "post": { + "/api/v1/incidents/{id}": { + "get": { "tags": [ "Incidents" ], - "summary": "Acknowledge all open notification dispatches for an incident", - "description": "Atomically acknowledges every DELIVERED or ESCALATING dispatch for the incident. Already-acknowledged and non-acknowledgeable dispatches are returned in skipped (not errors). MEMBER+.", - "operationId": "acknowledgeAll", + "summary": "Get incident details including update timeline", + "description": "Shell payload: incident row, updates, and linked status-page incidents. Trigger enrichment (forensics / check_results) is GET /{id}/trigger so first paint is not blocked on hypertable reads.", + "operationId": "get_9", "parameters": [ { "name": "id", @@ -11242,6 +12095,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -11250,7 +12112,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseAcknowledgeAllIncidentsResponse" + "$ref": "#/components/schemas/SingleValueResponseIncidentDetailDto" } } } @@ -11366,16 +12228,13 @@ } } } - } - }, - "/api/v1/incidents/{id}/events": { - "get": { + }, + "patch": { "tags": [ "Incidents" ], - "summary": "List merged activity events for an incident", - "description": "Cursor-paginated unified activity stream merging incident updates, notification dispatches, alert deliveries, forensic state transitions, and linked status-page updates. Ordered by time descending.", - "operationId": "listEvents_1", + "summary": "Update incident title and/or severity", + "operationId": "update_16", "parameters": [ { "name": "id", @@ -11387,31 +12246,32 @@ } }, { - "name": "cursor", - "in": "query", + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", "required": false, "schema": { "type": "string" } - }, - { - "name": "limit", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "format": "int32", - "default": 50 - } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateIncidentRequest" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/CursorPageIncidentActivityEventDto" + "$ref": "#/components/schemas/SingleValueResponseIncidentDetailDto" } } } @@ -11529,14 +12389,14 @@ } } }, - "/api/v1/incidents/{id}/related": { - "get": { + "/api/v1/incidents/{id}/acknowledge": { + "post": { "tags": [ "Incidents" ], - "summary": "List related incidents sharing the same origin", - "description": "Returns same-origin recurrence (monitor, service, or resource group) within the window, excluding the current incident. total is the full count for “Nth outage this month” copy.", - "operationId": "listRelated", + "summary": "Acknowledge all open notification dispatches for an incident", + "description": "Atomically acknowledges every DELIVERED or ESCALATING dispatch for the incident. Already-acknowledged and non-acknowledgeable dispatches are returned in skipped (not errors). MEMBER+.", + "operationId": "acknowledgeAll", "parameters": [ { "name": "id", @@ -11548,23 +12408,21 @@ } }, { - "name": "windowDays", - "in": "query", + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", "required": false, "schema": { - "type": "integer", - "format": "int32", - "default": 30 + "type": "string" } }, { - "name": "limit", - "in": "query", + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", "required": false, "schema": { - "type": "integer", - "format": "int32", - "default": 3 + "type": "string" } } ], @@ -11574,7 +12432,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/RelatedIncidentsResponse" + "$ref": "#/components/schemas/SingleValueResponseAcknowledgeAllIncidentsResponse" } } } @@ -11692,13 +12550,14 @@ } } }, - "/api/v1/incidents/{id}/resolve": { - "post": { + "/api/v1/incidents/{id}/events": { + "get": { "tags": [ "Incidents" ], - "summary": "Resolve an incident", - "operationId": "resolve", + "summary": "List merged activity events for an incident", + "description": "Cursor-paginated unified activity stream merging incident updates, notification dispatches, alert deliveries, forensic state transitions, and linked status-page updates. Ordered by time descending.", + "operationId": "listEvents_1", "parameters": [ { "name": "id", @@ -11708,24 +12567,42 @@ "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ResolveIncidentRequest" - } + }, + { + "name": "cursor", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 50 + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } - }, + ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseIncidentDetailDto" + "$ref": "#/components/schemas/CursorPageIncidentActivityEventDto" } } } @@ -11843,14 +12720,14 @@ } } }, - "/api/v1/incidents/{id}/runs": { + "/api/v1/incidents/{id}/related": { "get": { "tags": [ "Incidents" ], - "summary": "List code-monitor runs during an incident", - "description": "Runs of the incident's monitor from one cycle before it started until it resolved, newest first. Empty for uptime and manual incidents.", - "operationId": "listIncidentRuns", + "summary": "List related incidents sharing the same origin", + "description": "Returns same-origin recurrence (monitor, service, or resource group) within the window, excluding the current incident. total is the full count for “Nth outage this month” copy.", + "operationId": "listRelated", "parameters": [ { "name": "id", @@ -11862,11 +12739,13 @@ } }, { - "name": "cursor", + "name": "windowDays", "in": "query", "required": false, "schema": { - "type": "string" + "type": "integer", + "format": "int32", + "default": 30 } }, { @@ -11876,150 +12755,16 @@ "schema": { "type": "integer", "format": "int32", - "default": 25 - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/CursorPageRunDto" - } - } - } - }, - "400": { - "description": "Bad request — the payload failed validation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized — missing or invalid credentials", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "402": { - "description": "Payment required — the plan or quota does not allow this", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden — the actor lacks permission for this resource", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not found — the requested resource does not exist", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "409": { - "description": "Conflict — the request collides with current resource state", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "410": { - "description": "Gone — the resource is no longer available", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "429": { - "description": "Too many requests — retry after the window resets", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal server error — see the message field for details", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "502": { - "description": "Bad gateway — an upstream provider returned an error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + "default": 3 } }, - "503": { - "description": "Service unavailable — try again shortly", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/api/v1/incidents/{id}/trigger": { - "get": { - "tags": [ - "Incidents" - ], - "summary": "Get incident trigger enrichment", - "description": "Rule type, count/threshold, last error, and first-failed-check time derived from forensics and check_results. Not required to render the incident shell.", - "operationId": "getTrigger", - "parameters": [ { - "name": "id", - "in": "path", - "required": true, + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], @@ -12029,7 +12774,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseIncidentTriggerDto" + "$ref": "#/components/schemas/RelatedIncidentsResponse" } } } @@ -12147,13 +12892,13 @@ } } }, - "/api/v1/incidents/{id}/updates": { + "/api/v1/incidents/{id}/resolve": { "post": { "tags": [ "Incidents" ], - "summary": "Add an update to an incident (optionally change status)", - "operationId": "addUpdate", + "summary": "Resolve an incident", + "operationId": "resolve", "parameters": [ { "name": "id", @@ -12163,21 +12908,38 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AddIncidentUpdateRequest" + "$ref": "#/components/schemas/ResolveIncidentRequest" } } - }, - "required": true + } }, "responses": { - "201": { - "description": "Created", + "200": { + "description": "OK", "content": { "*/*": { "schema": { @@ -12299,20 +13061,47 @@ } } }, - "/api/v1/ingest/{publicToken}": { + "/api/v1/incidents/{id}/runs": { "get": { "tags": [ - "Webhook Testing" + "Incidents" ], - "summary": "Capture an HTTP request sent to an inbox URL", - "description": "The response is that inbox's mock reply", - "operationId": "ingest", + "summary": "List code-monitor runs during an incident", + "description": "Runs of the incident's monitor from one cycle before it started until it resolved, newest first. Empty for uptime and manual incidents.", + "operationId": "listIncidentRuns", "parameters": [ { - "name": "publicToken", + "name": "id", "in": "path", - "description": "Public token that identifies the inbox", "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "cursor", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 25 + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { "type": "string" } @@ -12324,8 +13113,7 @@ "content": { "*/*": { "schema": { - "type": "string", - "format": "byte" + "$ref": "#/components/schemas/CursorPageRunDto" } } } @@ -12441,20 +13229,31 @@ } } } - }, - "put": { + } + }, + "/api/v1/incidents/{id}/trigger": { + "get": { "tags": [ - "Webhook Testing" + "Incidents" ], - "summary": "Capture an HTTP request sent to an inbox URL", - "description": "The response is that inbox's mock reply", - "operationId": "ingest_2", + "summary": "Get incident trigger enrichment", + "description": "Rule type, count/threshold, last error, and first-failed-check time derived from forensics and check_results. Not required to render the incident shell.", + "operationId": "getTrigger", "parameters": [ { - "name": "publicToken", + "name": "id", "in": "path", - "description": "Public token that identifies the inbox", "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { "type": "string" } @@ -12466,8 +13265,7 @@ "content": { "*/*": { "schema": { - "type": "string", - "format": "byte" + "$ref": "#/components/schemas/SingleValueResponseIncidentTriggerDto" } } } @@ -12583,33 +13381,61 @@ } } } - }, + } + }, + "/api/v1/incidents/{id}/updates": { "post": { "tags": [ - "Webhook Testing" + "Incidents" ], - "summary": "Capture an HTTP request sent to an inbox URL", - "description": "The response is that inbox's mock reply", - "operationId": "ingest_1", + "summary": "Add an update to an incident (optionally change status)", + "operationId": "addUpdate", "parameters": [ { - "name": "publicToken", + "name": "id", "in": "path", - "description": "Public token that identifies the inbox", "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AddIncidentUpdateRequest" + } + } + }, + "required": true + }, "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created", "content": { "*/*": { "schema": { - "type": "string", - "format": "byte" + "$ref": "#/components/schemas/SingleValueResponseIncidentDetailDto" } } } @@ -12725,14 +13551,16 @@ } } } - }, - "delete": { + } + }, + "/api/v1/ingest/{publicToken}": { + "get": { "tags": [ "Webhook Testing" ], "summary": "Capture an HTTP request sent to an inbox URL", "description": "The response is that inbox's mock reply", - "operationId": "ingest_3", + "operationId": "ingest", "parameters": [ { "name": "publicToken", @@ -12742,6 +13570,15 @@ "schema": { "type": "string" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -12868,13 +13705,13 @@ } } }, - "options": { + "put": { "tags": [ "Webhook Testing" ], "summary": "Capture an HTTP request sent to an inbox URL", "description": "The response is that inbox's mock reply", - "operationId": "ingest_6", + "operationId": "ingest_2", "parameters": [ { "name": "publicToken", @@ -12884,6 +13721,15 @@ "schema": { "type": "string" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -13010,13 +13856,13 @@ } } }, - "head": { + "post": { "tags": [ "Webhook Testing" ], "summary": "Capture an HTTP request sent to an inbox URL", "description": "The response is that inbox's mock reply", - "operationId": "ingest_5", + "operationId": "ingest_1", "parameters": [ { "name": "publicToken", @@ -13026,6 +13872,15 @@ "schema": { "type": "string" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -13152,13 +14007,13 @@ } } }, - "patch": { + "delete": { "tags": [ "Webhook Testing" ], "summary": "Capture an HTTP request sent to an inbox URL", "description": "The response is that inbox's mock reply", - "operationId": "ingest_4", + "operationId": "ingest_3", "parameters": [ { "name": "publicToken", @@ -13168,6 +14023,15 @@ "schema": { "type": "string" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -13293,23 +14157,42 @@ } } } - } - }, - "/api/v1/integrations": { - "get": { + }, + "options": { "tags": [ - "Integrations" + "Webhook Testing" + ], + "summary": "Capture an HTTP request sent to an inbox URL", + "description": "The response is that inbox's mock reply", + "operationId": "ingest_6", + "parameters": [ + { + "name": "publicToken", + "in": "path", + "description": "Public token that identifies the inbox", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } ], - "summary": "List all supported integration types", - "description": "Returns the full static catalog of supported alert channel integration types with their metadata and config field schemas. Used by the frontend to dynamically render the 'Add Alert Channel' form.", - "operationId": "list_22", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/TableValueResultIntegrationDto" + "type": "string", + "format": "byte" } } } @@ -13425,23 +14308,42 @@ } } } - } - }, - "/api/v1/integrations/voice-languages": { - "get": { + }, + "head": { "tags": [ - "Integrations" + "Webhook Testing" + ], + "summary": "Capture an HTTP request sent to an inbox URL", + "description": "The response is that inbox's mock reply", + "operationId": "ingest_5", + "parameters": [ + { + "name": "publicToken", + "in": "path", + "description": "Public token that identifies the inbox", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } ], - "summary": "List supported voice languages for phone call alerts", - "description": "Returns BCP-47 locale codes and human-readable labels for all TTS languages supported by the phone call alert channel.", - "operationId": "listVoiceLanguages", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/TableValueResultVoiceLanguageDto" + "type": "string", + "format": "byte" } } } @@ -13557,22 +14459,42 @@ } } } - } - }, - "/api/v1/invites": { - "get": { + }, + "patch": { "tags": [ - "Invites" + "Webhook Testing" + ], + "summary": "Capture an HTTP request sent to an inbox URL", + "description": "The response is that inbox's mock reply", + "operationId": "ingest_4", + "parameters": [ + { + "name": "publicToken", + "in": "path", + "description": "Public token that identifies the inbox", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } ], - "summary": "List invites", - "operationId": "list_11", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/TableValueResultInviteDto" + "type": "string", + "format": "byte" } } } @@ -13688,30 +14610,34 @@ } } } - }, - "post": { + } + }, + "/api/v1/integrations": { + "get": { "tags": [ - "Invites" + "Integrations" ], - "summary": "Create invite", - "operationId": "create_12", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateInviteRequest" - } + "summary": "List all supported integration types", + "description": "Returns the full static catalog of supported alert channel integration types with their metadata and config field schemas. Used by the frontend to dynamically render the 'Add Alert Channel' form.", + "operationId": "list_22", + "parameters": [ + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } - }, - "required": true - }, + } + ], "responses": { - "201": { - "description": "Created", + "200": { + "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseInviteDto" + "$ref": "#/components/schemas/TableValueResultIntegrationDto" } } } @@ -13829,21 +14755,22 @@ } } }, - "/api/v1/invites/{inviteId}/resend": { - "post": { + "/api/v1/integrations/voice-languages": { + "get": { "tags": [ - "Invites" + "Integrations" ], - "summary": "Resend invite", - "operationId": "resend_1", + "summary": "List supported voice languages for phone call alerts", + "description": "Returns BCP-47 locale codes and human-readable labels for all TTS languages supported by the phone call alert channel.", + "operationId": "listVoiceLanguages", "parameters": [ { - "name": "inviteId", - "in": "path", - "required": true, + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { - "type": "integer", - "format": "int32" + "type": "string" } } ], @@ -13853,7 +14780,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseInviteDto" + "$ref": "#/components/schemas/TableValueResultVoiceLanguageDto" } } } @@ -13971,27 +14898,34 @@ } } }, - "/api/v1/invites/{inviteId}/revoke": { - "post": { + "/api/v1/invites": { + "get": { "tags": [ "Invites" ], - "summary": "Revoke invite", - "operationId": "revoke", + "summary": "List invites", + "operationId": "list_11", "parameters": [ { - "name": "inviteId", - "in": "path", - "required": true, + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { - "type": "integer", - "format": "int32" + "type": "string" } } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/TableValueResultInviteDto" + } + } + } }, "400": { "description": "Bad request — the payload failed validation", @@ -14104,44 +15038,50 @@ } } } - } - }, - "/api/v1/maintenance-windows": { - "get": { + }, + "post": { "tags": [ - "Maintenance Windows" + "Invites" ], - "summary": "List maintenance windows for the authenticated org", - "description": "Returns maintenance windows for the caller's organisation. Optionally filter by monitor_id, and/or by status: 'active' (currently in window) or 'upcoming' (starts in the future).", - "operationId": "list_10", + "summary": "Create invite", + "operationId": "create_12", "parameters": [ { - "name": "monitorId", - "in": "query", - "description": "Filter by monitor UUID", + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", "required": false, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } }, { - "name": "filter", - "in": "query", - "description": "Filter by status: 'active' or 'upcoming'", + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", "required": false, "schema": { "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateInviteRequest" + } + } + }, + "required": true + }, "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/TableValueResultMaintenanceWindowDto" + "$ref": "#/components/schemas/SingleValueResponseInviteDto" } } } @@ -14257,31 +15197,51 @@ } } } - }, + } + }, + "/api/v1/invites/{inviteId}/resend": { "post": { "tags": [ - "Maintenance Windows" + "Invites" ], - "summary": "Create a maintenance window", - "description": "Creates a new maintenance window. Set monitorId to null to create an org-wide window that suppresses alerts for all monitors.", - "operationId": "create_11", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateMaintenanceWindowRequest" - } + "summary": "Resend invite", + "operationId": "resend_1", + "parameters": [ + { + "name": "inviteId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" } }, - "required": true - }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { - "201": { - "description": "Created", + "200": { + "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseMaintenanceWindowDto" + "$ref": "#/components/schemas/SingleValueResponseInviteDto" } } } @@ -14399,34 +15359,45 @@ } } }, - "/api/v1/maintenance-windows/{id}": { - "get": { + "/api/v1/invites/{inviteId}/revoke": { + "post": { "tags": [ - "Maintenance Windows" + "Invites" ], - "summary": "Get a single maintenance window by ID", - "operationId": "getById_2", + "summary": "Revoke invite", + "operationId": "revoke", "parameters": [ { - "name": "id", + "name": "inviteId", "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "integer", + "format": "int32" + } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } ], "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/SingleValueResponseMaintenanceWindowDto" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad request — the payload failed validation", @@ -14539,41 +15510,53 @@ } } } - }, - "put": { + } + }, + "/api/v1/maintenance-windows": { + "get": { "tags": [ "Maintenance Windows" ], - "summary": "Update a maintenance window", - "operationId": "update_12", + "summary": "List maintenance windows for the authenticated org", + "description": "Returns maintenance windows for the caller's organisation. Optionally filter by monitor_id, and/or by status: 'active' (currently in window) or 'upcoming' (starts in the future).", + "operationId": "list_10", "parameters": [ { - "name": "id", - "in": "path", - "required": true, + "name": "monitorId", + "in": "query", + "description": "Filter by monitor UUID", + "required": false, "schema": { "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateMaintenanceWindowRequest" - } + }, + { + "name": "filter", + "in": "query", + "description": "Filter by status: 'active' or 'upcoming'", + "required": false, + "schema": { + "type": "string" } }, - "required": true - }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseMaintenanceWindowDto" + "$ref": "#/components/schemas/TableValueResultMaintenanceWindowDto" } } } @@ -14690,26 +15673,53 @@ } } }, - "delete": { + "post": { "tags": [ "Maintenance Windows" ], - "summary": "Delete a maintenance window", - "operationId": "delete_8", + "summary": "Create a maintenance window", + "description": "Creates a new maintenance window. Set monitorId to null to create an org-wide window that suppresses alerts for all monitors.", + "operationId": "create_11", "parameters": [ { - "name": "id", - "in": "path", - "required": true, + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, "schema": { - "type": "string", - "format": "uuid" + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateMaintenanceWindowRequest" + } + } + }, + "required": true + }, "responses": { - "204": { - "description": "No Content" + "201": { + "description": "Created", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/SingleValueResponseMaintenanceWindowDto" + } + } + } }, "400": { "description": "Bad request — the payload failed validation", @@ -14824,20 +15834,30 @@ } } }, - "/api/v1/members": { + "/api/v1/maintenance-windows/{id}": { "get": { "tags": [ - "Members" + "Maintenance Windows" ], - "summary": "List organization members", - "operationId": "list_21", + "summary": "Get a single maintenance window by ID", + "operationId": "getById_2", "parameters": [ { - "name": "pageable", - "in": "query", + "name": "id", + "in": "path", "required": true, "schema": { - "$ref": "#/components/schemas/Pageable" + "type": "string", + "format": "uuid" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } ], @@ -14847,7 +15867,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/TableValueResultMemberDto" + "$ref": "#/components/schemas/SingleValueResponseMaintenanceWindowDto" } } } @@ -14963,29 +15983,53 @@ } } } - } - }, - "/api/v1/members/{userId}": { - "delete": { + }, + "put": { "tags": [ - "Members" + "Maintenance Windows" ], - "summary": "Remove member from organization", - "operationId": "remove_2", + "summary": "Update a maintenance window", + "operationId": "update_12", "parameters": [ { - "name": "userId", + "name": "id", "in": "path", "required": true, "schema": { - "type": "integer", - "format": "int32" + "type": "string", + "format": "uuid" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateMaintenanceWindowRequest" + } + } + }, + "required": true + }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/SingleValueResponseMaintenanceWindowDto" + } + } + } }, "400": { "description": "Bad request — the payload failed validation", @@ -15098,36 +16142,33 @@ } } } - } - }, - "/api/v1/members/{userId}/role": { - "put": { + }, + "delete": { "tags": [ - "Members" + "Maintenance Windows" ], - "summary": "Change member role", - "operationId": "changeRole", + "summary": "Delete a maintenance window", + "operationId": "delete_8", "parameters": [ { - "name": "userId", + "name": "id", "in": "path", "required": true, "schema": { - "type": "integer", - "format": "int32" + "type": "string", + "format": "uuid" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChangeRoleRequest" - } - } - }, - "required": true - }, "responses": { "204": { "description": "No Content" @@ -15245,37 +16286,520 @@ } } }, - "/api/v1/members/{userId}/status": { - "put": { + "/api/v1/members": { + "get": { "tags": [ "Members" ], - "summary": "Change member status", - "operationId": "changeStatus", + "summary": "List organization members", + "operationId": "list_21", "parameters": [ { - "name": "userId", - "in": "path", - "required": true, + "name": "page", + "in": "query", + "description": "Zero-based page index (0..N)", + "required": false, "schema": { + "minimum": 0, "type": "integer", - "format": "int32" + "default": 0 } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChangeStatusRequest" + }, + { + "name": "size", + "in": "query", + "description": "The size of the page to be returned", + "required": false, + "schema": { + "minimum": 1, + "type": "integer", + "default": 50 + } + }, + { + "name": "sort", + "in": "query", + "description": "Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" } } }, - "required": true - }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/TableValueResultMemberDto" + } + } + } + }, + "400": { + "description": "Bad request — the payload failed validation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized — missing or invalid credentials", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "402": { + "description": "Payment required — the plan or quota does not allow this", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden — the actor lacks permission for this resource", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not found — the requested resource does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict — the request collides with current resource state", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "410": { + "description": "Gone — the resource is no longer available", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "429": { + "description": "Too many requests — retry after the window resets", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error — see the message field for details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "502": { + "description": "Bad gateway — an upstream provider returned an error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "Service unavailable — try again shortly", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/members/{userId}": { + "delete": { + "tags": [ + "Members" + ], + "summary": "Remove member from organization", + "operationId": "remove_2", + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad request — the payload failed validation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized — missing or invalid credentials", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "402": { + "description": "Payment required — the plan or quota does not allow this", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden — the actor lacks permission for this resource", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not found — the requested resource does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict — the request collides with current resource state", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "410": { + "description": "Gone — the resource is no longer available", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "429": { + "description": "Too many requests — retry after the window resets", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error — see the message field for details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "502": { + "description": "Bad gateway — an upstream provider returned an error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "Service unavailable — try again shortly", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/members/{userId}/role": { + "put": { + "tags": [ + "Members" + ], + "summary": "Change member role", + "operationId": "changeRole", + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChangeRoleRequest" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad request — the payload failed validation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized — missing or invalid credentials", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "402": { + "description": "Payment required — the plan or quota does not allow this", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden — the actor lacks permission for this resource", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not found — the requested resource does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict — the request collides with current resource state", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "410": { + "description": "Gone — the resource is no longer available", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "429": { + "description": "Too many requests — retry after the window resets", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error — see the message field for details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "502": { + "description": "Bad gateway — an upstream provider returned an error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "Service unavailable — try again shortly", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/members/{userId}/status": { + "put": { + "tags": [ + "Members" + ], + "summary": "Change member status", + "operationId": "changeStatus", + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChangeStatusRequest" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" }, "400": { "description": "Bad request — the payload failed validation", @@ -15395,173 +16919,749 @@ "tags": [ "Monitors" ], - "summary": "List monitors for the authenticated org", - "description": "Supports filtering by `enabled`, `status` (alias active|paused for enabled), `type` or `types`, `managedBy`, `tag` / `tags`, `search`, `environmentId`, `displayHealth`, `needsAttention`, and `region`. Unrecognised query parameters are silently ignored (Spring's default binding behaviour) — pin to the documented set above.", - "operationId": "list_9", + "summary": "List monitors for the authenticated org", + "description": "Supports filtering by `enabled`, `status` (alias active|paused for enabled), `type` or `types`, `managedBy`, `tag` / `tags`, `search`, `environmentId`, `displayHealth`, `needsAttention`, and `region`. Unrecognised query parameters are silently ignored (Spring's default binding behaviour) — pin to the documented set above.", + "operationId": "list_9", + "parameters": [ + { + "name": "enabled", + "in": "query", + "description": "Filter by enabled state (true/false)", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "status", + "in": "query", + "description": "Lifecycle status alias: 'active' (enabled=true) or 'paused' (enabled=false). Ignored when ?enabled is also supplied.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "type", + "in": "query", + "description": "Filter by monitor type", + "required": false, + "schema": { + "type": "string", + "enum": [ + "HTTP", + "DNS", + "MCP_SERVER", + "TCP", + "ICMP", + "HEARTBEAT", + "BROWSER", + "MULTI_STEP_API" + ] + } + }, + { + "name": "types", + "in": "query", + "description": "Filter by monitor types, comma-separated; matches any listed type", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "HTTP", + "DNS", + "MCP_SERVER", + "TCP", + "ICMP", + "HEARTBEAT", + "BROWSER", + "MULTI_STEP_API" + ] + } + } + }, + { + "name": "managedBy", + "in": "query", + "description": "Filter by managed-by source", + "required": false, + "schema": { + "type": "string", + "enum": [ + "DASHBOARD", + "CLI", + "TERRAFORM", + "MCP", + "API", + "GIT" + ] + } + }, + { + "name": "tags", + "in": "query", + "description": "Filter by tag names, comma-separated (e.g. prod,critical); OR semantics", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "Filter by a single tag name (alias for ?tags=); merged with ?tags using OR semantics", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "search", + "in": "query", + "description": "Case-insensitive name search", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "environmentId", + "in": "query", + "description": "Filter by environment ID", + "required": false, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "displayHealth", + "in": "query", + "description": "Filter by projected chip health", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "needsAttention", + "in": "query", + "description": "When true, only monitors that need operator attention", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "region", + "in": "query", + "description": "Filter by probe region", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "name", + "in": "query", + "description": "Exact, case-sensitive monitor name", + "required": false, + "schema": { + "type": "string", + "description": "Exact, case-sensitive monitor name" + } + }, + { + "name": "openIncident", + "in": "query", + "description": "Whether a confirmed incident is open", + "required": false, + "schema": { + "type": "boolean", + "description": "Whether a confirmed incident is open" + } + }, + { + "name": "muted", + "in": "query", + "description": "Whether alert delivery is currently muted", + "required": false, + "schema": { + "type": "boolean", + "description": "Whether alert delivery is currently muted" + } + }, + { + "name": "quarantined", + "in": "query", + "description": "Whether quarantine has not expired", + "required": false, + "schema": { + "type": "boolean", + "description": "Whether quarantine has not expired" + } + }, + { + "name": "pausedBefore", + "in": "query", + "description": "Only monitors paused before this timestamp", + "required": false, + "schema": { + "type": "string", + "description": "Only monitors paused before this timestamp", + "format": "date-time" + } + }, + { + "name": "flaky", + "in": "query", + "description": "Whether recent completed cycles recovered on retry", + "required": false, + "schema": { + "type": "boolean", + "description": "Whether recent completed cycles recovered on retry" + } + }, + { + "name": "group", + "in": "query", + "description": "List group: failing, not_running, passing, or paused", + "required": false, + "schema": { + "type": "string", + "description": "List group: failing, not_running, passing, or paused" + } + }, + { + "name": "ownerProject", + "in": "query", + "description": "Exact project declared by the owning tool", + "required": false, + "schema": { + "type": "string", + "description": "Exact project declared by the owning tool" + } + }, + { + "name": "sort", + "in": "query", + "description": "Use state for group and streak ordering", + "required": false, + "schema": { + "type": "string", + "description": "Use state for group and streak ordering" + } + }, + { + "name": "page", + "in": "query", + "description": "Zero-based page index (0..N)", + "required": false, + "schema": { + "minimum": 0, + "type": "integer", + "default": 0 + } + }, + { + "name": "size", + "in": "query", + "description": "The size of the page to be returned", + "required": false, + "schema": { + "minimum": 1, + "type": "integer", + "default": 20 + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/TableValueResultMonitorDto" + } + } + } + }, + "400": { + "description": "Bad request — the payload failed validation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized — missing or invalid credentials", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "402": { + "description": "Payment required — the plan or quota does not allow this", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden — the actor lacks permission for this resource", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not found — the requested resource does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict — the request collides with current resource state", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "410": { + "description": "Gone — the resource is no longer available", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "429": { + "description": "Too many requests — retry after the window resets", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error — see the message field for details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "502": { + "description": "Bad gateway — an upstream provider returned an error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "Service unavailable — try again shortly", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "post": { + "tags": [ + "Monitors" + ], + "summary": "Create a new monitor", + "operationId": "create_10", + "parameters": [ + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateMonitorRequest" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Created", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/SingleValueResponseMonitorDto" + } + } + } + }, + "400": { + "description": "Bad request — the payload failed validation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized — missing or invalid credentials", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "402": { + "description": "Payment required — the plan or quota does not allow this", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden — the actor lacks permission for this resource", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not found — the requested resource does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict — the request collides with current resource state", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "410": { + "description": "Gone — the resource is no longer available", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "429": { + "description": "Too many requests — retry after the window resets", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error — see the message field for details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "502": { + "description": "Bad gateway — an upstream provider returned an error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "Service unavailable — try again shortly", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/monitors/{id}": { + "get": { + "tags": [ + "Monitors" + ], + "summary": "Get a single monitor by id", + "operationId": "get_6", "parameters": [ { - "name": "enabled", - "in": "query", - "description": "Filter by enabled state (true/false)", - "required": false, + "name": "id", + "in": "path", + "required": true, "schema": { - "type": "boolean" + "type": "string", + "format": "uuid" } }, { - "name": "status", - "in": "query", - "description": "Lifecycle status alias: 'active' (enabled=true) or 'paused' (enabled=false). Ignored when ?enabled is also supplied.", + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", "required": false, "schema": { "type": "string" } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/SingleValueResponseMonitorDto" + } + } + } }, - { - "name": "type", - "in": "query", - "description": "Filter by monitor type", - "required": false, - "schema": { - "type": "string", - "enum": [ - "HTTP", - "DNS", - "MCP_SERVER", - "TCP", - "ICMP", - "HEARTBEAT", - "BROWSER", - "MULTI_STEP_API" - ] + "400": { + "description": "Bad request — the payload failed validation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } } }, - { - "name": "types", - "in": "query", - "description": "Filter by monitor types, comma-separated; matches any listed type", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "HTTP", - "DNS", - "MCP_SERVER", - "TCP", - "ICMP", - "HEARTBEAT", - "BROWSER", - "MULTI_STEP_API" - ] + "401": { + "description": "Unauthorized — missing or invalid credentials", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } } } }, - { - "name": "managedBy", - "in": "query", - "description": "Filter by managed-by source", - "required": false, - "schema": { - "type": "string", - "enum": [ - "DASHBOARD", - "CLI", - "TERRAFORM", - "MCP", - "API" - ] + "402": { + "description": "Payment required — the plan or quota does not allow this", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } } }, - { - "name": "tags", - "in": "query", - "description": "Filter by tag names, comma-separated (e.g. prod,critical); OR semantics", - "required": false, - "schema": { - "type": "string" + "403": { + "description": "Forbidden — the actor lacks permission for this resource", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } } }, - { - "name": "tag", - "in": "query", - "description": "Filter by a single tag name (alias for ?tags=); merged with ?tags using OR semantics", - "required": false, - "schema": { - "type": "string" + "404": { + "description": "Not found — the requested resource does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } } }, - { - "name": "search", - "in": "query", - "description": "Case-insensitive name search", - "required": false, - "schema": { - "type": "string" + "409": { + "description": "Conflict — the request collides with current resource state", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } } }, - { - "name": "environmentId", - "in": "query", - "description": "Filter by environment ID", - "required": false, - "schema": { - "type": "string", - "format": "uuid" + "410": { + "description": "Gone — the resource is no longer available", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } } }, - { - "name": "displayHealth", - "in": "query", - "description": "Filter by projected chip health", - "required": false, - "schema": { - "type": "string" + "429": { + "description": "Too many requests — retry after the window resets", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } } }, - { - "name": "needsAttention", - "in": "query", - "description": "When true, only monitors that need operator attention", - "required": false, - "schema": { - "type": "boolean" + "500": { + "description": "Internal server error — see the message field for details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } } }, - { - "name": "region", - "in": "query", - "description": "Filter by probe region", - "required": false, - "schema": { - "type": "string" + "502": { + "description": "Bad gateway — an upstream provider returned an error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } } }, + "503": { + "description": "Service unavailable — try again shortly", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "put": { + "tags": [ + "Monitors" + ], + "summary": "Update a monitor", + "operationId": "update_11", + "parameters": [ { - "name": "triage", - "in": "query", + "name": "id", + "in": "path", "required": true, "schema": { - "$ref": "#/components/schemas/MonitorTriageParams" + "type": "string", + "format": "uuid" } }, { - "name": "pageable", - "in": "query", - "required": true, + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { - "$ref": "#/components/schemas/Pageable" + "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateMonitorRequest" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/TableValueResultMonitorDto" + "$ref": "#/components/schemas/SingleValueResponseMonitorDto" } } } @@ -15678,29 +17778,184 @@ } } }, - "post": { + "delete": { "tags": [ "Monitors" ], - "summary": "Create a new monitor", - "operationId": "create_10", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateMonitorRequest" + "summary": "Soft-delete a monitor", + "description": "Also deletes status-page components that represent this monitor. The parent status page stays.", + "operationId": "delete_7", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad request — the payload failed validation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } } } }, - "required": true - }, + "401": { + "description": "Unauthorized — missing or invalid credentials", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "402": { + "description": "Payment required — the plan or quota does not allow this", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden — the actor lacks permission for this resource", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not found — the requested resource does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict — the request collides with current resource state", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "410": { + "description": "Gone — the resource is no longer available", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "429": { + "description": "Too many requests — retry after the window resets", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error — see the message field for details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "502": { + "description": "Bad gateway — an upstream provider returned an error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "Service unavailable — try again shortly", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/monitors/{id}/drift": { + "get": { + "tags": [ + "Monitors" + ], + "summary": "IaC-declared baseline vs live overlays", + "operationId": "drift", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { - "201": { - "description": "Created", + "200": { + "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorDto" + "$ref": "#/components/schemas/SingleValueResponseMonitorDriftDto" } } } @@ -15818,13 +18073,14 @@ } } }, - "/api/v1/monitors/{id}": { + "/api/v1/monitors/{id}/history": { "get": { "tags": [ - "Monitors" + "Monitor History" ], - "summary": "Get a single monitor by id", - "operationId": "get_6", + "summary": "List skipped ticks for a monitor", + "description": "Collapsed NotRun rows. These are not Runs and they are not billed.", + "operationId": "listMonitorHistory", "parameters": [ { "name": "id", @@ -15834,6 +18090,33 @@ "type": "string", "format": "uuid" } + }, + { + "name": "cursor", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 25 + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -15842,7 +18125,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorDto" + "$ref": "#/components/schemas/CursorPageMonitorHistoryEntryDto" } } } @@ -15958,13 +18241,15 @@ } } } - }, - "put": { + } + }, + "/api/v1/monitors/{id}/mute": { + "post": { "tags": [ "Monitors" ], - "summary": "Update a monitor", - "operationId": "update_11", + "summary": "Mute alert delivery without flipping enabled", + "operationId": "mute", "parameters": [ { "name": "id", @@ -15974,17 +18259,34 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateMonitorRequest" + "$ref": "#/components/schemas/MonitorOverlayRequest" } } - }, - "required": true + } }, "responses": { "200": { @@ -16108,14 +18410,16 @@ } } } - }, - "delete": { + } + }, + "/api/v1/monitors/{id}/overview/steps": { + "get": { "tags": [ - "Monitors" + "Check Results" ], - "summary": "Soft-delete a monitor", - "description": "Also deletes status-page components that represent this monitor. The parent status page stays.", - "operationId": "delete_7", + "summary": "Overview step catalog", + "description": "Step catalog from finished runs of the Head revision in the window, with first-try and flake aggregates. Empty when the monitor has no step catalog.", + "operationId": "getMonitorOverviewSteps", "parameters": [ { "name": "id", @@ -16125,11 +18429,62 @@ "type": "string", "format": "uuid" } + }, + { + "name": "window", + "in": "query", + "description": "Time window for step aggregates", + "required": false, + "schema": { + "type": "string", + "enum": [ + "24h", + "7d", + "30d", + "90d" + ] + } + }, + { + "name": "revisionId", + "in": "query", + "description": "Revision to inspect; defaults to the live revision", + "required": false, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "lastRuns", + "in": "query", + "description": "Latest settled runs, 1–30; ignores the window within retention", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/SingleValueResponseOverviewStepsDto" + } + } + } }, "400": { "description": "Bad request — the payload failed validation", @@ -16244,13 +18599,13 @@ } } }, - "/api/v1/monitors/{id}/drift": { - "get": { + "/api/v1/monitors/{id}/pause": { + "post": { "tags": [ "Monitors" ], - "summary": "IaC-declared baseline vs live overlays", - "operationId": "drift", + "summary": "Pause a monitor", + "operationId": "pause", "parameters": [ { "name": "id", @@ -16260,15 +18615,42 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MonitorOverlayRequest" + } + } + } + }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorDriftDto" + "$ref": "#/components/schemas/SingleValueResponseMonitorDto" } } } @@ -16386,14 +18768,14 @@ } } }, - "/api/v1/monitors/{id}/history": { - "get": { + "/api/v1/monitors/{id}/publish": { + "post": { "tags": [ - "Monitor History" + "Monitor definitions" ], - "summary": "List skipped ticks for a monitor", - "description": "Collapsed NotRun rows. These are not Runs and they are not billed.", - "operationId": "listMonitorHistory", + "summary": "Publish a revision as Head for this monitor", + "description": "Untested and failed-test revisions publish. requireTested needs a passing test in this environment on the pinned runtime within 24 hours. Does not upload a new bundle.", + "operationId": "publish", "parameters": [ { "name": "id", @@ -16405,31 +18787,41 @@ } }, { - "name": "cursor", - "in": "query", + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", "required": false, "schema": { "type": "string" } }, { - "name": "limit", - "in": "query", + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", "required": false, "schema": { - "type": "integer", - "format": "int32", - "default": 25 + "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublishRevisionRequest" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/CursorPageMonitorHistoryEntryDto" + "$ref": "#/components/schemas/SingleValueResponseDefinitionHeadDto" } } } @@ -16547,13 +18939,13 @@ } } }, - "/api/v1/monitors/{id}/mute": { + "/api/v1/monitors/{id}/quarantine": { "post": { "tags": [ "Monitors" ], - "summary": "Mute alert delivery without flipping enabled", - "operationId": "mute", + "summary": "Quarantine a monitor", + "operationId": "quarantine", "parameters": [ { "name": "id", @@ -16563,16 +18955,35 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MonitorOverlayRequest" + "$ref": "#/components/schemas/QuarantineMonitorRequest" } } - } + }, + "required": true }, "responses": { "200": { @@ -16698,14 +19109,13 @@ } } }, - "/api/v1/monitors/{id}/overview/steps": { - "get": { + "/api/v1/monitors/{id}/release-quarantine": { + "post": { "tags": [ - "Check Results" + "Monitors" ], - "summary": "Overview step catalog", - "description": "Step catalog from finished runs of the Head revision in the window, with first-try and flake aggregates. Empty when the monitor has no step catalog.", - "operationId": "getMonitorOverviewSteps", + "summary": "Release quarantine", + "operationId": "releaseQuarantine", "parameters": [ { "name": "id", @@ -16717,38 +19127,21 @@ } }, { - "name": "window", - "in": "query", - "description": "Time window for step aggregates", - "required": false, - "schema": { - "type": "string", - "enum": [ - "24h", - "7d", - "30d", - "90d" - ] - } - }, - { - "name": "revisionId", - "in": "query", - "description": "Revision to inspect; defaults to the live revision", + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", "required": false, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } }, { - "name": "lastRuns", - "in": "query", - "description": "Latest settled runs, 1–30; ignores the window within retention", + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", "required": false, "schema": { - "type": "integer", - "format": "int32" + "type": "string" } } ], @@ -16758,7 +19151,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseOverviewStepsDto" + "$ref": "#/components/schemas/SingleValueResponseMonitorDto" } } } @@ -16876,13 +19269,14 @@ } } }, - "/api/v1/monitors/{id}/pause": { + "/api/v1/monitors/{id}/restore": { "post": { "tags": [ "Monitors" ], - "summary": "Pause a monitor", - "operationId": "pause", + "summary": "Restore a deleted monitor", + "description": "Restores the monitor, its status-page components and its schedule. Counts against the plan's monitor limit. An optional environmentId selects a code monitor's restore environment.", + "operationId": "restore", "parameters": [ { "name": "id", @@ -16892,13 +19286,31 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MonitorOverlayRequest" + "$ref": "#/components/schemas/RestoreMonitorRequest" } } } @@ -17027,14 +19439,14 @@ } } }, - "/api/v1/monitors/{id}/publish": { - "post": { + "/api/v1/monitors/{id}/results": { + "get": { "tags": [ - "Monitor definitions" + "Check Results" ], - "summary": "Publish a revision as Head for this monitor", - "description": "Untested and failed-test revisions publish. requireTested needs a passing test in this environment on the pinned runtime within 24 hours. Does not upload a new bundle.", - "operationId": "publish", + "summary": "List raw check results", + "description": "Returns check results for the given monitor with optional time-range, region, and pass/fail filtering. Uses cursor-based pagination — pass the returned `cursor` value on subsequent requests to retrieve the next page. The cursor encodes the original time bounds, so `from`/`to` are ignored when a cursor is present.", + "operationId": "getResults", "parameters": [ { "name": "id", @@ -17044,35 +19456,93 @@ "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PublishRevisionRequest" - } + }, + { + "name": "from", + "in": "query", + "description": "Start of time range (ISO 8601, inclusive); defaults to 24 hours ago", + "required": false, + "schema": { + "type": "string", + "format": "date-time" } }, - "required": true - }, + { + "name": "to", + "in": "query", + "description": "End of time range (ISO 8601, inclusive); defaults to now", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "cursor", + "in": "query", + "description": "Opaque cursor from a previous response for pagination", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum results per page (1–200)", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 50 + }, + "example": 50 + }, + { + "name": "region", + "in": "query", + "description": "Filter by region (e.g. us-east)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "passed", + "in": "query", + "description": "Filter by pass/fail status", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { - "description": "OK", + "description": "Paginated check results", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseDefinitionHeadDto" + "$ref": "#/components/schemas/CursorPageCheckResultDto" } } } }, "400": { - "description": "Bad request — the payload failed validation", + "description": "Invalid query parameters", "content": { - "application/json": { + "*/*": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/CursorPageCheckResultDto" } } } @@ -17098,21 +19568,21 @@ } }, "403": { - "description": "Forbidden — the actor lacks permission for this resource", + "description": "Monitor does not belong to the caller's org", "content": { - "application/json": { + "*/*": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/CursorPageCheckResultDto" } } } }, "404": { - "description": "Not found — the requested resource does not exist", + "description": "Monitor not found", "content": { - "application/json": { + "*/*": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/CursorPageCheckResultDto" } } } @@ -17180,13 +19650,14 @@ } } }, - "/api/v1/monitors/{id}/quarantine": { - "post": { + "/api/v1/monitors/{id}/results/by-region": { + "get": { "tags": [ - "Monitors" + "Check Results" ], - "summary": "Quarantine a monitor", - "operationId": "quarantine", + "summary": "Get per-region uptime and latency series", + "description": "Returns clock-aligned buckets of p50/p95/p99 latency and pass counts per region. 24h uses 30-minute buckets, 7d uses 3-hour buckets, and 30d uses 12-hour buckets. previousUptimePercent covers the equal-length window before this one.", + "operationId": "getMonitorResultsByRegion", "parameters": [ { "name": "id", @@ -17196,35 +19667,57 @@ "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/QuarantineMonitorRequest" - } + }, + { + "name": "window", + "in": "query", + "description": "Time window: 24h (30-minute buckets), 7d (3-hour), 30d (12-hour)", + "required": false, + "schema": { + "type": "string", + "enum": [ + "24h", + "7d", + "30d" + ] } }, - "required": true - }, + { + "name": "region", + "in": "query", + "description": "Limit to one of the monitor's regions (e.g. us-east)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { - "description": "OK", + "description": "Per-region chart series", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorDto" + "$ref": "#/components/schemas/RegionResultSeriesDto" } } } }, "400": { - "description": "Bad request — the payload failed validation", + "description": "Invalid window or region parameter", "content": { - "application/json": { + "*/*": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/SingleValueResponseRegionResultSeriesDto" } } } @@ -17250,21 +19743,21 @@ } }, "403": { - "description": "Forbidden — the actor lacks permission for this resource", + "description": "Monitor does not belong to the caller's org", "content": { - "application/json": { + "*/*": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/SingleValueResponseRegionResultSeriesDto" } } } }, "404": { - "description": "Not found — the requested resource does not exist", + "description": "Monitor not found", "content": { - "application/json": { + "*/*": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/SingleValueResponseRegionResultSeriesDto" } } } @@ -17332,13 +19825,14 @@ } } }, - "/api/v1/monitors/{id}/release-quarantine": { - "post": { + "/api/v1/monitors/{id}/results/summary": { + "get": { "tags": [ - "Monitors" + "Check Results" ], - "summary": "Release quarantine", - "operationId": "releaseQuarantine", + "summary": "Get results summary", + "description": "Returns a dashboard summary for the monitor: current status derived from the latest result per region, time-bucketed chart data, the 24-hour uptime percentage, and the selected window's uptime percentage.", + "operationId": "getSummary", "parameters": [ { "name": "id", @@ -17348,25 +19842,49 @@ "type": "string", "format": "uuid" } + }, + { + "name": "chartWindow", + "in": "query", + "description": "Chart window: 24h returns hourly buckets, 7d/30d/90d return daily buckets", + "required": false, + "schema": { + "type": "string", + "enum": [ + "24h", + "7d", + "30d", + "90d" + ] + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { "200": { - "description": "OK", + "description": "Results summary", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorDto" + "$ref": "#/components/schemas/ResultSummaryDto" } } } }, "400": { - "description": "Bad request — the payload failed validation", + "description": "Invalid chartWindow parameter", "content": { - "application/json": { + "*/*": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/SingleValueResponseResultSummaryDto" } } } @@ -17392,21 +19910,21 @@ } }, "403": { - "description": "Forbidden — the actor lacks permission for this resource", + "description": "Monitor does not belong to the caller's org", "content": { - "application/json": { + "*/*": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/SingleValueResponseResultSummaryDto" } } } }, "404": { - "description": "Not found — the requested resource does not exist", + "description": "Monitor not found", "content": { - "application/json": { + "*/*": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/SingleValueResponseResultSummaryDto" } } } @@ -17474,14 +19992,13 @@ } } }, - "/api/v1/monitors/{id}/restore": { + "/api/v1/monitors/{id}/resume": { "post": { "tags": [ "Monitors" ], - "summary": "Restore a deleted monitor", - "description": "Restores the monitor, its status-page components and its schedule. Counts against the plan's monitor limit. An optional environmentId selects a code monitor's restore environment.", - "operationId": "restore", + "summary": "Resume a paused monitor", + "operationId": "resume", "parameters": [ { "name": "id", @@ -17491,17 +20008,26 @@ "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RestoreMonitorRequest" - } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } - }, + ], "responses": { "200": { "description": "OK", @@ -17626,14 +20152,14 @@ } } }, - "/api/v1/monitors/{id}/results": { + "/api/v1/monitors/{id}/revisions": { "get": { "tags": [ - "Check Results" + "Monitor definitions" ], - "summary": "List raw check results", - "description": "Returns check results for the given monitor with optional time-range, region, and pass/fail filtering. Uses cursor-based pagination — pass the returned `cursor` value on subsequent requests to retrieve the next page. The cursor encodes the original time bounds, so `from`/`to` are ignored when a cursor is present.", - "operationId": "getResults", + "summary": "List revisions that were live for this monitor", + "description": "Default is live and previous revisions. Pass state for drafts, or state=all. Page size default 25.", + "operationId": "listRevisions", "parameters": [ { "name": "id", @@ -17645,82 +20171,78 @@ } }, { - "name": "from", - "in": "query", - "description": "Start of time range (ISO 8601, inclusive); defaults to 24 hours ago", - "required": false, - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "name": "to", + "name": "state", "in": "query", - "description": "End of time range (ISO 8601, inclusive); defaults to now", + "description": "Comma-separated draft, tested_passed, tested_failed, live, previous, discarded, or all; default live,previous", "required": false, "schema": { - "type": "string", - "format": "date-time" + "type": "string" } }, { - "name": "cursor", + "name": "page", "in": "query", - "description": "Opaque cursor from a previous response for pagination", + "description": "Zero-based page index (0..N)", "required": false, "schema": { - "type": "string" + "minimum": 0, + "type": "integer", + "default": 0 } }, { - "name": "limit", + "name": "size", "in": "query", - "description": "Maximum results per page (1–200)", + "description": "The size of the page to be returned", "required": false, "schema": { + "minimum": 1, "type": "integer", - "format": "int32", - "default": 50 - }, - "example": 50 + "default": 25 + } }, { - "name": "region", + "name": "sort", "in": "query", - "description": "Filter by region (e.g. us-east)", + "description": "Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", "required": false, "schema": { - "type": "string" + "type": "array", + "items": { + "type": "string" + }, + "default": [ + "number,DESC" + ] } }, { - "name": "passed", - "in": "query", - "description": "Filter by pass/fail status", + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", "required": false, "schema": { - "type": "boolean" + "type": "string" } } ], "responses": { "200": { - "description": "Paginated check results", + "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/CursorPageCheckResultDto" + "$ref": "#/components/schemas/TableValueResultRevisionDto" } } } }, "400": { - "description": "Invalid query parameters", + "description": "Bad request — the payload failed validation", "content": { - "*/*": { + "application/json": { "schema": { - "$ref": "#/components/schemas/CursorPageCheckResultDto" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -17746,21 +20268,21 @@ } }, "403": { - "description": "Monitor does not belong to the caller's org", + "description": "Forbidden — the actor lacks permission for this resource", "content": { - "*/*": { + "application/json": { "schema": { - "$ref": "#/components/schemas/CursorPageCheckResultDto" + "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { - "description": "Monitor not found", + "description": "Not found — the requested resource does not exist", "content": { - "*/*": { + "application/json": { "schema": { - "$ref": "#/components/schemas/CursorPageCheckResultDto" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -17826,16 +20348,14 @@ } } } - } - }, - "/api/v1/monitors/{id}/results/by-region": { - "get": { + }, + "post": { "tags": [ - "Check Results" + "Monitor definitions" ], - "summary": "Get per-region uptime and latency series", - "description": "Returns clock-aligned buckets of p50/p95/p99 latency and pass counts per region. 24h uses 30-minute buckets, 7d uses 3-hour buckets, and 30d uses 12-hour buckets. previousUptimePercent covers the equal-length window before this one.", - "operationId": "getMonitorResultsByRegion", + "summary": "Save a draft revision", + "description": "Does not change the revision scheduled runs execute. Reuses a draft with the same digest.", + "operationId": "createDraft", "parameters": [ { "name": "id", @@ -17847,46 +20367,51 @@ } }, { - "name": "window", - "in": "query", - "description": "Time window: 24h (30-minute buckets), 7d (3-hour), 30d (12-hour)", + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", "required": false, "schema": { - "type": "string", - "enum": [ - "24h", - "7d", - "30d" - ] + "type": "string" } }, { - "name": "region", - "in": "query", - "description": "Limit to one of the monitor's regions (e.g. us-east)", + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", "required": false, "schema": { "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateDraftRevisionRequest" + } + } + }, + "required": true + }, "responses": { "200": { - "description": "Per-region chart series", + "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/RegionResultSeriesDto" + "$ref": "#/components/schemas/SingleValueResponseCreateDraftRevisionResponse" } } } }, "400": { - "description": "Invalid window or region parameter", + "description": "Bad request — the payload failed validation", "content": { - "*/*": { + "application/json": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseRegionResultSeriesDto" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -17912,21 +20437,21 @@ } }, "403": { - "description": "Monitor does not belong to the caller's org", + "description": "Forbidden — the actor lacks permission for this resource", "content": { - "*/*": { + "application/json": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseRegionResultSeriesDto" + "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { - "description": "Monitor not found", + "description": "Not found — the requested resource does not exist", "content": { - "*/*": { + "application/json": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseRegionResultSeriesDto" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -17994,14 +20519,13 @@ } } }, - "/api/v1/monitors/{id}/results/summary": { - "get": { + "/api/v1/monitors/{id}/revisions/{revisionId}": { + "delete": { "tags": [ - "Check Results" + "Monitor definitions" ], - "summary": "Get results summary", - "description": "Returns a dashboard summary for the monitor: current status derived from the latest result per region, time-bucketed chart data, the 24-hour uptime percentage, and the selected window's uptime percentage.", - "operationId": "getSummary", + "summary": "Discard a draft revision", + "operationId": "discardDraft", "parameters": [ { "name": "id", @@ -18013,38 +20537,34 @@ } }, { - "name": "chartWindow", - "in": "query", - "description": "Chart window: 24h returns hourly buckets, 7d/30d/90d return daily buckets", - "required": false, + "name": "revisionId", + "in": "path", + "required": true, "schema": { "type": "string", - "enum": [ - "24h", - "7d", - "30d", - "90d" - ] + "format": "uuid" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } ], "responses": { - "200": { - "description": "Results summary", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ResultSummaryDto" - } - } - } + "204": { + "description": "No Content" }, "400": { - "description": "Invalid chartWindow parameter", + "description": "Bad request — the payload failed validation", "content": { - "*/*": { + "application/json": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseResultSummaryDto" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -18070,21 +20590,21 @@ } }, "403": { - "description": "Monitor does not belong to the caller's org", + "description": "Forbidden — the actor lacks permission for this resource", "content": { - "*/*": { + "application/json": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseResultSummaryDto" + "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { - "description": "Monitor not found", + "description": "Not found — the requested resource does not exist", "content": { - "*/*": { + "application/json": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseResultSummaryDto" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -18152,13 +20672,13 @@ } } }, - "/api/v1/monitors/{id}/resume": { + "/api/v1/monitors/{id}/revisions/{revisionId}/keep": { "post": { "tags": [ - "Monitors" + "Monitor definitions" ], - "summary": "Resume a paused monitor", - "operationId": "resume", + "summary": "Extend an open draft for another fourteen days", + "operationId": "keepDraft", "parameters": [ { "name": "id", @@ -18168,6 +20688,33 @@ "type": "string", "format": "uuid" } + }, + { + "name": "revisionId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -18176,7 +20723,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorDto" + "$ref": "#/components/schemas/SingleValueResponseRevisionDto" } } } @@ -18294,14 +20841,14 @@ } } }, - "/api/v1/monitors/{id}/revisions": { - "get": { + "/api/v1/monitors/{id}/revisions/{revisionId}/test": { + "post": { "tags": [ "Monitor definitions" ], - "summary": "List revisions that were live for this monitor", - "description": "Default is live and previous revisions. Pass state for drafts, or state=all. Page size default 25.", - "operationId": "listRevisions", + "summary": "Run remote validation against a revision without moving Head", + "description": "Admits a queued Run with source=remote_validation. Does not vote on health. Optional environmentId defaults to the monitor's environment; optional region defaults to the monitor's first region.", + "operationId": "testRevision", "parameters": [ { "name": "id", @@ -18313,30 +20860,49 @@ } }, { - "name": "state", - "in": "query", - "description": "Comma-separated draft, tested_passed, tested_failed, live, previous, discarded, or all; default live,previous", + "name": "revisionId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", "required": false, "schema": { "type": "string" } }, { - "name": "pageable", - "in": "query", - "required": true, + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { - "$ref": "#/components/schemas/Pageable" + "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CodeTestTargetRequest" + } + } + } + }, "responses": { - "200": { - "description": "OK", + "202": { + "description": "Accepted", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/TableValueResultRevisionDto" + "$ref": "#/components/schemas/SingleValueResponseRunDto" } } } @@ -18452,14 +21018,16 @@ } } } - }, + } + }, + "/api/v1/monitors/{id}/rollback": { "post": { "tags": [ "Monitor definitions" ], - "summary": "Save a draft revision", - "description": "Does not change the revision scheduled runs execute. Reuses a draft with the same digest.", - "operationId": "createDraft", + "summary": "Roll back Head to a prior live revision", + "description": "revisionId null restores the previous live revision. Returns this monitor's head and its open incidents.", + "operationId": "rollback", "parameters": [ { "name": "id", @@ -18470,9 +21038,19 @@ "format": "uuid" } }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, { "name": "X-DevHelm-Client", "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", "required": false, "schema": { "type": "string" @@ -18483,7 +21061,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateDraftRevisionRequest" + "$ref": "#/components/schemas/RollbackRevisionRequest" } } }, @@ -18495,7 +21073,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseCreateDraftRevisionResponse" + "$ref": "#/components/schemas/SingleValueResponseDefinitionHeadDto" } } } @@ -18613,13 +21191,13 @@ } } }, - "/api/v1/monitors/{id}/revisions/{revisionId}": { - "delete": { + "/api/v1/monitors/{id}/rollback-preview": { + "get": { "tags": [ "Monitor definitions" ], - "summary": "Discard a draft revision", - "operationId": "discardDraft", + "summary": "Preview rollback consequences for this environment", + "operationId": "rollbackPreview", "parameters": [ { "name": "id", @@ -18632,17 +21210,34 @@ }, { "name": "revisionId", - "in": "path", - "required": true, + "in": "query", + "description": "Revision to preview; null previews the previous live revision", + "required": false, "schema": { "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/SingleValueResponseRollbackPreviewDto" + } + } + } }, "400": { "description": "Bad request — the payload failed validation", @@ -18757,13 +21352,14 @@ } } }, - "/api/v1/monitors/{id}/revisions/{revisionId}/keep": { + "/api/v1/monitors/{id}/rotate-token": { "post": { "tags": [ - "Monitor definitions" + "Monitors" ], - "summary": "Extend an open draft for another fourteen days", - "operationId": "keepDraft", + "summary": "Rotate the ping token for a heartbeat monitor", + "description": "Generates a new ping token. The old token remains valid for 24 hours to allow cron jobs to be updated without downtime. Only supported for HEARTBEAT monitors.", + "operationId": "rotateToken", "parameters": [ { "name": "id", @@ -18775,12 +21371,21 @@ } }, { - "name": "revisionId", - "in": "path", - "required": true, + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, "schema": { - "type": "string", - "format": "uuid" + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } ], @@ -18790,7 +21395,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseRevisionDto" + "$ref": "#/components/schemas/SingleValueResponseMonitorDto" } } } @@ -18908,14 +21513,14 @@ } } }, - "/api/v1/monitors/{id}/revisions/{revisionId}/test": { - "post": { + "/api/v1/monitors/{id}/runs": { + "get": { "tags": [ - "Monitor definitions" + "Monitor Runs" ], - "summary": "Run remote validation against a revision without moving Head", - "description": "Admits a queued Run with source=remote_validation. Does not vote on health. Optional environmentId defaults to the monitor's environment; optional region defaults to the monitor's first region.", - "operationId": "testRevision", + "summary": "List runs for a code monitor", + "description": "Cursor page of runs from the last 90 days. Default limit 25.", + "operationId": "listMonitorRuns", "parameters": [ { "name": "id", @@ -18926,32 +21531,235 @@ "format": "uuid" } }, + { + "name": "phase", + "in": "query", + "description": "Filter by run phase; not_finished excludes finished runs", + "required": false, + "schema": { + "type": "string", + "description": "Filter by run phase; not_finished excludes finished runs" + } + }, + { + "name": "outcome", + "in": "query", + "description": "Outcomes, repeated or comma-separated; not_passed includes retries", + "required": false, + "schema": { + "type": "string", + "description": "Outcomes, repeated or comma-separated; not_passed includes retries" + } + }, + { + "name": "region", + "in": "query", + "description": "Filter by probe region", + "required": false, + "schema": { + "type": "string", + "description": "Filter by probe region" + } + }, + { + "name": "source", + "in": "query", + "description": "Filter by what triggered the run", + "required": false, + "schema": { + "type": "string", + "description": "Filter by what triggered the run" + } + }, + { + "name": "q", + "in": "query", + "description": "Substring match on headline", + "required": false, + "schema": { + "type": "string", + "description": "Substring match on headline" + } + }, { "name": "revisionId", - "in": "path", - "required": true, + "in": "query", + "description": "Only runs for this published revision", + "required": false, "schema": { "type": "string", + "description": "Only runs for this published revision", "format": "uuid" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CodeTestTargetRequest" - } + }, + { + "name": "from", + "in": "query", + "description": "Inclusive enqueue lower bound (clamped to 90 days)", + "required": false, + "schema": { + "type": "string", + "description": "Inclusive enqueue lower bound (clamped to 90 days)", + "format": "date-time" + } + }, + { + "name": "to", + "in": "query", + "description": "Inclusive enqueue upper bound (default now)", + "required": false, + "schema": { + "type": "string", + "description": "Inclusive enqueue upper bound (default now)", + "format": "date-time" + } + }, + { + "name": "cursor", + "in": "query", + "description": "Opaque cursor from the previous page; results cover the last 90 days", + "required": false, + "schema": { + "type": "string", + "description": "Opaque cursor from the previous page; results cover the last 90 days" + } + }, + { + "name": "limit", + "in": "query", + "description": "Page size (1–100, default 25)", + "required": false, + "schema": { + "maximum": 100, + "minimum": 1, + "type": "integer", + "description": "Page size (1–100, default 25)", + "format": "int32" + } + }, + { + "name": "monitorType", + "in": "query", + "description": "Monitor type: BROWSER or MULTI_STEP_API", + "required": false, + "schema": { + "type": "string", + "description": "Monitor type: BROWSER or MULTI_STEP_API" + } + }, + { + "name": "incidentId", + "in": "query", + "description": "Runs in the incident window, intersected with from and to", + "required": false, + "schema": { + "type": "string", + "description": "Runs in the incident window, intersected with from and to", + "format": "uuid" + } + }, + { + "name": "branch", + "in": "query", + "description": "Exact branch from revision provenance", + "required": false, + "schema": { + "type": "string", + "description": "Exact branch from revision provenance" + } + }, + { + "name": "flaky", + "in": "query", + "description": "Select monitors currently flaky over the last seven days", + "required": false, + "schema": { + "type": "boolean", + "description": "Select monitors currently flaky over the last seven days" + } + }, + { + "name": "sessionId", + "in": "query", + "description": "Caller-provided CI session identifier", + "required": false, + "schema": { + "type": "string", + "description": "Caller-provided CI session identifier" + } + }, + { + "name": "evaluationCycleId", + "in": "query", + "description": "Only runs in this evaluation cycle, including retries", + "required": false, + "schema": { + "type": "string", + "description": "Only runs in this evaluation cycle, including retries", + "format": "uuid" + } + }, + { + "name": "excludeSource", + "in": "query", + "description": "Exclude this source; omitted preserves all sources", + "required": false, + "schema": { + "type": "string", + "description": "Exclude this source; omitted preserves all sources" + } + }, + { + "name": "sort", + "in": "query", + "description": "Enqueue order: asc or desc (default: desc)", + "required": false, + "schema": { + "type": "string", + "description": "Enqueue order: asc or desc (default: desc)" + } + }, + { + "name": "step", + "in": "query", + "description": "Zero-based failed step index; requires monitor and caseIndex", + "required": false, + "schema": { + "minimum": 0, + "type": "integer", + "description": "Zero-based failed step index; requires monitor and caseIndex", + "format": "int32" + } + }, + { + "name": "caseIndex", + "in": "query", + "description": "Zero-based case index qualifying the failed step", + "required": false, + "schema": { + "minimum": 0, + "type": "integer", + "description": "Zero-based case index qualifying the failed step", + "format": "int32" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } - }, + ], "responses": { - "202": { - "description": "Accepted", + "200": { + "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseRunDto" + "$ref": "#/components/schemas/CursorPageRunDto" } } } @@ -19067,16 +21875,14 @@ } } } - } - }, - "/api/v1/monitors/{id}/rollback": { + }, "post": { "tags": [ - "Monitor definitions" + "Monitor Runs" ], - "summary": "Roll back Head to a prior live revision", - "description": "revisionId null restores the previous live revision. Returns this monitor's head and its open incidents.", - "operationId": "rollback", + "summary": "Run a code monitor now", + "description": "Starts one queued run in the monitor's first region. Works on paused monitors and does not affect health.", + "operationId": "runNow", "parameters": [ { "name": "id", @@ -19086,25 +21892,33 @@ "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RollbackRevisionRequest" - } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" } }, - "required": true - }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { - "200": { - "description": "OK", + "202": { + "description": "Accepted", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseDefinitionHeadDto" + "$ref": "#/components/schemas/SingleValueResponseRunDto" } } } @@ -19222,13 +22036,13 @@ } } }, - "/api/v1/monitors/{id}/rollback-preview": { + "/api/v1/monitors/{id}/runs/regional-health": { "get": { "tags": [ - "Monitor definitions" + "monitor-run-diagnostics-controller" ], - "summary": "Preview rollback consequences for this environment", - "operationId": "rollbackPreview", + "summary": "Get regional run health without changing incident evaluation", + "operationId": "health", "parameters": [ { "name": "id", @@ -19240,13 +22054,12 @@ } }, { - "name": "revisionId", - "in": "query", - "description": "Revision to preview; null previews the previous live revision", + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", "required": false, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], @@ -19256,7 +22069,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseRollbackPreviewDto" + "$ref": "#/components/schemas/SingleValueResponseMonitorRegionalHealthDto" } } } @@ -19374,14 +22187,13 @@ } } }, - "/api/v1/monitors/{id}/rotate-token": { - "post": { + "/api/v1/monitors/{id}/runs/schedule": { + "get": { "tags": [ - "Monitors" + "monitor-run-diagnostics-controller" ], - "summary": "Rotate the ping token for a heartbeat monitor", - "description": "Generates a new ping token. The old token remains valid for 24 hours to allow cron jobs to be updated without downtime. Only supported for HEARTBEAT monitors.", - "operationId": "rotateToken", + "summary": "Get the next actual scheduler admission time", + "operationId": "schedule", "parameters": [ { "name": "id", @@ -19391,6 +22203,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -19399,7 +22220,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorDto" + "$ref": "#/components/schemas/SingleValueResponseMonitorScheduleDto" } } } @@ -19517,14 +22338,13 @@ } } }, - "/api/v1/monitors/{id}/runs": { + "/api/v1/monitors/{id}/runs/series": { "get": { "tags": [ - "Monitor Runs" + "monitor-run-diagnostics-controller" ], - "summary": "List runs for a code monitor", - "description": "Cursor page of runs from the last 90 days. Default limit 25.", - "operationId": "listMonitorRuns", + "summary": "Get execution-duration and regional target-health chart buckets", + "operationId": "series", "parameters": [ { "name": "id", @@ -19536,11 +22356,41 @@ } }, { - "name": "params", + "name": "window", "in": "query", - "required": true, + "description": "Chart window: 24h, 7d, or 30d", + "required": false, "schema": { - "$ref": "#/components/schemas/MonitorRunListParams" + "type": "string", + "default": "24h" + } + }, + { + "name": "revisionId", + "in": "query", + "description": "Limit chart samples to one revision", + "required": false, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "region", + "in": "query", + "description": "Limit chart samples to one configured region", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } ], @@ -19550,7 +22400,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/CursorPageRunDto" + "$ref": "#/components/schemas/SingleValueResponseMonitorRunSeriesDto" } } } @@ -19666,14 +22516,16 @@ } } } - }, - "post": { + } + }, + "/api/v1/monitors/{id}/runs/summary": { + "get": { "tags": [ "Monitor Runs" ], - "summary": "Run a code monitor now", - "description": "Starts one queued run in the monitor's first region. Works on paused monitors and does not affect health.", - "operationId": "runNow", + "summary": "Summarize one monitor's execution durations", + "description": "Exact median of finished run durations enqueued in the rolling 30-day window.", + "operationId": "summarizeMonitorRuns", "parameters": [ { "name": "id", @@ -19685,8 +22537,9 @@ } }, { - "name": "Idempotency-Key", + "name": "X-DevHelm-Client", "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", "required": false, "schema": { "type": "string" @@ -19694,12 +22547,12 @@ } ], "responses": { - "202": { - "description": "Accepted", + "200": { + "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseRunDto" + "$ref": "#/components/schemas/SingleValueResponseMonitorRunDurationSummaryDto" } } } @@ -19817,13 +22670,13 @@ } } }, - "/api/v1/monitors/{id}/runs/regional-health": { + "/api/v1/monitors/{id}/secret-requests": { "get": { "tags": [ - "monitor-run-diagnostics-controller" + "Monitor secret requests" ], - "summary": "Get regional run health without changing incident evaluation", - "operationId": "health", + "summary": "List secret requests for a monitor", + "operationId": "list_20", "parameters": [ { "name": "id", @@ -19833,6 +22686,25 @@ "type": "string", "format": "uuid" } + }, + { + "name": "revisionId", + "in": "query", + "description": "Revision whose key demand to preview; null uses live", + "required": false, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -19841,7 +22713,176 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorRegionalHealthDto" + "$ref": "#/components/schemas/SingleValueResponseMonitorSecretRequestsDto" + } + } + } + }, + "400": { + "description": "Bad request — the payload failed validation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized — missing or invalid credentials", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "402": { + "description": "Payment required — the plan or quota does not allow this", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden — the actor lacks permission for this resource", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not found — the requested resource does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict — the request collides with current resource state", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "410": { + "description": "Gone — the resource is no longer available", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "429": { + "description": "Too many requests — retry after the window resets", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error — see the message field for details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "502": { + "description": "Bad gateway — an upstream provider returned an error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "Service unavailable — try again shortly", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/monitors/{id}/secret-requests/{key}": { + "put": { + "tags": [ + "Monitor secret requests" + ], + "summary": "Attach or clear a remapped secret for a key", + "operationId": "remap", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "key", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RemapSecretRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/SingleValueResponseMonitorSecretRequestsDto" } } } @@ -19959,13 +23000,13 @@ } } }, - "/api/v1/monitors/{id}/runs/schedule": { - "get": { + "/api/v1/monitors/{id}/secret-requests/rescan": { + "post": { "tags": [ - "monitor-run-diagnostics-controller" + "Monitor secret requests" ], - "summary": "Get the next actual scheduler admission time", - "operationId": "schedule", + "summary": "Rescan secret requests from the active package", + "operationId": "rescan", "parameters": [ { "name": "id", @@ -19975,6 +23016,24 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -19983,7 +23042,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorScheduleDto" + "$ref": "#/components/schemas/SingleValueResponseMonitorSecretRequestsDto" } } } @@ -20101,13 +23160,13 @@ } } }, - "/api/v1/monitors/{id}/runs/series": { + "/api/v1/monitors/{id}/session": { "get": { "tags": [ - "monitor-run-diagnostics-controller" + "Monitor session" ], - "summary": "Get execution-duration and regional target-health chart buckets", - "operationId": "series", + "summary": "Get the monitor session", + "operationId": "getSession", "parameters": [ { "name": "id", @@ -20119,42 +23178,181 @@ } }, { - "name": "window", - "in": "query", - "description": "Chart window: 24h, 7d, or 30d", + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", "required": false, "schema": { - "type": "string", - "default": "24h" + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/SingleValueResponseMonitorSessionDto" + } + } + } + }, + "400": { + "description": "Bad request — the payload failed validation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized — missing or invalid credentials", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "402": { + "description": "Payment required — the plan or quota does not allow this", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden — the actor lacks permission for this resource", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not found — the requested resource does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict — the request collides with current resource state", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "410": { + "description": "Gone — the resource is no longer available", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "429": { + "description": "Too many requests — retry after the window resets", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } } }, + "500": { + "description": "Internal server error — see the message field for details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "502": { + "description": "Bad gateway — an upstream provider returned an error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "Service unavailable — try again shortly", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "put": { + "tags": [ + "Monitor session" + ], + "summary": "Create or update the monitor session", + "operationId": "putSession", + "parameters": [ { - "name": "revisionId", - "in": "query", - "description": "Limit chart samples to one revision", - "required": false, + "name": "id", + "in": "path", + "required": true, "schema": { "type": "string", "format": "uuid" } }, { - "name": "region", - "in": "query", - "description": "Limit chart samples to one configured region", + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", "required": false, "schema": { "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpsertMonitorSessionRequest" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorRunSeriesDto" + "$ref": "#/components/schemas/SingleValueResponseMonitorSessionDto" } } } @@ -20272,14 +23470,13 @@ } } }, - "/api/v1/monitors/{id}/runs/summary": { - "get": { + "/api/v1/monitors/{id}/session/renew": { + "post": { "tags": [ - "Monitor Runs" + "Monitor session" ], - "summary": "Summarize one monitor's execution durations", - "description": "Exact median of finished run durations enqueued in the rolling 30-day window.", - "operationId": "summarizeMonitorRuns", + "summary": "Renew the monitor session", + "operationId": "renewSession", "parameters": [ { "name": "id", @@ -20289,15 +23486,33 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { - "200": { - "description": "OK", + "202": { + "description": "Accepted", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorRunDurationSummaryDto" + "$ref": "#/components/schemas/SingleValueResponseRunDto" } } } @@ -20415,13 +23630,13 @@ } } }, - "/api/v1/monitors/{id}/secret-requests": { - "get": { + "/api/v1/monitors/{id}/session/revoke": { + "post": { "tags": [ - "Monitor secret requests" + "Monitor session" ], - "summary": "List secret requests for a monitor", - "operationId": "list_20", + "summary": "Revoke the monitor session", + "operationId": "revokeSession", "parameters": [ { "name": "id", @@ -20433,13 +23648,21 @@ } }, { - "name": "revisionId", - "in": "query", - "description": "Revision whose key demand to preview; null uses live", + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", "required": false, "schema": { - "type": "string", - "format": "uuid" + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } ], @@ -20449,7 +23672,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorSecretRequestsDto" + "$ref": "#/components/schemas/SingleValueResponseMonitorSessionDto" } } } @@ -20567,13 +23790,13 @@ } } }, - "/api/v1/monitors/{id}/secret-requests/{key}": { - "put": { + "/api/v1/monitors/{id}/sessions": { + "get": { "tags": [ - "Monitor secret requests" + "Monitor session" ], - "summary": "Attach or clear a remapped secret for a key", - "operationId": "remap", + "summary": "List sign-in sessions by setup file", + "operationId": "listMonitorSetupSessions", "parameters": [ { "name": "id", @@ -20585,31 +23808,22 @@ } }, { - "name": "key", - "in": "path", - "required": true, + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RemapSecretRequest" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorSecretRequestsDto" + "$ref": "#/components/schemas/TableValueResultMonitorSessionDto" } } } @@ -20725,15 +23939,13 @@ } } } - } - }, - "/api/v1/monitors/{id}/secret-requests/rescan": { - "post": { + }, + "put": { "tags": [ - "Monitor secret requests" + "Monitor session" ], - "summary": "Rescan secret requests from the active package", - "operationId": "rescan", + "summary": "Create or update one setup-file session", + "operationId": "upsertMonitorSetupSession", "parameters": [ { "name": "id", @@ -20743,15 +23955,34 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpsertMonitorSessionRequest" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorSecretRequestsDto" + "$ref": "#/components/schemas/SingleValueResponseMonitorSessionDto" } } } @@ -20869,13 +24100,13 @@ } } }, - "/api/v1/monitors/{id}/session": { - "get": { + "/api/v1/monitors/{id}/sessions/renew": { + "post": { "tags": [ "Monitor session" ], - "summary": "Get the monitor session", - "operationId": "getSession", + "summary": "Capture a new session for one setup file", + "operationId": "renewMonitorSetupSession", "parameters": [ { "name": "id", @@ -20885,165 +24116,42 @@ "type": "string", "format": "uuid" } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorSessionDto" - } - } - } - }, - "400": { - "description": "Bad request — the payload failed validation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized — missing or invalid credentials", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "402": { - "description": "Payment required — the plan or quota does not allow this", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden — the actor lacks permission for this resource", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not found — the requested resource does not exist", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "409": { - "description": "Conflict — the request collides with current resource state", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "410": { - "description": "Gone — the resource is no longer available", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "429": { - "description": "Too many requests — retry after the window resets", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } }, - "500": { - "description": "Internal server error — see the message field for details", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + { + "name": "setupFile", + "in": "query", + "description": "Setup file to capture", + "required": true, + "schema": { + "type": "string" } }, - "502": { - "description": "Bad gateway — an upstream provider returned an error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" } }, - "503": { - "description": "Service unavailable — try again shortly", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - }, - "put": { - "tags": [ - "Monitor session" - ], - "summary": "Create or update the monitor session", - "operationId": "putSession", - "parameters": [ { - "name": "id", - "in": "path", - "required": true, + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpsertMonitorSessionRequest" - } - } - }, - "required": true - }, "responses": { - "200": { - "description": "OK", + "202": { + "description": "Accepted", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorSessionDto" + "$ref": "#/components/schemas/SingleValueResponseRunDto" } } } @@ -21161,13 +24269,13 @@ } } }, - "/api/v1/monitors/{id}/session/renew": { + "/api/v1/monitors/{id}/sessions/revoke": { "post": { "tags": [ "Monitor session" ], - "summary": "Renew the monitor session", - "operationId": "renewSession", + "summary": "Revoke the cache for one setup file", + "operationId": "revokeMonitorSetupSession", "parameters": [ { "name": "id", @@ -21177,15 +24285,42 @@ "type": "string", "format": "uuid" } + }, + { + "name": "setupFile", + "in": "query", + "description": "Setup file to revoke", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { - "202": { - "description": "Accepted", + "200": { + "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseRunDto" + "$ref": "#/components/schemas/SingleValueResponseMonitorSessionDto" } } } @@ -21303,13 +24438,13 @@ } } }, - "/api/v1/monitors/{id}/session/revoke": { - "post": { + "/api/v1/monitors/{id}/settings/preview": { + "get": { "tags": [ - "Monitor session" + "Monitors" ], - "summary": "Revoke the monitor session", - "operationId": "revokeSession", + "summary": "Projected run volume and meter headroom", + "operationId": "settingsPreview", "parameters": [ { "name": "id", @@ -21319,6 +24454,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -21327,7 +24471,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorSessionDto" + "$ref": "#/components/schemas/SingleValueResponseMonitorSettingsPreviewDto" } } } @@ -21445,13 +24589,14 @@ } } }, - "/api/v1/monitors/{id}/sessions": { + "/api/v1/monitors/{id}/status-pages": { "get": { "tags": [ - "Monitor session" + "Monitors" ], - "summary": "List sign-in sessions by setup file", - "operationId": "listMonitorSetupSessions", + "summary": "List status pages that contain this monitor as a component", + "description": "Returns all status pages where this monitor appears as a component, enabling the detail page to show 'Appears On' cross-links.", + "operationId": "listStatusPagesForMonitor", "parameters": [ { "name": "id", @@ -21461,6 +24606,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -21469,7 +24623,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/TableValueResultMonitorSessionDto" + "$ref": "#/components/schemas/TableValueResultStatusPageDto" } } } @@ -21585,13 +24739,15 @@ } } } - }, - "put": { + } + }, + "/api/v1/monitors/{id}/tags": { + "get": { "tags": [ - "Monitor session" + "Monitors" ], - "summary": "Create or update one setup-file session", - "operationId": "upsertMonitorSetupSession", + "summary": "Get all tags applied to a monitor", + "operationId": "getMonitorTags", "parameters": [ { "name": "id", @@ -21601,25 +24757,24 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpsertMonitorSessionRequest" - } - } - }, - "required": true - }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorSessionDto" + "$ref": "#/components/schemas/TableValueResultTagDto" } } } @@ -21735,15 +24890,13 @@ } } } - } - }, - "/api/v1/monitors/{id}/sessions/renew": { + }, "post": { "tags": [ - "Monitor session" + "Monitors" ], - "summary": "Capture a new session for one setup file", - "operationId": "renewMonitorSetupSession", + "summary": "Add tags to a monitor; supports existing tag IDs and inline creation of new tags", + "operationId": "addMonitorTags", "parameters": [ { "name": "id", @@ -21755,22 +24908,41 @@ } }, { - "name": "setupFile", - "in": "query", - "description": "Setup file to capture", - "required": true, + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AddMonitorTagsRequest" + } + } + }, + "required": true + }, "responses": { - "202": { - "description": "Accepted", + "200": { + "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseRunDto" + "$ref": "#/components/schemas/TableValueResultTagDto" } } } @@ -21886,15 +25058,13 @@ } } } - } - }, - "/api/v1/monitors/{id}/sessions/revoke": { - "post": { + }, + "delete": { "tags": [ - "Monitor session" + "Monitors" ], - "summary": "Revoke the cache for one setup file", - "operationId": "revokeMonitorSetupSession", + "summary": "Remove tags from a monitor by their IDs", + "operationId": "removeMonitorTags", "parameters": [ { "name": "id", @@ -21906,26 +25076,29 @@ } }, { - "name": "setupFile", - "in": "query", - "description": "Setup file to revoke", - "required": true, + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { "type": "string" } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorSessionDto" - } + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RemoveMonitorTagsRequest" } } }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, "400": { "description": "Bad request — the payload failed validation", "content": { @@ -22039,13 +25212,13 @@ } } }, - "/api/v1/monitors/{id}/settings/preview": { - "get": { + "/api/v1/monitors/{id}/takeover": { + "post": { "tags": [ "Monitors" ], - "summary": "Projected run volume and meter headroom", - "operationId": "settingsPreview", + "summary": "Claim a field for dashboard ownership or reset an overlay", + "operationId": "takeover", "parameters": [ { "name": "id", @@ -22055,15 +25228,43 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TakeoverMonitorRequest" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorSettingsPreviewDto" + "$ref": "#/components/schemas/SingleValueResponseMonitorDto" } } } @@ -22181,14 +25382,14 @@ } } }, - "/api/v1/monitors/{id}/status-pages": { - "get": { + "/api/v1/monitors/{id}/test": { + "post": { "tags": [ "Monitors" ], - "summary": "List status pages that contain this monitor as a component", - "description": "Returns all status pages where this monitor appears as a component, enabling the detail page to show 'Appears On' cross-links.", - "operationId": "listStatusPagesForMonitor", + "summary": "Test an existing monitor", + "description": "Uptime monitors run their saved config and assertions once through the probe and return the probe result (200) without persisting it. Browser and multi-step API monitors admit a queued validation run (202) that does not vote on health; poll the run for its outcome. Optional environmentId defaults to the monitor's environment; optional region defaults to the monitor's first region.", + "operationId": "testExisting", "parameters": [ { "name": "id", @@ -22198,15 +25399,52 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CodeTestTargetRequest" + } + } + } + }, "responses": { "200": { - "description": "OK", + "description": "Probe result for an uptime monitor", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/TableValueResultStatusPageDto" + "$ref": "#/components/schemas/SingleValueResponseMonitorTestResultDto" + } + } + } + }, + "202": { + "description": "Queued validation run for a browser or multi-step API monitor", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/SingleValueResponseRunDto" } } } @@ -22324,13 +25562,14 @@ } } }, - "/api/v1/monitors/{id}/tags": { - "get": { + "/api/v1/monitors/{id}/test-notifications": { + "post": { "tags": [ "Monitors" ], - "summary": "Get all tags applied to a monitor", - "operationId": "getMonitorTags", + "summary": "Send test notifications through the monitor's alert channels", + "description": "Sends a test alert to all specified channel IDs (must be channels attached to this monitor). If no channelIds are provided, tests all attached channels. Returns per-channel results.", + "operationId": "testNotifications", "parameters": [ { "name": "id", @@ -22340,15 +25579,43 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TestMonitorNotificationsRequest" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/TableValueResultTagDto" + "$ref": "#/components/schemas/TableValueResultTestChannelResult" } } } @@ -22464,13 +25731,16 @@ } } } - }, + } + }, + "/api/v1/monitors/{id}/transfer": { "post": { "tags": [ "Monitors" ], - "summary": "Add tags to a monitor; supports existing tag IDs and inline creation of new tags", - "operationId": "addMonitorTags", + "summary": "Transfer a monitor to another owning tool", + "description": "Changes managedBy in one audited call. Required to change the owner of an owner-enforced or code monitor.", + "operationId": "transfer", "parameters": [ { "name": "id", @@ -22480,13 +25750,31 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AddMonitorTagsRequest" + "$ref": "#/components/schemas/TransferMonitorRequest" } } }, @@ -22498,7 +25786,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/TableValueResultTagDto" + "$ref": "#/components/schemas/SingleValueResponseMonitorDto" } } } @@ -22614,13 +25902,16 @@ } } } - }, - "delete": { + } + }, + "/api/v1/monitors/{id}/triggers": { + "post": { "tags": [ - "Monitors" + "Monitor Runs" ], - "summary": "Remove tags from a monitor by their IDs", - "operationId": "removeMonitorTags", + "summary": "Trigger a code monitor in several regions", + "description": "Starts one queued run per region; every configured region when none are given. Works on paused monitors. Does not affect health unless signal is true.", + "operationId": "triggerMonitorRuns", "parameters": [ { "name": "id", @@ -22630,21 +25921,45 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RemoveMonitorTagsRequest" + "$ref": "#/components/schemas/TriggerRunRequest" } } - }, - "required": true + } }, "responses": { - "204": { - "description": "No Content" + "202": { + "description": "Accepted", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/SingleValueResponseTriggerRunsResponse" + } + } + } }, "400": { "description": "Bad request — the payload failed validation", @@ -22759,13 +26074,13 @@ } } }, - "/api/v1/monitors/{id}/takeover": { + "/api/v1/monitors/{id}/unmute": { "post": { "tags": [ "Monitors" ], - "summary": "Claim a field for dashboard ownership or reset an overlay", - "operationId": "takeover", + "summary": "Clear mute overlay", + "operationId": "unmute", "parameters": [ { "name": "id", @@ -22775,18 +26090,26 @@ "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TakeoverMonitorRequest" - } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" } }, - "required": true - }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", @@ -22911,14 +26234,14 @@ } } }, - "/api/v1/monitors/{id}/test": { - "post": { + "/api/v1/monitors/{id}/uptime": { + "get": { "tags": [ - "Monitors" + "Check Results" ], - "summary": "Test an existing monitor", - "description": "Uptime monitors run their saved config and assertions once through the probe and return the probe result (200) without persisting it. Browser and multi-step API monitors admit a queued validation run (202) that does not vote on health; poll the run for its outcome. Optional environmentId defaults to the monitor's environment; optional region defaults to the monitor's first region.", - "operationId": "testExisting", + "summary": "Get uptime statistics", + "description": "Returns uptime percentage and latency statistics for the requested time window, computed from continuous aggregates. Uses hourly aggregates for 24h/7d windows and daily aggregates for 30d/90d windows. Daily windows fall back to hourly when the daily rollup reports fewer checks.", + "operationId": "getUptime", "parameters": [ { "name": "id", @@ -22928,44 +26251,49 @@ "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CodeTestTargetRequest" - } + }, + { + "name": "window", + "in": "query", + "description": "Time window for uptime calculation", + "required": false, + "schema": { + "type": "string", + "enum": [ + "24h", + "7d", + "30d", + "90d" + ] + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } - }, + ], "responses": { "200": { - "description": "Probe result for an uptime monitor", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorTestResultDto" - } - } - } - }, - "202": { - "description": "Queued validation run for a browser or multi-step API monitor", + "description": "Uptime statistics", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseRunDto" + "$ref": "#/components/schemas/UptimeDto" } } } }, "400": { - "description": "Bad request — the payload failed validation", + "description": "Invalid window parameter", "content": { - "application/json": { + "*/*": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/SingleValueResponseUptimeDto" } } } @@ -22991,21 +26319,21 @@ } }, "403": { - "description": "Forbidden — the actor lacks permission for this resource", + "description": "Monitor does not belong to the caller's org", "content": { - "application/json": { + "*/*": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/SingleValueResponseUptimeDto" } } } }, "404": { - "description": "Not found — the requested resource does not exist", + "description": "Monitor not found", "content": { - "application/json": { + "*/*": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/SingleValueResponseUptimeDto" } } } @@ -23073,14 +26401,13 @@ } } }, - "/api/v1/monitors/{id}/test-notifications": { + "/api/v1/monitors/{id}/usage-preview": { "post": { "tags": [ "Monitors" ], - "summary": "Send test notifications through the monitor's alert channels", - "description": "Sends a test alert to all specified channel IDs (must be channels attached to this monitor). If no channelIds are provided, tests all attached channels. Returns per-channel results.", - "operationId": "testNotifications", + "summary": "Project monthly usage for an update payload", + "operationId": "previewUsage", "parameters": [ { "name": "id", @@ -23090,13 +26417,31 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TestMonitorNotificationsRequest" + "$ref": "#/components/schemas/UpdateMonitorRequest" } } }, @@ -23108,7 +26453,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/TableValueResultTestChannelResult" + "$ref": "#/components/schemas/SingleValueResponseMonitorUsageProjectionDto" } } } @@ -23226,14 +26571,14 @@ } } }, - "/api/v1/monitors/{id}/transfer": { - "post": { + "/api/v1/monitors/{id}/versions": { + "get": { "tags": [ "Monitors" ], - "summary": "Transfer a monitor to another owning tool", - "description": "Changes managedBy in one audited call. Required to change the owner of an owner-enforced or code monitor.", - "operationId": "transfer", + "summary": "List version history for a monitor", + "description": "Returns a paginated list of mutation snapshots for the monitor, newest first. Each version captures the full monitor config at the time of a PUT /monitors/{id} call.", + "operationId": "listVersions", "parameters": [ { "name": "id", @@ -23243,25 +26588,61 @@ "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TransferMonitorRequest" - } + }, + { + "name": "page", + "in": "query", + "description": "Zero-based page index (0..N)", + "required": false, + "schema": { + "minimum": 0, + "type": "integer", + "default": 0 } }, - "required": true - }, + { + "name": "size", + "in": "query", + "description": "The size of the page to be returned", + "required": false, + "schema": { + "minimum": 1, + "type": "integer", + "default": 20 + } + }, + { + "name": "sort", + "in": "query", + "description": "Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [ + "version,DESC" + ] + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorDto" + "$ref": "#/components/schemas/TableValueResultMonitorVersionDto" } } } @@ -23379,14 +26760,14 @@ } } }, - "/api/v1/monitors/{id}/triggers": { - "post": { + "/api/v1/monitors/{id}/versions/{version}": { + "get": { "tags": [ - "Monitor Runs" + "Monitors" ], - "summary": "Trigger a code monitor in several regions", - "description": "Starts one queued run per region; every configured region when none are given. Works on paused monitors. Does not affect health unless signal is true.", - "operationId": "triggerMonitorRuns", + "summary": "Get a specific version snapshot for a monitor", + "description": "Returns the full monitor config snapshot captured at the given version number.", + "operationId": "getVersion", "parameters": [ { "name": "id", @@ -23398,30 +26779,31 @@ } }, { - "name": "Idempotency-Key", + "name": "version", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "X-DevHelm-Client", "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", "required": false, "schema": { "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TriggerRunRequest" - } - } - } - }, "responses": { - "202": { - "description": "Accepted", + "200": { + "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseTriggerRunsResponse" + "$ref": "#/components/schemas/SingleValueResponseMonitorVersionDto" } } } @@ -23539,31 +26921,50 @@ } } }, - "/api/v1/monitors/{id}/unmute": { - "post": { + "/api/v1/monitors/{monitorId}/alert-channels": { + "put": { "tags": [ - "Monitors" + "Monitor Alert Channels" ], - "summary": "Clear mute overlay", - "operationId": "unmute", + "summary": "Replace the linked alert channel set for a monitor", + "operationId": "setChannels", "parameters": [ { - "name": "id", + "name": "monitorId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SetAlertChannelsRequest" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorDto" + "$ref": "#/components/schemas/SingleValueResponseListUUID" } } } @@ -23681,17 +27082,16 @@ } } }, - "/api/v1/monitors/{id}/uptime": { - "get": { + "/api/v1/monitors/{monitorId}/assertions": { + "post": { "tags": [ - "Check Results" + "Monitor Assertions" ], - "summary": "Get uptime statistics", - "description": "Returns uptime percentage and latency statistics for the requested time window, computed from continuous aggregates. Uses hourly aggregates for 24h/7d windows and daily aggregates for 30d/90d windows. Daily windows fall back to hourly when the daily rollup reports fewer checks.", - "operationId": "getUptime", + "summary": "Add an assertion to a monitor", + "operationId": "add", "parameters": [ { - "name": "id", + "name": "monitorId", "in": "path", "required": true, "schema": { @@ -23700,160 +27100,21 @@ } }, { - "name": "window", - "in": "query", - "description": "Time window for uptime calculation", + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", "required": false, "schema": { - "type": "string", - "enum": [ - "24h", - "7d", - "30d", - "90d" - ] - } - } - ], - "responses": { - "200": { - "description": "Uptime statistics", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/UptimeDto" - } - } - } - }, - "400": { - "description": "Invalid window parameter", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/SingleValueResponseUptimeDto" - } - } - } - }, - "401": { - "description": "Unauthorized — missing or invalid credentials", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "402": { - "description": "Payment required — the plan or quota does not allow this", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "403": { - "description": "Monitor does not belong to the caller's org", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/SingleValueResponseUptimeDto" - } - } - } - }, - "404": { - "description": "Monitor not found", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/SingleValueResponseUptimeDto" - } - } - } - }, - "409": { - "description": "Conflict — the request collides with current resource state", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "410": { - "description": "Gone — the resource is no longer available", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "429": { - "description": "Too many requests — retry after the window resets", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal server error — see the message field for details", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "502": { - "description": "Bad gateway — an upstream provider returned an error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + "type": "string" } }, - "503": { - "description": "Service unavailable — try again shortly", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/api/v1/monitors/{id}/usage-preview": { - "post": { - "tags": [ - "Monitors" - ], - "summary": "Project monthly usage for an update payload", - "operationId": "previewUsage", - "parameters": [ { - "name": "id", - "in": "path", - "required": true, + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], @@ -23861,19 +27122,19 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateMonitorRequest" + "$ref": "#/components/schemas/CreateAssertionRequest" } } }, "required": true }, "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorUsageProjectionDto" + "$ref": "#/components/schemas/SingleValueResponseMonitorAssertionDto" } } } @@ -23991,17 +27252,16 @@ } } }, - "/api/v1/monitors/{id}/versions": { - "get": { + "/api/v1/monitors/{monitorId}/assertions/{assertionId}": { + "put": { "tags": [ - "Monitors" + "Monitor Assertions" ], - "summary": "List version history for a monitor", - "description": "Returns a paginated list of mutation snapshots for the monitor, newest first. Each version captures the full monitor config at the time of a PUT /monitors/{id} call.", - "operationId": "listVersions", + "summary": "Update an assertion on a monitor", + "operationId": "update_10", "parameters": [ { - "name": "id", + "name": "monitorId", "in": "path", "required": true, "schema": { @@ -24010,21 +27270,41 @@ } }, { - "name": "pageable", - "in": "query", + "name": "assertionId", + "in": "path", "required": true, "schema": { - "$ref": "#/components/schemas/Pageable" + "type": "string", + "format": "uuid" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateAssertionRequest" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/TableValueResultMonitorVersionDto" + "$ref": "#/components/schemas/SingleValueResponseMonitorAssertionDto" } } } @@ -24140,19 +27420,16 @@ } } } - } - }, - "/api/v1/monitors/{id}/versions/{version}": { - "get": { + }, + "delete": { "tags": [ - "Monitors" + "Monitor Assertions" ], - "summary": "Get a specific version snapshot for a monitor", - "description": "Returns the full monitor config snapshot captured at the given version number.", - "operationId": "getVersion", + "summary": "Remove an assertion from a monitor", + "operationId": "remove_1", "parameters": [ { - "name": "id", + "name": "monitorId", "in": "path", "required": true, "schema": { @@ -24161,25 +27438,27 @@ } }, { - "name": "version", + "name": "assertionId", "in": "path", "required": true, "schema": { - "type": "integer", - "format": "int32" + "type": "string", + "format": "uuid" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } ], "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorVersionDto" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad request — the payload failed validation", @@ -24294,13 +27573,13 @@ } } }, - "/api/v1/monitors/{monitorId}/alert-channels": { + "/api/v1/monitors/{monitorId}/auth": { "put": { "tags": [ - "Monitor Alert Channels" + "Monitor Auth" ], - "summary": "Replace the linked alert channel set for a monitor", - "operationId": "setChannels", + "summary": "Update authentication config for a monitor", + "operationId": "update_9", "parameters": [ { "name": "monitorId", @@ -24310,13 +27589,22 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SetAlertChannelsRequest" + "$ref": "#/components/schemas/UpdateMonitorAuthRequest" } } }, @@ -24328,7 +27616,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseListUUID" + "$ref": "#/components/schemas/SingleValueResponseMonitorAuthDto" } } } @@ -24444,15 +27732,13 @@ } } } - } - }, - "/api/v1/monitors/{monitorId}/assertions": { + }, "post": { "tags": [ - "Monitor Assertions" + "Monitor Auth" ], - "summary": "Add an assertion to a monitor", - "operationId": "add", + "summary": "Set authentication config for a monitor", + "operationId": "set", "parameters": [ { "name": "monitorId", @@ -24462,13 +27748,31 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateAssertionRequest" + "$ref": "#/components/schemas/SetMonitorAuthRequest" } } }, @@ -24480,7 +27784,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorAssertionDto" + "$ref": "#/components/schemas/SingleValueResponseMonitorAuthDto" } } } @@ -24596,15 +27900,13 @@ } } } - } - }, - "/api/v1/monitors/{monitorId}/assertions/{assertionId}": { - "put": { + }, + "delete": { "tags": [ - "Monitor Assertions" + "Monitor Auth" ], - "summary": "Update an assertion on a monitor", - "operationId": "update_10", + "summary": "Remove authentication config from a monitor", + "operationId": "remove", "parameters": [ { "name": "monitorId", @@ -24616,35 +27918,18 @@ } }, { - "name": "assertionId", - "in": "path", - "required": true, + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateAssertionRequest" - } - } - }, - "required": true - }, "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorAssertionDto" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad request — the payload failed validation", @@ -24757,17 +28042,21 @@ } } } - }, - "delete": { + } + }, + "/api/v1/monitors/{monitorId}/policy": { + "get": { "tags": [ - "Monitor Assertions" + "Incident Policies" ], - "summary": "Remove an assertion from a monitor", - "operationId": "remove_1", + "summary": "Get incident policy for a monitor", + "description": "Returns the trigger rules, confirmation settings, and recovery settings for the given monitor.", + "operationId": "get_5", "parameters": [ { "name": "monitorId", "in": "path", + "description": "Monitor UUID", "required": true, "schema": { "type": "string", @@ -24775,18 +28064,25 @@ } }, { - "name": "assertionId", - "in": "path", - "required": true, + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "Policy found", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/IncidentPolicyDto" + } + } + } }, "400": { "description": "Bad request — the payload failed validation", @@ -24829,11 +28125,11 @@ } }, "404": { - "description": "Not found — the requested resource does not exist", + "description": "Monitor or policy not found", "content": { - "application/json": { + "*/*": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/SingleValueResponseIncidentPolicyDto" } } } @@ -24899,31 +28195,40 @@ } } } - } - }, - "/api/v1/monitors/{monitorId}/auth": { + }, "put": { "tags": [ - "Monitor Auth" + "Incident Policies" ], - "summary": "Update authentication config for a monitor", - "operationId": "update_9", + "summary": "Update incident policy for a monitor", + "description": "Replaces the trigger rules, confirmation settings, and recovery settings. All fields are validated before saving.", + "operationId": "update_8", "parameters": [ { "name": "monitorId", "in": "path", + "description": "Monitor UUID", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateMonitorAuthRequest" + "$ref": "#/components/schemas/UpdateIncidentPolicyRequest" } } }, @@ -24931,21 +28236,21 @@ }, "responses": { "200": { - "description": "OK", + "description": "Policy updated", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorAuthDto" + "$ref": "#/components/schemas/IncidentPolicyDto" } } } }, "400": { - "description": "Bad request — the payload failed validation", + "description": "Validation error in JSONB shape", "content": { - "application/json": { + "*/*": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/SingleValueResponseIncidentPolicyDto" } } } @@ -24981,11 +28286,11 @@ } }, "404": { - "description": "Not found — the requested resource does not exist", + "description": "Monitor or policy not found", "content": { - "application/json": { + "*/*": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/SingleValueResponseIncidentPolicyDto" } } } @@ -25051,41 +28356,66 @@ } } } - }, - "post": { + } + }, + "/api/v1/monitors/batch-history": { + "get": { "tags": [ - "Monitor Auth" + "Monitors" ], - "summary": "Set authentication config for a monitor", - "operationId": "set", + "summary": "Availability, p95 and ticks for several monitors", + "description": "History for up to 100 monitors in one call, so a list page needs no per-monitor request. window is 24h (default), 7d or 30d.", + "operationId": "batchHistory", "parameters": [ { - "name": "monitorId", - "in": "path", + "name": "ids", + "in": "query", + "description": "Monitor ids, comma-separated; at most 100", "required": true, "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SetMonitorAuthRequest" + "type": "array", + "items": { + "type": "string", + "format": "uuid" } } }, - "required": true - }, + { + "name": "window", + "in": "query", + "description": "History window: 24h (default), 7d or 30d", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "density", + "in": "query", + "description": "Return 48 display-only history buckets", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { - "201": { - "description": "Created", + "200": { + "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorAuthDto" + "$ref": "#/components/schemas/SingleValueResponseMonitorBatchHistoryDto" } } } @@ -25201,27 +28531,56 @@ } } } - }, - "delete": { + } + }, + "/api/v1/monitors/bulk": { + "post": { "tags": [ - "Monitor Auth" + "Monitors" ], - "summary": "Remove authentication config from a monitor", - "operationId": "remove", + "summary": "Bulk action on monitors", + "description": "Applies PAUSE, RESUME, DELETE, ADD_TAG, REMOVE_TAG, UPDATE_SCHEDULE, or RUN to a list of monitors. Returns a partial-success response indicating which monitors succeeded and which failed.", + "operationId": "bulkAction", "parameters": [ { - "name": "monitorId", - "in": "path", - "required": true, + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, "schema": { - "type": "string", - "format": "uuid" + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BulkMonitorActionRequest" + } + } + }, + "required": true + }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/SingleValueResponseBulkMonitorActionResult" + } + } + } }, "400": { "description": "Bad request — the payload failed validation", @@ -25336,33 +28695,44 @@ } } }, - "/api/v1/monitors/{monitorId}/policy": { + "/api/v1/monitors/export.csv": { "get": { "tags": [ - "Incident Policies" + "monitor-export-controller" ], - "summary": "Get incident policy for a monitor", - "description": "Returns the trigger rules, confirmation settings, and recovery settings for the given monitor.", - "operationId": "get_5", + "summary": "Export up to 200 explicitly selected monitors as CSV", + "operationId": "csv", "parameters": [ { - "name": "monitorId", - "in": "path", - "description": "Monitor UUID", + "name": "ids", + "in": "query", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } ], "responses": { "200": { - "description": "Policy found", + "description": "OK", "content": { - "*/*": { + "text/csv": { "schema": { - "$ref": "#/components/schemas/IncidentPolicyDto" + "type": "string", + "format": "byte" } } } @@ -25408,11 +28778,11 @@ } }, "404": { - "description": "Monitor or policy not found", + "description": "Not found — the requested resource does not exist", "content": { - "*/*": { + "application/json": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseIncidentPolicyDto" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -25478,53 +28848,275 @@ } } } - }, - "put": { + } + }, + "/api/v1/monitors/facets": { + "get": { "tags": [ - "Incident Policies" + "Monitors" ], - "summary": "Update incident policy for a monitor", - "description": "Replaces the trigger rules, confirmation settings, and recovery settings. All fields are validated before saving.", - "operationId": "update_8", + "summary": "Count monitors per list group and facet value", + "description": "Takes the same filters as the monitor list. Groups: failing, not_running, flaky, passing, running, paused. Facet fields: type, environment, region, tag, owner.", + "operationId": "facets", "parameters": [ { - "name": "monitorId", - "in": "path", - "description": "Monitor UUID", - "required": true, + "name": "enabled", + "in": "query", + "description": "Filter by enabled state (true/false)", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "status", + "in": "query", + "description": "Lifecycle status alias: 'active' (enabled=true) or 'paused' (enabled=false). Ignored when ?enabled is also supplied.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "type", + "in": "query", + "description": "Filter by monitor type", + "required": false, "schema": { "type": "string", - "format": "uuid" + "enum": [ + "HTTP", + "DNS", + "MCP_SERVER", + "TCP", + "ICMP", + "HEARTBEAT", + "BROWSER", + "MULTI_STEP_API" + ] } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateIncidentPolicyRequest" + }, + { + "name": "types", + "in": "query", + "description": "Filter by monitor types, comma-separated; matches any listed type", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "HTTP", + "DNS", + "MCP_SERVER", + "TCP", + "ICMP", + "HEARTBEAT", + "BROWSER", + "MULTI_STEP_API" + ] } } }, - "required": true - }, + { + "name": "managedBy", + "in": "query", + "description": "Filter by managed-by source", + "required": false, + "schema": { + "type": "string", + "enum": [ + "DASHBOARD", + "CLI", + "TERRAFORM", + "MCP", + "API", + "GIT" + ] + } + }, + { + "name": "tags", + "in": "query", + "description": "Filter by tag names, comma-separated (e.g. prod,critical); OR semantics", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "tag", + "in": "query", + "description": "Filter by a single tag name (alias for ?tags=); merged with ?tags using OR semantics", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "search", + "in": "query", + "description": "Case-insensitive name search", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "environmentId", + "in": "query", + "description": "Filter by environment ID", + "required": false, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "displayHealth", + "in": "query", + "description": "Filter by projected chip health", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "needsAttention", + "in": "query", + "description": "When true, only monitors that need operator attention", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "region", + "in": "query", + "description": "Filter by probe region", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "name", + "in": "query", + "description": "Exact, case-sensitive monitor name", + "required": false, + "schema": { + "type": "string", + "description": "Exact, case-sensitive monitor name" + } + }, + { + "name": "openIncident", + "in": "query", + "description": "Whether a confirmed incident is open", + "required": false, + "schema": { + "type": "boolean", + "description": "Whether a confirmed incident is open" + } + }, + { + "name": "muted", + "in": "query", + "description": "Whether alert delivery is currently muted", + "required": false, + "schema": { + "type": "boolean", + "description": "Whether alert delivery is currently muted" + } + }, + { + "name": "quarantined", + "in": "query", + "description": "Whether quarantine has not expired", + "required": false, + "schema": { + "type": "boolean", + "description": "Whether quarantine has not expired" + } + }, + { + "name": "pausedBefore", + "in": "query", + "description": "Only monitors paused before this timestamp", + "required": false, + "schema": { + "type": "string", + "description": "Only monitors paused before this timestamp", + "format": "date-time" + } + }, + { + "name": "flaky", + "in": "query", + "description": "Whether recent completed cycles recovered on retry", + "required": false, + "schema": { + "type": "boolean", + "description": "Whether recent completed cycles recovered on retry" + } + }, + { + "name": "group", + "in": "query", + "description": "List group: failing, not_running, passing, or paused", + "required": false, + "schema": { + "type": "string", + "description": "List group: failing, not_running, passing, or paused" + } + }, + { + "name": "ownerProject", + "in": "query", + "description": "Exact project declared by the owning tool", + "required": false, + "schema": { + "type": "string", + "description": "Exact project declared by the owning tool" + } + }, + { + "name": "sort", + "in": "query", + "description": "Use state for group and streak ordering", + "required": false, + "schema": { + "type": "string", + "description": "Use state for group and streak ordering" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { - "description": "Policy updated", + "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/IncidentPolicyDto" + "$ref": "#/components/schemas/SingleValueResponseMonitorListFacetsDto" } } } }, "400": { - "description": "Validation error in JSONB shape", + "description": "Bad request — the payload failed validation", "content": { - "*/*": { + "application/json": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseIncidentPolicyDto" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -25560,11 +29152,11 @@ } }, "404": { - "description": "Monitor or policy not found", + "description": "Not found — the requested resource does not exist", "content": { - "*/*": { + "application/json": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseIncidentPolicyDto" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -25632,55 +29224,61 @@ } } }, - "/api/v1/monitors/batch-history": { - "get": { + "/api/v1/monitors/test": { + "post": { "tags": [ "Monitors" ], - "summary": "Availability, p95 and ticks for several monitors", - "description": "History for up to 100 monitors in one call, so a list page needs no per-monitor request. window is 24h (default), 7d or 30d.", - "operationId": "batchHistory", + "summary": "Ad-hoc monitor test", + "description": "Uptime monitors run once from an inline config and return a probe result (200). Browser and multi-step API code admits a queued validation run (202) with no monitor: send an uploaded bundle as code, plus environmentId. The run is billed, never votes on health, and is listed by GET /runs only with adhoc=true.", + "operationId": "testAdHoc", "parameters": [ { - "name": "ids", - "in": "query", - "description": "Monitor ids, comma-separated; at most 100", - "required": true, - "schema": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - } - }, - { - "name": "window", - "in": "query", - "description": "History window: 24h (default), 7d or 30d", + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", "required": false, "schema": { "type": "string" } }, { - "name": "density", - "in": "query", - "description": "Return 48 display-only history buckets", + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", "required": false, "schema": { - "type": "integer", - "format": "int32" + "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MonitorTestRequest" + } + } + }, + "required": true + }, "responses": { "200": { - "description": "OK", + "description": "Probe result for an uptime monitor", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorBatchHistoryDto" + "$ref": "#/components/schemas/SingleValueResponseMonitorTestResultDto" + } + } + } + }, + "202": { + "description": "Queued validation run for a browser or multi-step API bundle", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/SingleValueResponseRunDto" } } } @@ -25798,31 +29396,68 @@ } } }, - "/api/v1/monitors/bulk": { - "post": { + "/api/v1/monitors/trash": { + "get": { "tags": [ "Monitors" ], - "summary": "Bulk action on monitors", - "description": "Applies PAUSE, RESUME, DELETE, ADD_TAG, REMOVE_TAG, UPDATE_SCHEDULE, or RUN to a list of monitors. Returns a partial-success response indicating which monitors succeeded and which failed.", - "operationId": "bulkAction", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BulkMonitorActionRequest" - } + "summary": "List deleted monitors that can still be restored", + "operationId": "listTrash", + "parameters": [ + { + "name": "page", + "in": "query", + "description": "Zero-based page index (0..N)", + "required": false, + "schema": { + "minimum": 0, + "type": "integer", + "default": 0 } }, - "required": true - }, + { + "name": "size", + "in": "query", + "description": "The size of the page to be returned", + "required": false, + "schema": { + "minimum": 1, + "type": "integer", + "default": 20 + } + }, + { + "name": "sort", + "in": "query", + "description": "Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [ + "deletedAt,DESC" + ] + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseBulkMonitorActionResult" + "$ref": "#/components/schemas/TableValueResultMonitorDto" } } } @@ -25940,35 +29575,50 @@ } } }, - "/api/v1/monitors/export.csv": { - "get": { + "/api/v1/monitors/usage-preview": { + "post": { "tags": [ - "monitor-export-controller" + "Monitors" ], - "summary": "Export up to 200 explicitly selected monitors as CSV", - "operationId": "csv", + "summary": "Project monthly usage for a create payload", + "operationId": "previewUsage_1", "parameters": [ { - "name": "ids", - "in": "query", - "required": true, + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, "schema": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateMonitorRequest" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { - "text/csv": { + "*/*": { "schema": { - "type": "string", - "format": "byte" + "$ref": "#/components/schemas/SingleValueResponseMonitorUsageProjectionDto" } } } @@ -26086,170 +29736,50 @@ } } }, - "/api/v1/monitors/facets": { - "get": { + "/api/v1/monitors/validate": { + "post": { "tags": [ "Monitors" ], - "summary": "Count monitors per list group and facet value", - "description": "Takes the same filters as the monitor list. Groups: failing, not_running, flaky, passing, running, paused. Facet fields: type, environment, region, tag, owner.", - "operationId": "facets", + "summary": "Dry-run plan, secret, and runtime checks", + "operationId": "validateMonitors", "parameters": [ { - "name": "enabled", - "in": "query", - "description": "Filter by enabled state (true/false)", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "status", - "in": "query", - "description": "Lifecycle status alias: 'active' (enabled=true) or 'paused' (enabled=false). Ignored when ?enabled is also supplied.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "type", - "in": "query", - "description": "Filter by monitor type", - "required": false, - "schema": { - "type": "string", - "enum": [ - "HTTP", - "DNS", - "MCP_SERVER", - "TCP", - "ICMP", - "HEARTBEAT", - "BROWSER", - "MULTI_STEP_API" - ] - } - }, - { - "name": "types", - "in": "query", - "description": "Filter by monitor types, comma-separated; matches any listed type", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "HTTP", - "DNS", - "MCP_SERVER", - "TCP", - "ICMP", - "HEARTBEAT", - "BROWSER", - "MULTI_STEP_API" - ] - } - } - }, - { - "name": "managedBy", - "in": "query", - "description": "Filter by managed-by source", - "required": false, - "schema": { - "type": "string", - "enum": [ - "DASHBOARD", - "CLI", - "TERRAFORM", - "MCP", - "API" - ] - } - }, - { - "name": "tags", - "in": "query", - "description": "Filter by tag names, comma-separated (e.g. prod,critical); OR semantics", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "tag", - "in": "query", - "description": "Filter by a single tag name (alias for ?tags=); merged with ?tags using OR semantics", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "search", - "in": "query", - "description": "Case-insensitive name search", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "environmentId", - "in": "query", - "description": "Filter by environment ID", - "required": false, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "displayHealth", - "in": "query", - "description": "Filter by projected chip health", + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", "required": false, "schema": { "type": "string" } }, { - "name": "needsAttention", - "in": "query", - "description": "When true, only monitors that need operator attention", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "region", - "in": "query", - "description": "Filter by probe region", + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", "required": false, "schema": { "type": "string" } - }, - { - "name": "triage", - "in": "query", - "required": true, - "schema": { - "$ref": "#/components/schemas/MonitorTriageParams" - } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidateMonitorsRequest" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorListFacetsDto" + "$ref": "#/components/schemas/SingleValueResponseMonitorValidationResultDto" } } } @@ -26367,41 +29897,42 @@ } } }, - "/api/v1/monitors/test": { - "post": { + "/api/v1/notification-dispatches": { + "get": { "tags": [ - "Monitors" + "Notification Dispatches" ], - "summary": "Ad-hoc monitor test", - "description": "Uptime monitors run once from an inline config and return a probe result (200). Browser and multi-step API monitors with code admit a queued validation run (202) when that bundle is already saved on a monitor. Inline code without a bundle is refused.", - "operationId": "testAdHoc", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MonitorTestRequest" - } + "summary": "List all dispatches for an incident", + "description": "Returns all notification dispatches for the given incident that belong to the authenticated org's policies. Each dispatch includes delivery records for all associated channels.", + "operationId": "listByIncident", + "parameters": [ + { + "name": "incident_id", + "in": "query", + "description": "UUID of the incident to inspect", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { - "description": "Probe result for an uptime monitor", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorTestResultDto" - } - } - } - }, - "202": { - "description": "Queued validation run for a browser or multi-step API bundle", + "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseRunDto" + "$ref": "#/components/schemas/TableValueResultNotificationDispatchDto" } } } @@ -26519,20 +30050,31 @@ } } }, - "/api/v1/monitors/trash": { + "/api/v1/notification-dispatches/{id}": { "get": { "tags": [ - "Monitors" + "Notification Dispatches" ], - "summary": "List deleted monitors that can still be restored", - "operationId": "listTrash", + "summary": "Get a single dispatch with full escalation and delivery history", + "description": "Returns the dispatch state including current escalation step, acknowledgment info, and all delivery attempts made across every step.", + "operationId": "getById_3", "parameters": [ { - "name": "pageable", - "in": "query", + "name": "id", + "in": "path", "required": true, "schema": { - "$ref": "#/components/schemas/Pageable" + "type": "string", + "format": "uuid" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } ], @@ -26542,7 +30084,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/TableValueResultMonitorDto" + "$ref": "#/components/schemas/SingleValueResponseNotificationDispatchDto" } } } @@ -26660,30 +30202,50 @@ } } }, - "/api/v1/monitors/usage-preview": { + "/api/v1/notification-dispatches/{id}/acknowledge": { "post": { "tags": [ - "Monitors" + "Notification Dispatches" ], - "summary": "Project monthly usage for a create payload", - "operationId": "previewUsage_1", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateMonitorRequest" - } + "summary": "Acknowledge a notification dispatch", + "description": "Marks the dispatch as acknowledged. The dispatch must be in DELIVERED or ESCALATING state. Sets acknowledgedAt, acknowledgedBy (actor email), and acknowledgedVia (DASHBOARD).", + "operationId": "acknowledge", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorUsageProjectionDto" + "$ref": "#/components/schemas/SingleValueResponseNotificationDispatchDto" } } } @@ -26801,30 +30363,50 @@ } } }, - "/api/v1/monitors/validate": { + "/api/v1/notification-dispatches/{id}/unacknowledge": { "post": { "tags": [ - "Monitors" + "Notification Dispatches" ], - "summary": "Dry-run plan, secret, and runtime checks", - "operationId": "validateMonitors", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidateMonitorsRequest" - } + "summary": "Unacknowledge a notification dispatch", + "description": "Reverses a mistaken acknowledgment without reopening the incident. Allowed only from ACKNOWLEDGED. Clears ack fields, stays on the current escalation step, restores nextEscalationAt, and resumes escalation (ESCALATING if more steps remain, else DELIVERED). MEMBER+.", + "operationId": "unacknowledge", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseMonitorValidationResultDto" + "$ref": "#/components/schemas/SingleValueResponseNotificationDispatchDto" } } } @@ -26942,23 +30524,21 @@ } } }, - "/api/v1/notification-dispatches": { + "/api/v1/notification-policies": { "get": { "tags": [ - "Notification Dispatches" + "Notification Policies" ], - "summary": "List all dispatches for an incident", - "description": "Returns all notification dispatches for the given incident that belong to the authenticated org's policies. Each dispatch includes delivery records for all associated channels.", - "operationId": "listByIncident", + "summary": "List all notification policies for the authenticated org", + "operationId": "list_8", "parameters": [ { - "name": "incident_id", - "in": "query", - "description": "UUID of the incident to inspect", - "required": true, + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], @@ -26968,7 +30548,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/TableValueResultNotificationDispatchDto" + "$ref": "#/components/schemas/TableValueResultNotificationPolicyDto" } } } @@ -27084,34 +30664,50 @@ } } } - } - }, - "/api/v1/notification-dispatches/{id}": { - "get": { + }, + "post": { "tags": [ - "Notification Dispatches" + "Notification Policies" ], - "summary": "Get a single dispatch with full escalation and delivery history", - "description": "Returns the dispatch state including current escalation step, acknowledgment info, and all delivery attempts made across every step.", - "operationId": "getById_3", + "summary": "Create a notification policy with match rules and escalation chain", + "operationId": "create_9", "parameters": [ { - "name": "id", - "in": "path", - "required": true, + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, "schema": { - "type": "string", - "format": "uuid" + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateNotificationPolicyRequest" + } + } + }, + "required": true + }, "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseNotificationDispatchDto" + "$ref": "#/components/schemas/SingleValueResponseNotificationPolicyDto" } } } @@ -27229,14 +30825,13 @@ } } }, - "/api/v1/notification-dispatches/{id}/acknowledge": { - "post": { + "/api/v1/notification-policies/{id}": { + "get": { "tags": [ - "Notification Dispatches" + "Notification Policies" ], - "summary": "Acknowledge a notification dispatch", - "description": "Marks the dispatch as acknowledged. The dispatch must be in DELIVERED or ESCALATING state. Sets acknowledgedAt, acknowledgedBy (actor email), and acknowledgedVia (DASHBOARD).", - "operationId": "acknowledge", + "summary": "Get a notification policy by ID", + "operationId": "getById_1", "parameters": [ { "name": "id", @@ -27246,6 +30841,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -27254,7 +30858,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseNotificationDispatchDto" + "$ref": "#/components/schemas/SingleValueResponseNotificationPolicyDto" } } } @@ -27370,16 +30974,13 @@ } } } - } - }, - "/api/v1/notification-dispatches/{id}/unacknowledge": { - "post": { + }, + "put": { "tags": [ - "Notification Dispatches" + "Notification Policies" ], - "summary": "Unacknowledge a notification dispatch", - "description": "Reverses a mistaken acknowledgment without reopening the incident. Allowed only from ACKNOWLEDGED. Clears ack fields, stays on the current escalation step, restores nextEscalationAt, and resumes escalation (ESCALATING if more steps remain, else DELIVERED). MEMBER+.", - "operationId": "unacknowledge", + "summary": "Update a notification policy", + "operationId": "update_7", "parameters": [ { "name": "id", @@ -27389,15 +30990,34 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateNotificationPolicyRequest" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseNotificationDispatchDto" + "$ref": "#/components/schemas/SingleValueResponseNotificationPolicyDto" } } } @@ -27513,26 +31133,37 @@ } } } - } - }, - "/api/v1/notification-policies": { - "get": { + }, + "delete": { "tags": [ "Notification Policies" ], - "summary": "List all notification policies for the authenticated org", - "operationId": "list_8", - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/TableValueResultNotificationPolicyDto" - } - } + "summary": "Delete a notification policy", + "operationId": "delete_6", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, "400": { "description": "Bad request — the payload failed validation", "content": { @@ -27644,30 +31275,82 @@ } } } - }, - "post": { + } + }, + "/api/v1/notification-policies/{id}/dispatches": { + "get": { "tags": [ "Notification Policies" ], - "summary": "Create a notification policy with match rules and escalation chain", - "operationId": "create_9", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateNotificationPolicyRequest" - } + "summary": "List dispatches (firing history) for a notification policy", + "description": "Optional query params: since/until/cursor/limit. When all are omitted, returns the full history (legacy). When any is set, defaults to a 30-day window and limit 50. Response is CursorPage (hasMore + nextCursor), the same wrapper used by other append-only history endpoints.", + "operationId": "listDispatches", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "name": "since", + "in": "query", + "description": "Inclusive lower bound (ISO-8601); defaults to now−30d when windowing", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "until", + "in": "query", + "description": "Exclusive upper bound (ISO-8601); defaults to now when windowing", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "cursor", + "in": "query", + "description": "Opaque cursor from a previous nextCursor", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Page size 1–100 when windowing/paginating (default 50)", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { - "201": { - "description": "Created", + "200": { + "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseNotificationPolicyDto" + "$ref": "#/components/schemas/CursorPageNotificationDispatchDto" } } } @@ -27785,13 +31468,13 @@ } } }, - "/api/v1/notification-policies/{id}": { - "get": { + "/api/v1/notification-policies/{id}/test": { + "post": { "tags": [ "Notification Policies" ], - "summary": "Get a notification policy by ID", - "operationId": "getById_1", + "summary": "Dry-run: evaluate a policy's match rules against a supplied incident context", + "operationId": "test_1", "parameters": [ { "name": "id", @@ -27801,15 +31484,42 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TestNotificationPolicyRequest" + } + } + } + }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseNotificationPolicyDto" + "$ref": "#/components/schemas/SingleValueResponseTestMatchResult" } } } @@ -27925,41 +31635,62 @@ } } } - }, - "put": { + } + }, + "/api/v1/notifications": { + "get": { "tags": [ - "Notification Policies" + "Notifications" ], - "summary": "Update a notification policy", - "operationId": "update_7", + "summary": "List notifications for the current user", + "operationId": "list_19", "parameters": [ { - "name": "id", - "in": "path", - "required": true, + "name": "unreadOnly", + "in": "query", + "required": false, "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "default": false } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateNotificationPolicyRequest" - } + }, + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 0 } }, - "required": true - }, + { + "name": "size", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 20 + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseNotificationPolicyDto" + "$ref": "#/components/schemas/TableValueResultNotificationDto" } } } @@ -28075,21 +31806,32 @@ } } } - }, - "delete": { + } + }, + "/api/v1/notifications/{id}/read": { + "put": { "tags": [ - "Notification Policies" + "Notifications" ], - "summary": "Delete a notification policy", - "operationId": "delete_6", + "summary": "Mark a notification as read", + "operationId": "markRead", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "integer", + "format": "int64" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } ], @@ -28210,74 +31952,27 @@ } } }, - "/api/v1/notification-policies/{id}/dispatches": { - "get": { + "/api/v1/notifications/read-all": { + "put": { "tags": [ - "Notification Policies" + "Notifications" ], - "summary": "List dispatches (firing history) for a notification policy", - "description": "Optional query params: since/until/cursor/limit. When all are omitted, returns the full history (legacy). When any is set, defaults to a 30-day window and limit 50. Response is CursorPage (hasMore + nextCursor), the same wrapper used by other append-only history endpoints.", - "operationId": "listDispatches", + "summary": "Mark all notifications as read", + "operationId": "markAllRead", "parameters": [ { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "since", - "in": "query", - "description": "Inclusive lower bound (ISO-8601); defaults to now−30d when windowing", - "required": false, - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "name": "until", - "in": "query", - "description": "Exclusive upper bound (ISO-8601); defaults to now when windowing", - "required": false, - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "name": "cursor", - "in": "query", - "description": "Opaque cursor from a previous nextCursor", + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", "required": false, "schema": { "type": "string" } - }, - { - "name": "limit", - "in": "query", - "description": "Page size 1–100 when windowing/paginating (default 50)", - "required": false, - "schema": { - "type": "integer", - "format": "int32" - } } ], "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/CursorPageNotificationDispatchDto" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad request — the payload failed validation", @@ -28392,40 +32087,31 @@ } } }, - "/api/v1/notification-policies/{id}/test": { - "post": { + "/api/v1/notifications/unread-count": { + "get": { "tags": [ - "Notification Policies" + "Notifications" ], - "summary": "Dry-run: evaluate a policy's match rules against a supplied incident context", - "operationId": "test_1", + "summary": "Get unread notification count", + "operationId": "unreadCount", "parameters": [ { - "name": "id", - "in": "path", - "required": true, + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TestNotificationPolicyRequest" - } - } - } - }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseTestMatchResult" + "$ref": "#/components/schemas/SingleValueResponseLong" } } } @@ -28543,41 +32229,21 @@ } } }, - "/api/v1/notifications": { + "/api/v1/org": { "get": { "tags": [ - "Notifications" + "Organizations" ], - "summary": "List notifications for the current user", - "operationId": "list_19", + "summary": "Get the current organization", + "operationId": "get_4", "parameters": [ { - "name": "unreadOnly", - "in": "query", - "required": false, - "schema": { - "type": "boolean", - "default": false - } - }, - { - "name": "page", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "format": "int32", - "default": 0 - } - }, - { - "name": "size", - "in": "query", + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", "required": false, "schema": { - "type": "integer", - "format": "int32", - "default": 20 + "type": "string" } } ], @@ -28587,7 +32253,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/TableValueResultNotificationDto" + "$ref": "#/components/schemas/SingleValueResponseOrganizationDto" } } } @@ -28703,29 +32369,44 @@ } } } - } - }, - "/api/v1/notifications/{id}/read": { + }, "put": { "tags": [ - "Notifications" + "Organizations" ], - "summary": "Mark a notification as read", - "operationId": "markRead", + "summary": "Update the current organization", + "operationId": "update_6", "parameters": [ { - "name": "id", - "in": "path", - "required": true, + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { - "type": "integer", - "format": "int64" + "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateOrgDetailsRequest" + } + } + }, + "required": true + }, "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/SingleValueResponseOrganizationDto" + } + } + } }, "400": { "description": "Bad request — the payload failed validation", @@ -28840,16 +32521,34 @@ } } }, - "/api/v1/notifications/read-all": { - "put": { + "/api/v1/regions": { + "get": { "tags": [ - "Notifications" + "Regions" + ], + "summary": "List public regions", + "operationId": "listRegions", + "parameters": [ + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } ], - "summary": "Mark all notifications as read", - "operationId": "markAllRead", "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/SingleValueResponseListRegionDto" + } + } + } }, "400": { "description": "Bad request — the payload failed validation", @@ -28964,20 +32663,31 @@ } } }, - "/api/v1/notifications/unread-count": { + "/api/v1/resource-groups": { "get": { "tags": [ - "Notifications" + "Resource Groups" + ], + "summary": "List all resource groups for the authenticated org with health summaries", + "operationId": "list_7", + "parameters": [ + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } ], - "summary": "Get unread notification count", - "operationId": "unreadCount", "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseLong" + "$ref": "#/components/schemas/TableValueResultResourceGroupDto" } } } @@ -29093,22 +32803,50 @@ } } } - } - }, - "/api/v1/org": { - "get": { + }, + "post": { "tags": [ - "Organizations" + "Resource Groups" ], - "summary": "Get the current organization", - "operationId": "get_4", + "summary": "Create a new resource group", + "operationId": "create_8", + "parameters": [ + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateResourceGroupRequest" + } + } + }, + "required": true + }, "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseOrganizationDto" + "$ref": "#/components/schemas/SingleValueResponseResourceGroupDto" } } } @@ -29224,30 +32962,52 @@ } } } - }, - "put": { + } + }, + "/api/v1/resource-groups/{id}": { + "get": { "tags": [ - "Organizations" + "Resource Groups" ], - "summary": "Update the current organization", - "operationId": "update_6", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateOrgDetailsRequest" - } + "summary": "Get a resource group by id with member statuses and inherited settings", + "description": "Pass includeMetrics=true to enrich each member with 24h uptime, chart data, and latency metrics.", + "operationId": "get_3", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "name": "includeMetrics", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseOrganizationDto" + "$ref": "#/components/schemas/SingleValueResponseResourceGroupDto" } } } @@ -29363,22 +33123,50 @@ } } } - } - }, - "/api/v1/regions": { - "get": { + }, + "put": { "tags": [ - "Regions" + "Resource Groups" ], - "summary": "List public regions", - "operationId": "listRegions", + "summary": "Update a resource group's name, description, alert policy, inherited settings, and health threshold", + "operationId": "update_5", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateResourceGroupRequest" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseListRegionDto" + "$ref": "#/components/schemas/SingleValueResponseResourceGroupDto" } } } @@ -29494,25 +33282,37 @@ } } } - } - }, - "/api/v1/resource-groups": { - "get": { + }, + "delete": { "tags": [ "Resource Groups" ], - "summary": "List all resource groups for the authenticated org with health summaries", - "operationId": "list_7", - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/TableValueResultResourceGroupDto" - } - } + "summary": "Delete a resource group (cascades to member rows)", + "description": "Also deletes status-page components that represent this group. The parent status page stays.", + "operationId": "delete_5", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } + } + ], + "responses": { + "204": { + "description": "No Content" }, "400": { "description": "Bad request — the payload failed validation", @@ -29625,30 +33425,43 @@ } } } - }, - "post": { + } + }, + "/api/v1/resource-groups/{id}/health": { + "get": { "tags": [ "Resource Groups" ], - "summary": "Create a new resource group", - "operationId": "create_8", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateResourceGroupRequest" - } + "summary": "Get the detailed health breakdown for a resource group", + "description": "Returns member counts, worst-of status, and threshold-based health evaluation. The thresholdStatus field is populated only when a health threshold is configured.", + "operationId": "getHealth", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { - "201": { - "description": "Created", + "200": { + "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseResourceGroupDto" + "$ref": "#/components/schemas/SingleValueResponseResourceGroupHealthDto" } } } @@ -29766,14 +33579,14 @@ } } }, - "/api/v1/resource-groups/{id}": { + "/api/v1/resource-groups/{id}/matched-policies": { "get": { "tags": [ "Resource Groups" ], - "summary": "Get a resource group by id with member statuses and inherited settings", - "description": "Pass includeMetrics=true to enrich each member with 24h uptime, chart data, and latency metrics.", - "operationId": "get_3", + "summary": "List notification policies that match this resource group", + "description": "Policies whose match rules evaluate true for a DEGRADED or DOWN group-origin INCIDENT_CREATED context on this resource group (includes paused)", + "operationId": "listMatchedPolicies", "parameters": [ { "name": "id", @@ -29785,12 +33598,12 @@ } }, { - "name": "includeMetrics", - "in": "query", + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", "required": false, "schema": { - "type": "boolean", - "default": false + "type": "string" } } ], @@ -29800,7 +33613,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseResourceGroupDto" + "$ref": "#/components/schemas/TableValueResultNotificationPolicyDto" } } } @@ -29916,13 +33729,15 @@ } } } - }, - "put": { + } + }, + "/api/v1/resource-groups/{id}/members": { + "post": { "tags": [ "Resource Groups" ], - "summary": "Update a resource group's name, description, alert policy, inherited settings, and health threshold", - "operationId": "update_5", + "summary": "Add a monitor or service member to a resource group", + "operationId": "addMember_1", "parameters": [ { "name": "id", @@ -29932,25 +33747,43 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateResourceGroupRequest" + "$ref": "#/components/schemas/AddResourceGroupMemberRequest" } } }, "required": true }, "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseResourceGroupDto" + "$ref": "#/components/schemas/SingleValueResponseResourceGroupMemberDto" } } } @@ -30066,14 +33899,15 @@ } } } - }, + } + }, + "/api/v1/resource-groups/{id}/members/{memberId}": { "delete": { "tags": [ "Resource Groups" ], - "summary": "Delete a resource group (cascades to member rows)", - "description": "Also deletes status-page components that represent this group. The parent status page stays.", - "operationId": "delete_5", + "summary": "Remove a member from a resource group", + "operationId": "removeMember_1", "parameters": [ { "name": "id", @@ -30083,154 +33917,29 @@ "type": "string", "format": "uuid" } - } - ], - "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad request — the payload failed validation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized — missing or invalid credentials", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } }, - "402": { - "description": "Payment required — the plan or quota does not allow this", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden — the actor lacks permission for this resource", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not found — the requested resource does not exist", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "409": { - "description": "Conflict — the request collides with current resource state", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "410": { - "description": "Gone — the resource is no longer available", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "429": { - "description": "Too many requests — retry after the window resets", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal server error — see the message field for details", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "502": { - "description": "Bad gateway — an upstream provider returned an error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "503": { - "description": "Service unavailable — try again shortly", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/api/v1/resource-groups/{id}/health": { - "get": { - "tags": [ - "Resource Groups" - ], - "summary": "Get the detailed health breakdown for a resource group", - "description": "Returns member counts, worst-of status, and threshold-based health evaluation. The thresholdStatus field is populated only when a health threshold is configured.", - "operationId": "getHealth", - "parameters": [ { - "name": "id", + "name": "memberId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/SingleValueResponseResourceGroupHealthDto" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad request — the payload failed validation", @@ -30345,14 +34054,13 @@ } } }, - "/api/v1/resource-groups/{id}/matched-policies": { + "/api/v1/revisions/{id}": { "get": { "tags": [ - "Resource Groups" + "Revisions" ], - "summary": "List notification policies that match this resource group", - "description": "Policies whose match rules evaluate true for a DEGRADED or DOWN group-origin INCIDENT_CREATED context on this resource group (includes paused)", - "operationId": "listMatchedPolicies", + "summary": "Get revision package", + "operationId": "get_13", "parameters": [ { "name": "id", @@ -30362,6 +34070,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -30370,7 +34087,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/TableValueResultNotificationPolicyDto" + "$ref": "#/components/schemas/SingleValueResponseRevisionDto" } } } @@ -30488,13 +34205,14 @@ } } }, - "/api/v1/resource-groups/{id}/members": { - "post": { + "/api/v1/revisions/{id}/bundle": { + "get": { "tags": [ - "Resource Groups" + "Revisions" ], - "summary": "Add a monitor or service member to a resource group", - "operationId": "addMember_1", + "summary": "Redirect to signed package download", + "description": "Returns 302 Location with a signed GET URL. 404 after downloadUntil.", + "operationId": "bundle", "parameters": [ { "name": "id", @@ -30504,28 +34222,20 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AddResourceGroupMemberRequest" - } - } - }, - "required": true - }, "responses": { - "201": { - "description": "Created", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/SingleValueResponseResourceGroupMemberDto" - } - } - } + "200": { + "description": "OK" }, "400": { "description": "Bad request — the payload failed validation", @@ -30640,13 +34350,14 @@ } } }, - "/api/v1/resource-groups/{id}/members/{memberId}": { - "delete": { + "/api/v1/revisions/{id}/bundle/content": { + "get": { "tags": [ - "Resource Groups" + "Revisions" ], - "summary": "Remove a member from a resource group", - "operationId": "removeMember_1", + "summary": "Download revision archive", + "description": "Streams package bytes after access checks. Returns 404 when the package is unavailable.", + "operationId": "bundleContent", "parameters": [ { "name": "id", @@ -30658,18 +34369,26 @@ } }, { - "name": "memberId", - "in": "path", - "required": true, + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/zip": { + "schema": { + "type": "string", + "format": "binary" + } + } + } }, "400": { "description": "Bad request — the payload failed validation", @@ -30784,13 +34503,13 @@ } } }, - "/api/v1/revisions/{id}": { + "/api/v1/revisions/{id}/diff/{other}": { "get": { "tags": [ "Revisions" ], - "summary": "Get revision package", - "operationId": "get_13", + "summary": "Compare two revisions (bounded hunks)", + "operationId": "diff", "parameters": [ { "name": "id", @@ -30800,6 +34519,24 @@ "type": "string", "format": "uuid" } + }, + { + "name": "other", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -30808,7 +34545,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseRevisionDto" + "$ref": "#/components/schemas/SingleValueResponseRevisionDiffDto" } } } @@ -30926,14 +34663,14 @@ } } }, - "/api/v1/revisions/{id}/bundle": { + "/api/v1/revisions/{id}/files": { "get": { "tags": [ "Revisions" ], - "summary": "Redirect to signed package download", - "description": "Returns 302 Location with a signed GET URL. 404 after downloadUntil.", - "operationId": "bundle", + "summary": "Read revision source files", + "description": "Returns the entry file path and source text by path. Returns 404 when the package is unavailable.", + "operationId": "files", "parameters": [ { "name": "id", @@ -30943,11 +34680,27 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/SingleValueResponseRevisionFilesDto" + } + } + } }, "400": { "description": "Bad request — the payload failed validation", @@ -31062,14 +34815,14 @@ } } }, - "/api/v1/revisions/{id}/bundle/content": { - "get": { + "/api/v1/revisions/{id}/purge": { + "post": { "tags": [ "Revisions" ], - "summary": "Download revision archive", - "description": "Streams package bytes after access checks. Returns 404 when the package is unavailable.", - "operationId": "bundleContent", + "summary": "Purge revision package bytes", + "description": "Deletes stored package bytes unless another revision shares them. The revision stays; bundle, files and rollback then return 410. 409 while live. Requires an org admin.", + "operationId": "purgeRevision", "parameters": [ { "name": "id", @@ -31079,16 +34832,43 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EvidencePurgeRequest" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", "content": { - "application/zip": { + "*/*": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/SingleValueResponseRevisionDto" } } } @@ -31206,31 +34986,277 @@ } } }, - "/api/v1/revisions/{id}/diff/{other}": { + "/api/v1/runs": { "get": { "tags": [ - "Revisions" + "Runs" ], - "summary": "Compare two revisions (bounded hunks)", - "operationId": "diff", + "summary": "List code runs", + "description": "Cursor page of runs across the organization. Default window last 24 hours; from is clamped to 90 days.", + "operationId": "listRuns", "parameters": [ { - "name": "id", - "in": "path", - "required": true, + "name": "phase", + "in": "query", + "description": "Filter by run phase; not_finished excludes finished runs", + "required": false, + "schema": { + "type": "string", + "description": "Filter by run phase; not_finished excludes finished runs" + } + }, + { + "name": "outcome", + "in": "query", + "description": "Outcomes, repeated or comma-separated; not_passed includes retries", + "required": false, "schema": { "type": "string", + "description": "Outcomes, repeated or comma-separated; not_passed includes retries" + } + }, + { + "name": "region", + "in": "query", + "description": "Filter by probe region", + "required": false, + "schema": { + "type": "string", + "description": "Filter by probe region" + } + }, + { + "name": "source", + "in": "query", + "description": "Filter by what triggered the run", + "required": false, + "schema": { + "type": "string", + "description": "Filter by what triggered the run" + } + }, + { + "name": "environmentId", + "in": "query", + "description": "Only return runs executed in this environment", + "required": false, + "schema": { + "type": "string", + "description": "Only return runs executed in this environment", "format": "uuid" } }, { - "name": "other", - "in": "path", - "required": true, + "name": "from", + "in": "query", + "description": "Inclusive enqueue lower bound (default last 24 hours; clamped to 90 days)", + "required": false, + "schema": { + "type": "string", + "description": "Inclusive enqueue lower bound (default last 24 hours; clamped to 90 days)", + "format": "date-time" + } + }, + { + "name": "to", + "in": "query", + "description": "Inclusive enqueue upper bound (default now)", + "required": false, + "schema": { + "type": "string", + "description": "Inclusive enqueue upper bound (default now)", + "format": "date-time" + } + }, + { + "name": "q", + "in": "query", + "description": "Substring match on monitor name or headline", + "required": false, + "schema": { + "type": "string", + "description": "Substring match on monitor name or headline" + } + }, + { + "name": "cursor", + "in": "query", + "description": "Opaque cursor from the previous page", + "required": false, + "schema": { + "type": "string", + "description": "Opaque cursor from the previous page" + } + }, + { + "name": "limit", + "in": "query", + "description": "Page size (1–100, default 50)", + "required": false, + "schema": { + "maximum": 100, + "minimum": 1, + "type": "integer", + "description": "Page size (1–100, default 50)", + "format": "int32" + } + }, + { + "name": "monitorId", + "in": "query", + "description": "Only runs for this monitor", + "required": false, + "schema": { + "type": "string", + "description": "Only runs for this monitor", + "format": "uuid" + } + }, + { + "name": "revisionId", + "in": "query", + "description": "Only runs for this revision", + "required": false, + "schema": { + "type": "string", + "description": "Only runs for this revision", + "format": "uuid" + } + }, + { + "name": "monitorType", + "in": "query", + "description": "Monitor type: BROWSER or MULTI_STEP_API", + "required": false, + "schema": { + "type": "string", + "description": "Monitor type: BROWSER or MULTI_STEP_API" + } + }, + { + "name": "incidentId", + "in": "query", + "description": "Runs in the incident window, intersected with from and to", + "required": false, + "schema": { + "type": "string", + "description": "Runs in the incident window, intersected with from and to", + "format": "uuid" + } + }, + { + "name": "branch", + "in": "query", + "description": "Exact branch from revision provenance", + "required": false, + "schema": { + "type": "string", + "description": "Exact branch from revision provenance" + } + }, + { + "name": "flaky", + "in": "query", + "description": "Select monitors currently flaky over the last seven days", + "required": false, + "schema": { + "type": "boolean", + "description": "Select monitors currently flaky over the last seven days" + } + }, + { + "name": "sessionId", + "in": "query", + "description": "Caller-provided CI session identifier", + "required": false, + "schema": { + "type": "string", + "description": "Caller-provided CI session identifier" + } + }, + { + "name": "evaluationCycleId", + "in": "query", + "description": "Only runs in this evaluation cycle, including retries", + "required": false, "schema": { "type": "string", + "description": "Only runs in this evaluation cycle, including retries", "format": "uuid" } + }, + { + "name": "excludeSource", + "in": "query", + "description": "Exclude this source; omitted preserves all sources", + "required": false, + "schema": { + "type": "string", + "description": "Exclude this source; omitted preserves all sources" + } + }, + { + "name": "sort", + "in": "query", + "description": "Enqueue order: asc or desc (default: desc)", + "required": false, + "schema": { + "type": "string", + "description": "Enqueue order: asc or desc (default: desc)" + } + }, + { + "name": "step", + "in": "query", + "description": "Zero-based failed step index; requires monitor and caseIndex", + "required": false, + "schema": { + "minimum": 0, + "type": "integer", + "description": "Zero-based failed step index; requires monitor and caseIndex", + "format": "int32" + } + }, + { + "name": "caseIndex", + "in": "query", + "description": "Zero-based case index qualifying the failed step", + "required": false, + "schema": { + "minimum": 0, + "type": "integer", + "description": "Zero-based case index qualifying the failed step", + "format": "int32" + } + }, + { + "name": "adhoc", + "in": "query", + "description": "Include ad-hoc validation runs that have no monitor (default: false)", + "required": false, + "schema": { + "type": "boolean", + "description": "Include ad-hoc validation runs that have no monitor (default: false)" + } + }, + { + "name": "bucket", + "in": "query", + "description": "Histogram width: 30m, 1h or 1d; at most 1000 buckets", + "required": false, + "schema": { + "type": "string", + "description": "Histogram width: 30m, 1h or 1d; at most 1000 buckets" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -31239,7 +35265,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseRevisionDiffDto" + "$ref": "#/components/schemas/CursorPageRunDto" } } } @@ -31357,14 +35383,13 @@ } } }, - "/api/v1/revisions/{id}/files": { + "/api/v1/runs/{id}": { "get": { "tags": [ - "Revisions" + "Runs" ], - "summary": "Read revision source files", - "description": "Returns the entry file path and source text by path. Returns 404 when the package is unavailable.", - "operationId": "files", + "summary": "Get a run", + "operationId": "getRun", "parameters": [ { "name": "id", @@ -31374,6 +35399,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -31382,7 +35416,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseRevisionFilesDto" + "$ref": "#/components/schemas/SingleValueResponseRunDto" } } } @@ -31500,14 +35534,14 @@ } } }, - "/api/v1/revisions/{id}/purge": { - "post": { + "/api/v1/runs/{id}/artifacts": { + "get": { "tags": [ - "Revisions" + "Runs" ], - "summary": "Purge revision package bytes", - "description": "Deletes stored package bytes unless another revision shares them. The revision stays; bundle, files and rollback then return 410. 409 while live. Requires an org admin.", - "operationId": "purgeRevision", + "summary": "List run artifacts", + "description": "Complete persist manifest for this run.", + "operationId": "listRunArtifacts", "parameters": [ { "name": "id", @@ -31517,25 +35551,185 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EvidencePurgeRequest" + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/TableValueResultRunArtifactDto" + } } } }, - "required": true - }, + "400": { + "description": "Bad request — the payload failed validation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized — missing or invalid credentials", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "402": { + "description": "Payment required — the plan or quota does not allow this", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden — the actor lacks permission for this resource", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not found — the requested resource does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict — the request collides with current resource state", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "410": { + "description": "Gone — the resource is no longer available", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "429": { + "description": "Too many requests — retry after the window resets", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error — see the message field for details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "502": { + "description": "Bad gateway — an upstream provider returned an error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "Service unavailable — try again shortly", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/runs/{id}/cancel": { + "post": { + "tags": [ + "Runs" + ], + "summary": "Request run cancel", + "description": "Sets cancel_requested; phase unchanged.", + "operationId": "cancelRun", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseRevisionDto" + "$ref": "#/components/schemas/SingleValueResponseRunDto" } } } @@ -31653,21 +35847,40 @@ } } }, - "/api/v1/runs": { + "/api/v1/runs/{id}/captures/{artifactId}/compare": { "get": { "tags": [ "Runs" ], - "summary": "List code runs", - "description": "Cursor page of runs across the organization. Default window last 24 hours; from is clamped to 90 days.", - "operationId": "listRuns", + "summary": "Compare a screenshot to the last pass of this step", + "description": "Captures viewer baseline: last pass of this step in this region, any revision.", + "operationId": "compareRunCapture", "parameters": [ { - "name": "params", - "in": "query", + "name": "id", + "in": "path", "required": true, "schema": { - "$ref": "#/components/schemas/RunListParams" + "type": "string", + "format": "uuid" + } + }, + { + "name": "artifactId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } ], @@ -31675,9 +35888,9 @@ "200": { "description": "OK", "content": { - "*/*": { + "application/json": { "schema": { - "$ref": "#/components/schemas/CursorPageRunDto" + "$ref": "#/components/schemas/SingleValueResponseCaptureCompareDto" } } } @@ -31795,13 +36008,13 @@ } } }, - "/api/v1/runs/{id}": { + "/api/v1/runs/{id}/cases": { "get": { "tags": [ "Runs" ], - "summary": "Get a run", - "operationId": "getRun", + "summary": "List run cases with nested steps", + "operationId": "listRunCases", "parameters": [ { "name": "id", @@ -31811,6 +36024,26 @@ "type": "string", "format": "uuid" } + }, + { + "name": "attempt", + "in": "query", + "description": "Only return cases for this Playwright attempt", + "required": false, + "schema": { + "type": "integer", + "description": "Only return cases for this Playwright attempt", + "format": "int32" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -31819,7 +36052,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseRunDto" + "$ref": "#/components/schemas/TableValueResultRunCaseDto" } } } @@ -31937,14 +36170,14 @@ } } }, - "/api/v1/runs/{id}/artifacts": { + "/api/v1/runs/{id}/console": { "get": { "tags": [ "Runs" ], - "summary": "List run artifacts", - "description": "Complete persist manifest for this run.", - "operationId": "listRunArtifacts", + "summary": "Download raw console log", + "description": "Ungrouped text/plain console lines.", + "operationId": "getRunConsoleRaw", "parameters": [ { "name": "id", @@ -31954,148 +36187,55 @@ "type": "string", "format": "uuid" } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/TableValueResultRunArtifactDto" - } - } - } - }, - "400": { - "description": "Bad request — the payload failed validation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized — missing or invalid credentials", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "402": { - "description": "Payment required — the plan or quota does not allow this", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } }, - "403": { - "description": "Forbidden — the actor lacks permission for this resource", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not found — the requested resource does not exist", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "409": { - "description": "Conflict — the request collides with current resource state", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "410": { - "description": "Gone — the resource is no longer available", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + { + "name": "attempt", + "in": "query", + "description": "In-check attempt (default selected attempt)", + "required": false, + "schema": { + "type": "integer", + "description": "In-check attempt (default selected attempt)", + "format": "int32" } }, - "429": { - "description": "Too many requests — retry after the window resets", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + { + "name": "ungrouped", + "in": "query", + "description": "Return chronological lines instead of groups", + "required": false, + "schema": { + "type": "boolean", + "description": "Return chronological lines instead of groups" } }, - "500": { - "description": "Internal server error — see the message field for details", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + { + "name": "level", + "in": "query", + "description": "Filter error, warning, or info", + "required": false, + "schema": { + "type": "string", + "description": "Filter error, warning, or info" } }, - "502": { - "description": "Bad gateway — an upstream provider returned an error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + { + "name": "format", + "in": "query", + "description": "raw downloads the ungrouped log as text/plain", + "required": false, + "schema": { + "type": "string", + "description": "raw downloads the ungrouped log as text/plain" } }, - "503": { - "description": "Service unavailable — try again shortly", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/api/v1/runs/{id}/cancel": { - "post": { - "tags": [ - "Runs" - ], - "summary": "Request run cancel", - "description": "Sets cancel_requested; phase unchanged.", - "operationId": "cancelRun", - "parameters": [ { - "name": "id", - "in": "path", - "required": true, + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], @@ -32103,9 +36243,14 @@ "200": { "description": "OK", "content": { - "*/*": { + "application/json": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseRunDto" + "$ref": "#/components/schemas/SingleValueResponseRunConsoleDto" + } + }, + "text/plain": { + "schema": { + "type": "string" } } } @@ -32223,14 +36368,14 @@ } } }, - "/api/v1/runs/{id}/captures/{artifactId}/compare": { + "/api/v1/runs/{id}/diff": { "get": { "tags": [ "Runs" ], - "summary": "Compare a screenshot to the last pass of this step", - "description": "Captures viewer baseline: last pass of this step in this region, any revision.", - "operationId": "compareRunCapture", + "summary": "Diff this run against a prior pass", + "description": "Default baseline is the last pass of the same revision in this region. Pass baselineRunId to pick another finished run of the same monitor.", + "operationId": "getRunDiff", "parameters": [ { "name": "id", @@ -32242,13 +36387,22 @@ } }, { - "name": "artifactId", - "in": "path", - "required": true, + "name": "baselineRunId", + "in": "query", + "required": false, "schema": { "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -32257,7 +36411,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseCaptureCompareDto" + "$ref": "#/components/schemas/SingleValueResponseRunDiffDto" } } } @@ -32375,13 +36529,13 @@ } } }, - "/api/v1/runs/{id}/cases": { + "/api/v1/runs/{id}/events": { "get": { "tags": [ "Runs" ], - "summary": "List run cases with nested steps", - "operationId": "listRunCases", + "summary": "Stream run control events", + "operationId": "streamRunEvents", "parameters": [ { "name": "id", @@ -32393,21 +36547,41 @@ } }, { - "name": "params", + "name": "after", "in": "query", - "required": true, + "description": "Replay events with seq greater than this value", + "required": false, "schema": { - "$ref": "#/components/schemas/RunCaseListParams" + "type": "integer", + "description": "Replay events with seq greater than this value", + "format": "int64" + } + }, + { + "name": "Last-Event-ID", + "in": "header", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } ], "responses": { "200": { - "description": "OK", + "description": "Server-sent persist control events", "content": { - "*/*": { + "text/event-stream": { "schema": { - "$ref": "#/components/schemas/TableValueResultRunCaseDto" + "$ref": "#/components/schemas/RunEventDto" } } } @@ -32525,14 +36699,14 @@ } } }, - "/api/v1/runs/{id}/console": { + "/api/v1/runs/{id}/export": { "get": { "tags": [ "Runs" ], - "summary": "Download raw console log", - "description": "Ungrouped text/plain console lines.", - "operationId": "getRunConsoleRaw", + "summary": "Export run snapshot and available artifacts", + "description": "Zip of snapshot.json plus available artifact bytes. Expired files are omitted.", + "operationId": "exportRun", "parameters": [ { "name": "id", @@ -32544,28 +36718,20 @@ } }, { - "name": "params", - "in": "query", - "required": true, + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { - "$ref": "#/components/schemas/RunConsoleParams" + "type": "string" } } ], "responses": { "200": { - "description": "OK", + "description": "Zip of snapshot.json and available artifacts", "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SingleValueResponseRunConsoleDto" - } - }, - "text/plain": { - "schema": { - "type": "string" - } - } + "application/zip": {} } }, "400": { @@ -32681,14 +36847,14 @@ } } }, - "/api/v1/runs/{id}/diff": { + "/api/v1/runs/{id}/network": { "get": { "tags": [ "Runs" ], - "summary": "Diff this run against a prior pass", - "description": "Default baseline is the last pass of the same revision in this region. Pass baselineRunId to pick another finished run of the same monitor.", - "operationId": "getRunDiff", + "summary": "List run network rows", + "description": "Waterfall collection. Filters: failed, slow, stepId, xhr, source. 500 per page.", + "operationId": "listRunNetwork", "parameters": [ { "name": "id", @@ -32700,167 +36866,80 @@ } }, { - "name": "baselineRunId", + "name": "attempt", "in": "query", + "description": "In-check attempt (default selected attempt)", "required": false, "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SingleValueResponseRunDiffDto" - } - } - } - }, - "400": { - "description": "Bad request — the payload failed validation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized — missing or invalid credentials", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "402": { - "description": "Payment required — the plan or quota does not allow this", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden — the actor lacks permission for this resource", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not found — the requested resource does not exist", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "409": { - "description": "Conflict — the request collides with current resource state", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + "type": "integer", + "description": "In-check attempt (default selected attempt)", + "format": "int32" } }, - "410": { - "description": "Gone — the resource is no longer available", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + { + "name": "failed", + "in": "query", + "description": "Only rows with status >= 400 or a failure", + "required": false, + "schema": { + "type": "boolean", + "description": "Only rows with status >= 400 or a failure" } }, - "429": { - "description": "Too many requests — retry after the window resets", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + { + "name": "slow", + "in": "query", + "description": "Only rows with durationMs >= 1000", + "required": false, + "schema": { + "type": "boolean", + "description": "Only rows with durationMs >= 1000" } }, - "500": { - "description": "Internal server error — see the message field for details", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + { + "name": "stepId", + "in": "query", + "description": "Only rows for this step", + "required": false, + "schema": { + "type": "string", + "description": "Only rows for this step" } }, - "502": { - "description": "Bad gateway — an upstream provider returned an error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + { + "name": "xhr", + "in": "query", + "description": "Only xhr, fetch, and api resource types", + "required": false, + "schema": { + "type": "boolean", + "description": "Only xhr, fetch, and api resource types" } }, - "503": { - "description": "Service unavailable — try again shortly", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/api/v1/runs/{id}/events": { - "get": { - "tags": [ - "Runs" - ], - "summary": "Stream run control events", - "operationId": "streamRunEvents", - "parameters": [ { - "name": "id", - "in": "path", - "required": true, + "name": "source", + "in": "query", + "description": "page or request", + "required": false, "schema": { "type": "string", - "format": "uuid" + "description": "page or request" } }, { - "name": "params", + "name": "cursor", "in": "query", - "required": true, + "description": "Opaque cursor from the previous page", + "required": false, "schema": { - "$ref": "#/components/schemas/RunEventParams" + "type": "string", + "description": "Opaque cursor from the previous page" } }, { - "name": "Last-Event-ID", + "name": "X-DevHelm-Client", "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", "required": false, "schema": { "type": "string" @@ -32869,11 +36948,11 @@ ], "responses": { "200": { - "description": "Server-sent persist control events", + "description": "OK", "content": { - "text/event-stream": { + "*/*": { "schema": { - "$ref": "#/components/schemas/RunEventDto" + "$ref": "#/components/schemas/RunNetworkDto" } } } @@ -32991,14 +37070,14 @@ } } }, - "/api/v1/runs/{id}/export": { + "/api/v1/runs/{id}/network/{rowId}": { "get": { "tags": [ "Runs" ], - "summary": "Export run snapshot and available artifacts", - "description": "Zip of snapshot.json plus available artifact bytes. Expired files are omitted.", - "operationId": "exportRun", + "summary": "Get one network row", + "description": "Includes redacted headers, bodies, and copy-as-cURL.", + "operationId": "getRunNetworkRow", "parameters": [ { "name": "id", @@ -33008,13 +37087,34 @@ "type": "string", "format": "uuid" } + }, + { + "name": "rowId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { "200": { - "description": "Zip of snapshot.json and available artifacts", + "description": "OK", "content": { - "application/zip": {} + "*/*": { + "schema": { + "$ref": "#/components/schemas/SingleValueResponseNetworkRowDto" + } + } } }, "400": { @@ -33130,14 +37230,14 @@ } } }, - "/api/v1/runs/{id}/network": { - "get": { + "/api/v1/runs/{id}/pin": { + "post": { "tags": [ "Runs" ], - "summary": "List run network rows", - "description": "Waterfall collection. Filters: failed, slow, stepId, xhr, source. 500 per page.", - "operationId": "listRunNetwork", + "summary": "Pin a run past retention", + "description": "Keeps the run and its evidence past the retention windows until unpinned.", + "operationId": "pinRun", "parameters": [ { "name": "id", @@ -33149,11 +37249,21 @@ } }, { - "name": "params", - "in": "query", - "required": true, + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { - "$ref": "#/components/schemas/RunNetworkParams" + "type": "string" } } ], @@ -33163,7 +37273,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/RunNetworkDto" + "$ref": "#/components/schemas/SingleValueResponseRunDto" } } } @@ -33279,16 +37389,14 @@ } } } - } - }, - "/api/v1/runs/{id}/network/{rowId}": { - "get": { + }, + "delete": { "tags": [ "Runs" ], - "summary": "Get one network row", - "description": "Includes redacted headers, bodies, and copy-as-cURL.", - "operationId": "getRunNetworkRow", + "summary": "Unpin a run", + "description": "Normal retention applies again from the next sweep.", + "operationId": "unpinRun", "parameters": [ { "name": "id", @@ -33300,9 +37408,10 @@ } }, { - "name": "rowId", - "in": "path", - "required": true, + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { "type": "string" } @@ -33314,7 +37423,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseNetworkRowDto" + "$ref": "#/components/schemas/SingleValueResponseRunDto" } } } @@ -33432,14 +37541,14 @@ } } }, - "/api/v1/runs/{id}/pin": { + "/api/v1/runs/{id}/purge": { "post": { "tags": [ "Runs" ], - "summary": "Pin a run past retention", - "description": "Keeps the run and its evidence past the retention windows until unpinned.", - "operationId": "pinRun", + "summary": "Purge stored run evidence", + "description": "Deletes artifacts, runner log, console, network and event payloads. The run and its outcome stay; evidence reads return 410. Requires an org admin.", + "operationId": "purgeRun", "parameters": [ { "name": "id", @@ -33449,8 +37558,36 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EvidencePurgeRequest" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", @@ -33573,14 +37710,16 @@ } } } - }, - "delete": { + } + }, + "/api/v1/runs/{id}/runner-log": { + "get": { "tags": [ "Runs" ], - "summary": "Unpin a run", - "description": "Normal retention applies again from the next sweep.", - "operationId": "unpinRun", + "summary": "Snapshot in-flight runner log", + "description": "Hot Loki snapshot (text/plain) of lines so far. This is not live tail — poll this endpoint or use GET /runner-log/live (SSE). After finish, the cold file is the runner_log artifact (GET /artifacts/{id}/content). Empty while no lines have been pushed.", + "operationId": "getRunRunnerLog", "parameters": [ { "name": "id", @@ -33590,15 +37729,29 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { "200": { "description": "OK", "content": { + "text/plain": { + "schema": { + "type": "string" + } + }, "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseRunDto" + "type": "string" } } } @@ -33716,14 +37869,14 @@ } } }, - "/api/v1/runs/{id}/purge": { - "post": { + "/api/v1/runs/{id}/runner-log/live": { + "get": { "tags": [ "Runs" ], - "summary": "Purge stored run evidence", - "description": "Deletes artifacts, runner log, console, network and event payloads. The run and its outcome stay; evidence reads return 410. Requires an org admin.", - "operationId": "purgeRun", + "summary": "Live tail runner log", + "description": "SSE live tail of in-flight Loki lines. Same ACL as the snapshot (runs.get). Each event data is JSON {ts,line} (ts is Loki nanoseconds, line is one log line). Loki stays internal. Closes on client disconnect, idle/run-finished, or the same SSE timeout as GET /events. Cold file after finish is the runner_log artifact.", + "operationId": "streamRunRunnerLog", "parameters": [ { "name": "id", @@ -33733,25 +37886,24 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EvidencePurgeRequest" - } - } - }, - "required": true - }, "responses": { "200": { - "description": "OK", + "description": "Server-sent runner-log lines", "content": { - "*/*": { + "text/event-stream": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseRunDto" + "$ref": "#/components/schemas/RunnerLogLiveEvent" } } } @@ -33869,14 +38021,14 @@ } } }, - "/api/v1/runs/{id}/runner-log": { + "/api/v1/runs/{id}/trace-summary": { "get": { "tags": [ "Runs" ], - "summary": "Snapshot in-flight runner log", - "description": "Hot Loki snapshot (text/plain) of lines so far. This is not live tail — poll this endpoint or use GET /runner-log/live (SSE). After finish, the cold file is the runner_log artifact (GET /artifacts/{id}/content). Empty while no lines have been pushed.", - "operationId": "getRunRunnerLog", + "summary": "Summarize a failed trace", + "description": "Bounded text of failed actions, failed requests, and console errors.", + "operationId": "getRunTraceSummary", "parameters": [ { "name": "id", @@ -33886,20 +38038,24 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { "200": { "description": "OK", "content": { - "text/plain": { - "schema": { - "type": "string" - } - }, "*/*": { "schema": { - "type": "string" + "$ref": "#/components/schemas/SingleValueResponseRunTraceSummaryDto" } } } @@ -34017,32 +38173,286 @@ } } }, - "/api/v1/runs/{id}/runner-log/live": { + "/api/v1/runs/export": { "get": { "tags": [ - "Runs" + "run-list-read-controller" ], - "summary": "Live tail runner log", - "description": "SSE live tail of in-flight Loki lines. Same ACL as the snapshot (runs.get). Each event data is JSON {ts,line} (ts is Loki nanoseconds, line is one log line). Loki stays internal. Closes on client disconnect, idle/run-finished, or the same SSE timeout as GET /events. Cold file after finish is the runner_log artifact.", - "operationId": "streamRunRunnerLog", + "summary": "Export filtered run attempts as CSV", + "description": "At most 31 days and 10000 attempts; refuses larger exports with a structured error. Rows are attempts, not a cycle event history.", + "operationId": "exportRuns", "parameters": [ { - "name": "id", - "in": "path", - "required": true, + "name": "phase", + "in": "query", + "description": "Filter by run phase; not_finished excludes finished runs", + "required": false, + "schema": { + "type": "string", + "description": "Filter by run phase; not_finished excludes finished runs" + } + }, + { + "name": "outcome", + "in": "query", + "description": "Outcomes, repeated or comma-separated; not_passed includes retries", + "required": false, "schema": { "type": "string", + "description": "Outcomes, repeated or comma-separated; not_passed includes retries" + } + }, + { + "name": "region", + "in": "query", + "description": "Filter by probe region", + "required": false, + "schema": { + "type": "string", + "description": "Filter by probe region" + } + }, + { + "name": "source", + "in": "query", + "description": "Filter by what triggered the run", + "required": false, + "schema": { + "type": "string", + "description": "Filter by what triggered the run" + } + }, + { + "name": "environmentId", + "in": "query", + "description": "Only return runs executed in this environment", + "required": false, + "schema": { + "type": "string", + "description": "Only return runs executed in this environment", "format": "uuid" } + }, + { + "name": "from", + "in": "query", + "description": "Inclusive enqueue lower bound (default last 24 hours; clamped to 90 days)", + "required": false, + "schema": { + "type": "string", + "description": "Inclusive enqueue lower bound (default last 24 hours; clamped to 90 days)", + "format": "date-time" + } + }, + { + "name": "to", + "in": "query", + "description": "Inclusive enqueue upper bound (default now)", + "required": false, + "schema": { + "type": "string", + "description": "Inclusive enqueue upper bound (default now)", + "format": "date-time" + } + }, + { + "name": "q", + "in": "query", + "description": "Substring match on monitor name or headline", + "required": false, + "schema": { + "type": "string", + "description": "Substring match on monitor name or headline" + } + }, + { + "name": "cursor", + "in": "query", + "description": "Opaque cursor from the previous page", + "required": false, + "schema": { + "type": "string", + "description": "Opaque cursor from the previous page" + } + }, + { + "name": "limit", + "in": "query", + "description": "Page size (1–100, default 50)", + "required": false, + "schema": { + "maximum": 100, + "minimum": 1, + "type": "integer", + "description": "Page size (1–100, default 50)", + "format": "int32" + } + }, + { + "name": "monitorId", + "in": "query", + "description": "Only runs for this monitor", + "required": false, + "schema": { + "type": "string", + "description": "Only runs for this monitor", + "format": "uuid" + } + }, + { + "name": "revisionId", + "in": "query", + "description": "Only runs for this revision", + "required": false, + "schema": { + "type": "string", + "description": "Only runs for this revision", + "format": "uuid" + } + }, + { + "name": "monitorType", + "in": "query", + "description": "Monitor type: BROWSER or MULTI_STEP_API", + "required": false, + "schema": { + "type": "string", + "description": "Monitor type: BROWSER or MULTI_STEP_API" + } + }, + { + "name": "incidentId", + "in": "query", + "description": "Runs in the incident window, intersected with from and to", + "required": false, + "schema": { + "type": "string", + "description": "Runs in the incident window, intersected with from and to", + "format": "uuid" + } + }, + { + "name": "branch", + "in": "query", + "description": "Exact branch from revision provenance", + "required": false, + "schema": { + "type": "string", + "description": "Exact branch from revision provenance" + } + }, + { + "name": "flaky", + "in": "query", + "description": "Select monitors currently flaky over the last seven days", + "required": false, + "schema": { + "type": "boolean", + "description": "Select monitors currently flaky over the last seven days" + } + }, + { + "name": "sessionId", + "in": "query", + "description": "Caller-provided CI session identifier", + "required": false, + "schema": { + "type": "string", + "description": "Caller-provided CI session identifier" + } + }, + { + "name": "evaluationCycleId", + "in": "query", + "description": "Only runs in this evaluation cycle, including retries", + "required": false, + "schema": { + "type": "string", + "description": "Only runs in this evaluation cycle, including retries", + "format": "uuid" + } + }, + { + "name": "excludeSource", + "in": "query", + "description": "Exclude this source; omitted preserves all sources", + "required": false, + "schema": { + "type": "string", + "description": "Exclude this source; omitted preserves all sources" + } + }, + { + "name": "sort", + "in": "query", + "description": "Enqueue order: asc or desc (default: desc)", + "required": false, + "schema": { + "type": "string", + "description": "Enqueue order: asc or desc (default: desc)" + } + }, + { + "name": "step", + "in": "query", + "description": "Zero-based failed step index; requires monitor and caseIndex", + "required": false, + "schema": { + "minimum": 0, + "type": "integer", + "description": "Zero-based failed step index; requires monitor and caseIndex", + "format": "int32" + } + }, + { + "name": "caseIndex", + "in": "query", + "description": "Zero-based case index qualifying the failed step", + "required": false, + "schema": { + "minimum": 0, + "type": "integer", + "description": "Zero-based case index qualifying the failed step", + "format": "int32" + } + }, + { + "name": "adhoc", + "in": "query", + "description": "Include ad-hoc validation runs that have no monitor (default: false)", + "required": false, + "schema": { + "type": "boolean", + "description": "Include ad-hoc validation runs that have no monitor (default: false)" + } + }, + { + "name": "bucket", + "in": "query", + "description": "Histogram width: 30m, 1h or 1d; at most 1000 buckets", + "required": false, + "schema": { + "type": "string", + "description": "Histogram width: 30m, 1h or 1d; at most 1000 buckets" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { "200": { - "description": "Server-sent runner-log lines", + "description": "OK", "content": { - "text/event-stream": { + "text/csv": { "schema": { - "$ref": "#/components/schemas/RunnerLogLiveEvent" + "type": "string" } } } @@ -34160,23 +38570,79 @@ } } }, - "/api/v1/runs/{id}/trace-summary": { + "/api/v1/runs/monitors": { "get": { "tags": [ - "Runs" + "run-list-read-controller" ], - "summary": "Summarize a failed trace", - "description": "Bounded text of failed actions, failed requests, and console errors.", - "operationId": "getRunTraceSummary", + "summary": "Summarize monitor display verdicts for a run window", + "description": "Counts are display categories, not uptime or confirmed incidents. Unknown and pending verdicts remain unclassified.", + "operationId": "getRunMonitorStrip", "parameters": [ { - "name": "id", - "in": "path", - "required": true, + "name": "from", + "in": "query", + "description": "Inclusive window start; default last 24 hours, clamped to 90 days", + "required": false, + "schema": { + "type": "string", + "description": "Inclusive window start; default last 24 hours, clamped to 90 days", + "format": "date-time" + } + }, + { + "name": "to", + "in": "query", + "description": "Inclusive window end; default now", + "required": false, + "schema": { + "type": "string", + "description": "Inclusive window end; default now", + "format": "date-time" + } + }, + { + "name": "monitorId", + "in": "query", + "description": "Only entries for this monitor", + "required": false, "schema": { "type": "string", + "description": "Only entries for this monitor", "format": "uuid" } + }, + { + "name": "cursor", + "in": "query", + "description": "Opaque cursor returned by this endpoint", + "required": false, + "schema": { + "type": "string", + "description": "Opaque cursor returned by this endpoint" + } + }, + { + "name": "limit", + "in": "query", + "description": "Page size (1–100, default 50)", + "required": false, + "schema": { + "maximum": 100, + "minimum": 1, + "type": "integer", + "description": "Page size (1–100, default 50)", + "format": "int32" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -34185,7 +38651,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseRunTraceSummaryDto" + "$ref": "#/components/schemas/SingleValueResponseRunMonitorStripDto" } } } @@ -34303,21 +38769,78 @@ } } }, - "/api/v1/runs/export": { + "/api/v1/runs/revisions": { "get": { "tags": [ "run-list-read-controller" ], - "summary": "Export filtered run attempts as CSV", - "description": "At most 31 days and 10000 attempts; refuses larger exports with a structured error. Rows are attempts, not a cycle event history.", - "operationId": "exportRuns", + "summary": "List the latest recorded activation of each revision in the window", + "description": "Publication rows are mutable. Repeated activations of the same revision are not an immutable event history.", + "operationId": "listRunRevisionMarkers", "parameters": [ { - "name": "params", + "name": "from", "in": "query", - "required": true, + "description": "Inclusive window start; default last 24 hours, clamped to 90 days", + "required": false, + "schema": { + "type": "string", + "description": "Inclusive window start; default last 24 hours, clamped to 90 days", + "format": "date-time" + } + }, + { + "name": "to", + "in": "query", + "description": "Inclusive window end; default now", + "required": false, + "schema": { + "type": "string", + "description": "Inclusive window end; default now", + "format": "date-time" + } + }, + { + "name": "monitorId", + "in": "query", + "description": "Only entries for this monitor", + "required": false, + "schema": { + "type": "string", + "description": "Only entries for this monitor", + "format": "uuid" + } + }, + { + "name": "cursor", + "in": "query", + "description": "Opaque cursor returned by this endpoint", + "required": false, + "schema": { + "type": "string", + "description": "Opaque cursor returned by this endpoint" + } + }, + { + "name": "limit", + "in": "query", + "description": "Page size (1–100, default 50)", + "required": false, + "schema": { + "maximum": 100, + "minimum": 1, + "type": "integer", + "description": "Page size (1–100, default 50)", + "format": "int32" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { - "$ref": "#/components/schemas/RunListParams" + "type": "string" } } ], @@ -34325,9 +38848,9 @@ "200": { "description": "OK", "content": { - "text/csv": { + "*/*": { "schema": { - "type": "string" + "$ref": "#/components/schemas/CursorPageRunRevisionMarkerDto" } } } @@ -34445,21 +38968,98 @@ } } }, - "/api/v1/runs/monitors": { + "/api/v1/runs/skipped": { "get": { "tags": [ "run-list-read-controller" ], - "summary": "Summarize monitor display verdicts for a run window", - "description": "Counts are display categories, not uptime or confirmed incidents. Unknown and pending verdicts remain unclassified.", - "operationId": "getRunMonitorStrip", + "summary": "List recorded skipped ticks and current plan-disabled intervals", + "operationId": "listSkippedRuns", "parameters": [ { - "name": "params", + "name": "environmentId", "in": "query", - "required": true, + "description": "Current monitor environment; historical ticks retain their snapshot", + "required": false, + "schema": { + "type": "string", + "description": "Current monitor environment; historical ticks retain their snapshot", + "format": "uuid" + } + }, + { + "name": "monitorType", + "in": "query", + "description": "Monitor type: BROWSER or MULTI_STEP_API", + "required": false, + "schema": { + "type": "string", + "description": "Monitor type: BROWSER or MULTI_STEP_API" + } + }, + { + "name": "from", + "in": "query", + "description": "Inclusive window start; default last 24 hours, clamped to 90 days", + "required": false, + "schema": { + "type": "string", + "description": "Inclusive window start; default last 24 hours, clamped to 90 days", + "format": "date-time" + } + }, + { + "name": "to", + "in": "query", + "description": "Inclusive window end; default now", + "required": false, + "schema": { + "type": "string", + "description": "Inclusive window end; default now", + "format": "date-time" + } + }, + { + "name": "monitorId", + "in": "query", + "description": "Only entries for this monitor", + "required": false, + "schema": { + "type": "string", + "description": "Only entries for this monitor", + "format": "uuid" + } + }, + { + "name": "cursor", + "in": "query", + "description": "Opaque cursor returned by this endpoint", + "required": false, + "schema": { + "type": "string", + "description": "Opaque cursor returned by this endpoint" + } + }, + { + "name": "limit", + "in": "query", + "description": "Page size (1–100, default 50)", + "required": false, + "schema": { + "maximum": 100, + "minimum": 1, + "type": "integer", + "description": "Page size (1–100, default 50)", + "format": "int32" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { - "$ref": "#/components/schemas/RunWindowListParams" + "type": "string" } } ], @@ -34469,7 +39069,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseRunMonitorStripDto" + "$ref": "#/components/schemas/CursorPageRunSkippedEntryDto" } } } @@ -34587,21 +39187,276 @@ } } }, - "/api/v1/runs/revisions": { + "/api/v1/runs/summary": { "get": { "tags": [ - "run-list-read-controller" + "Runs" ], - "summary": "List the latest recorded activation of each revision in the window", - "description": "Publication rows are mutable. Repeated activations of the same revision are not an immutable event history.", - "operationId": "listRunRevisionMarkers", + "summary": "Summarize the filtered Runs population", + "description": "Uses the same enqueue-time window and filters as the Runs list; independent of pagination.", + "operationId": "summarizeRuns", "parameters": [ { - "name": "params", + "name": "phase", "in": "query", - "required": true, + "description": "Filter by run phase; not_finished excludes finished runs", + "required": false, + "schema": { + "type": "string", + "description": "Filter by run phase; not_finished excludes finished runs" + } + }, + { + "name": "outcome", + "in": "query", + "description": "Outcomes, repeated or comma-separated; not_passed includes retries", + "required": false, + "schema": { + "type": "string", + "description": "Outcomes, repeated or comma-separated; not_passed includes retries" + } + }, + { + "name": "region", + "in": "query", + "description": "Filter by probe region", + "required": false, + "schema": { + "type": "string", + "description": "Filter by probe region" + } + }, + { + "name": "source", + "in": "query", + "description": "Filter by what triggered the run", + "required": false, + "schema": { + "type": "string", + "description": "Filter by what triggered the run" + } + }, + { + "name": "environmentId", + "in": "query", + "description": "Only return runs executed in this environment", + "required": false, + "schema": { + "type": "string", + "description": "Only return runs executed in this environment", + "format": "uuid" + } + }, + { + "name": "from", + "in": "query", + "description": "Inclusive enqueue lower bound (default last 24 hours; clamped to 90 days)", + "required": false, + "schema": { + "type": "string", + "description": "Inclusive enqueue lower bound (default last 24 hours; clamped to 90 days)", + "format": "date-time" + } + }, + { + "name": "to", + "in": "query", + "description": "Inclusive enqueue upper bound (default now)", + "required": false, + "schema": { + "type": "string", + "description": "Inclusive enqueue upper bound (default now)", + "format": "date-time" + } + }, + { + "name": "q", + "in": "query", + "description": "Substring match on monitor name or headline", + "required": false, + "schema": { + "type": "string", + "description": "Substring match on monitor name or headline" + } + }, + { + "name": "cursor", + "in": "query", + "description": "Opaque cursor from the previous page", + "required": false, + "schema": { + "type": "string", + "description": "Opaque cursor from the previous page" + } + }, + { + "name": "limit", + "in": "query", + "description": "Page size (1–100, default 50)", + "required": false, + "schema": { + "maximum": 100, + "minimum": 1, + "type": "integer", + "description": "Page size (1–100, default 50)", + "format": "int32" + } + }, + { + "name": "monitorId", + "in": "query", + "description": "Only runs for this monitor", + "required": false, + "schema": { + "type": "string", + "description": "Only runs for this monitor", + "format": "uuid" + } + }, + { + "name": "revisionId", + "in": "query", + "description": "Only runs for this revision", + "required": false, + "schema": { + "type": "string", + "description": "Only runs for this revision", + "format": "uuid" + } + }, + { + "name": "monitorType", + "in": "query", + "description": "Monitor type: BROWSER or MULTI_STEP_API", + "required": false, + "schema": { + "type": "string", + "description": "Monitor type: BROWSER or MULTI_STEP_API" + } + }, + { + "name": "incidentId", + "in": "query", + "description": "Runs in the incident window, intersected with from and to", + "required": false, + "schema": { + "type": "string", + "description": "Runs in the incident window, intersected with from and to", + "format": "uuid" + } + }, + { + "name": "branch", + "in": "query", + "description": "Exact branch from revision provenance", + "required": false, + "schema": { + "type": "string", + "description": "Exact branch from revision provenance" + } + }, + { + "name": "flaky", + "in": "query", + "description": "Select monitors currently flaky over the last seven days", + "required": false, + "schema": { + "type": "boolean", + "description": "Select monitors currently flaky over the last seven days" + } + }, + { + "name": "sessionId", + "in": "query", + "description": "Caller-provided CI session identifier", + "required": false, + "schema": { + "type": "string", + "description": "Caller-provided CI session identifier" + } + }, + { + "name": "evaluationCycleId", + "in": "query", + "description": "Only runs in this evaluation cycle, including retries", + "required": false, + "schema": { + "type": "string", + "description": "Only runs in this evaluation cycle, including retries", + "format": "uuid" + } + }, + { + "name": "excludeSource", + "in": "query", + "description": "Exclude this source; omitted preserves all sources", + "required": false, + "schema": { + "type": "string", + "description": "Exclude this source; omitted preserves all sources" + } + }, + { + "name": "sort", + "in": "query", + "description": "Enqueue order: asc or desc (default: desc)", + "required": false, + "schema": { + "type": "string", + "description": "Enqueue order: asc or desc (default: desc)" + } + }, + { + "name": "step", + "in": "query", + "description": "Zero-based failed step index; requires monitor and caseIndex", + "required": false, + "schema": { + "minimum": 0, + "type": "integer", + "description": "Zero-based failed step index; requires monitor and caseIndex", + "format": "int32" + } + }, + { + "name": "caseIndex", + "in": "query", + "description": "Zero-based case index qualifying the failed step", + "required": false, + "schema": { + "minimum": 0, + "type": "integer", + "description": "Zero-based case index qualifying the failed step", + "format": "int32" + } + }, + { + "name": "adhoc", + "in": "query", + "description": "Include ad-hoc validation runs that have no monitor (default: false)", + "required": false, + "schema": { + "type": "boolean", + "description": "Include ad-hoc validation runs that have no monitor (default: false)" + } + }, + { + "name": "bucket", + "in": "query", + "description": "Histogram width: 30m, 1h or 1d; at most 1000 buckets", + "required": false, + "schema": { + "type": "string", + "description": "Histogram width: 30m, 1h or 1d; at most 1000 buckets" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { - "$ref": "#/components/schemas/RunWindowListParams" + "type": "string" } } ], @@ -34611,7 +39466,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/CursorPageRunRevisionMarkerDto" + "$ref": "#/components/schemas/SingleValueResponseRunMetricsSummaryDto" } } } @@ -34729,20 +39584,31 @@ } } }, - "/api/v1/runs/skipped": { + "/api/v1/secrets": { "get": { "tags": [ - "run-list-read-controller" + "Secrets" ], - "summary": "List recorded skipped ticks and current plan-disabled intervals", - "operationId": "listSkippedRuns", + "summary": "List organization secrets", + "operationId": "list_6", "parameters": [ { - "name": "params", + "name": "environmentId", "in": "query", - "required": true, + "description": "Environment whose value metadata to show", + "required": false, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { - "$ref": "#/components/schemas/RunSkippedListParams" + "type": "string" } } ], @@ -34752,7 +39618,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/CursorPageRunSkippedEntryDto" + "$ref": "#/components/schemas/TableValueResultSecretDto" } } } @@ -34868,33 +39734,50 @@ } } } - } - }, - "/api/v1/runs/summary": { - "get": { + }, + "post": { "tags": [ - "Runs" + "Secrets" ], - "summary": "Summarize the filtered Runs population", - "description": "Uses the same enqueue-time window and filters as the Runs list; independent of pagination.", - "operationId": "summarizeRuns", + "summary": "Create secret", + "operationId": "create_7", "parameters": [ { - "name": "params", - "in": "query", - "required": true, + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { - "$ref": "#/components/schemas/RunListParams" + "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateSecretRequest" + } + } + }, + "required": true + }, "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/SingleValueResponseRunMetricsSummaryDto" + "$ref": "#/components/schemas/SingleValueResponseSecretDto" } } } @@ -35012,167 +39895,45 @@ } } }, - "/api/v1/secrets": { - "get": { + "/api/v1/secrets/{key}": { + "put": { "tags": [ "Secrets" ], - "summary": "List organization secrets", - "operationId": "list_6", + "summary": "Update secret", + "operationId": "update_4", "parameters": [ { - "name": "environmentId", - "in": "query", - "description": "Environment whose value metadata to show", - "required": false, + "name": "key", + "in": "path", + "required": true, "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/TableValueResultSecretDto" - } - } - } - }, - "400": { - "description": "Bad request — the payload failed validation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized — missing or invalid credentials", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "402": { - "description": "Payment required — the plan or quota does not allow this", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden — the actor lacks permission for this resource", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not found — the requested resource does not exist", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "409": { - "description": "Conflict — the request collides with current resource state", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "410": { - "description": "Gone — the resource is no longer available", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "429": { - "description": "Too many requests — retry after the window resets", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal server error — see the message field for details", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "502": { - "description": "Bad gateway — an upstream provider returned an error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + "type": "string" } }, - "503": { - "description": "Service unavailable — try again shortly", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } - } - }, - "post": { - "tags": [ - "Secrets" ], - "summary": "Create secret", - "operationId": "create_7", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateSecretRequest" + "$ref": "#/components/schemas/UpdateSecretRequest" } } }, "required": true }, "responses": { - "201": { - "description": "Created", + "200": { + "description": "OK", "content": { "*/*": { "schema": { @@ -35292,15 +40053,13 @@ } } } - } - }, - "/api/v1/secrets/{key}": { - "put": { + }, + "delete": { "tags": [ "Secrets" ], - "summary": "Update secret", - "operationId": "update_4", + "summary": "Delete secret", + "operationId": "delete_4", "parameters": [ { "name": "key", @@ -35309,28 +40068,20 @@ "schema": { "type": "string" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateSecretRequest" - } - } - }, - "required": true - }, "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/SingleValueResponseSecretDto" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad request — the payload failed validation", @@ -35443,13 +40194,15 @@ } } } - }, - "delete": { + } + }, + "/api/v1/secrets/{key}/audit": { + "get": { "tags": [ "Secrets" ], - "summary": "Delete secret", - "operationId": "delete_4", + "summary": "Last update metadata for a secret", + "operationId": "audit", "parameters": [ { "name": "key", @@ -35458,11 +40211,27 @@ "schema": { "type": "string" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/SingleValueResponseSecretAuditDto" + } + } + } }, "400": { "description": "Bad request — the payload failed validation", @@ -35577,13 +40346,13 @@ } } }, - "/api/v1/secrets/{key}/audit": { - "get": { + "/api/v1/secrets/{key}/environments/{environmentId}": { + "put": { "tags": [ "Secrets" ], - "summary": "Last update metadata for a secret", - "operationId": "audit", + "summary": "Write a secret value for one environment", + "operationId": "writeEnvironmentValue", "parameters": [ { "name": "key", @@ -35592,19 +40361,40 @@ "schema": { "type": "string" } + }, + { + "name": "environmentId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/SingleValueResponseSecretAuditDto" - } + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WriteSecretEnvironmentValueRequest" } } }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, "400": { "description": "Bad request — the payload failed validation", "content": { @@ -35716,15 +40506,13 @@ } } } - } - }, - "/api/v1/secrets/{key}/environments/{environmentId}": { - "put": { + }, + "delete": { "tags": [ "Secrets" ], - "summary": "Write a secret value for one environment", - "operationId": "writeEnvironmentValue", + "summary": "Remove a secret value from one environment", + "operationId": "deleteEnvironmentValue", "parameters": [ { "name": "key", @@ -35742,157 +40530,15 @@ "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WriteSecretEnvironmentValueRequest" - } - } }, - "required": true - }, - "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad request — the payload failed validation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized — missing or invalid credentials", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "402": { - "description": "Payment required — the plan or quota does not allow this", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden — the actor lacks permission for this resource", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not found — the requested resource does not exist", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "409": { - "description": "Conflict — the request collides with current resource state", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "410": { - "description": "Gone — the resource is no longer available", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "429": { - "description": "Too many requests — retry after the window resets", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal server error — see the message field for details", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "502": { - "description": "Bad gateway — an upstream provider returned an error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "503": { - "description": "Service unavailable — try again shortly", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - }, - "delete": { - "tags": [ - "Secrets" - ], - "summary": "Remove a secret value from one environment", - "operationId": "deleteEnvironmentValue", - "parameters": [ { - "name": "key", - "in": "path", - "required": true, + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { "type": "string" } - }, - { - "name": "environmentId", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], "responses": { @@ -36027,6 +40673,15 @@ "schema": { "type": "string" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -36160,6 +40815,17 @@ ], "summary": "List all service subscriptions for the organization", "operationId": "list_18", + "parameters": [ + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", @@ -36300,6 +40966,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -36441,6 +41116,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -36577,6 +41261,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -36729,6 +41422,24 @@ "schema": { "type": "string" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -36945,6 +41656,15 @@ "format": "int32", "default": 20 } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -37107,6 +41827,15 @@ "type": "boolean", "default": false } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -37288,6 +42017,15 @@ "type": "integer", "format": "int32" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -37474,6 +42212,15 @@ "type": "string", "format": "date" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -37664,6 +42411,15 @@ "format": "uuid" } } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -37816,6 +42572,15 @@ "type": "string", "format": "date" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -37982,11 +42747,46 @@ } }, { - "name": "pageable", + "name": "page", "in": "query", - "required": true, + "description": "Zero-based page index (0..N)", + "required": false, "schema": { - "$ref": "#/components/schemas/Pageable" + "minimum": 0, + "type": "integer", + "default": 0 + } + }, + { + "name": "size", + "in": "query", + "description": "The size of the page to be returned", + "required": false, + "schema": { + "minimum": 1, + "type": "integer", + "default": 20 + } + }, + { + "name": "sort", + "in": "query", + "description": "Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } ], @@ -38138,6 +42938,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -38280,6 +43089,15 @@ "schema": { "type": "string" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -38433,6 +43251,15 @@ "type": "string" } } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -38594,6 +43421,15 @@ "format": "int32", "default": 50 } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -38749,6 +43585,15 @@ "30d" ] } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -38954,6 +43799,15 @@ "format": "int32", "default": 50 } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -39128,6 +43982,15 @@ "monthly" ] } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -39301,11 +44164,46 @@ } }, { - "name": "pageable", + "name": "page", "in": "query", - "required": true, + "description": "Zero-based page index (0..N)", + "required": false, "schema": { - "$ref": "#/components/schemas/Pageable" + "minimum": 0, + "type": "integer", + "default": 0 + } + }, + { + "name": "size", + "in": "query", + "description": "The size of the page to be returned", + "required": false, + "schema": { + "minimum": 1, + "type": "integer", + "default": 20 + } + }, + { + "name": "sort", + "in": "query", + "description": "Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } ], @@ -39451,6 +44349,15 @@ "type": "boolean", "default": false } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -39584,6 +44491,17 @@ ], "summary": "List status pages for the workspace", "operationId": "list_5", + "parameters": [ + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", @@ -39713,6 +44631,26 @@ ], "summary": "Create a status page", "operationId": "create_6", + "parameters": [ + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "requestBody": { "content": { "application/json": { @@ -39863,6 +44801,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -40003,6 +44950,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -40153,6 +45109,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -40288,6 +45253,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -40428,6 +45402,24 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -40589,6 +45581,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -40748,6 +45749,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -40903,6 +45913,15 @@ "format": "int32", "default": 90 } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -41055,6 +46074,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -41214,6 +46242,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -41376,6 +46413,15 @@ "format": "int32", "default": 90 } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -41518,6 +46564,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -41663,6 +46718,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -41803,6 +46867,24 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -41964,6 +47046,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -42108,6 +47199,24 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -42259,6 +47368,24 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -42401,6 +47528,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -42541,6 +47677,24 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -42675,15 +47829,183 @@ } } } - } - }, - "/api/v1/status-pages/{id}/groups/{groupId}": { - "put": { + } + }, + "/api/v1/status-pages/{id}/groups/{groupId}": { + "put": { + "tags": [ + "Status Pages" + ], + "summary": "Update a component group", + "operationId": "updateGroup", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "groupId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateStatusPageComponentGroupRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/SingleValueResponseStatusPageComponentGroupDto" + } + } + } + }, + "400": { + "description": "Bad request — the payload failed validation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized — missing or invalid credentials", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "402": { + "description": "Payment required — the plan or quota does not allow this", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden — the actor lacks permission for this resource", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Not found — the requested resource does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict — the request collides with current resource state", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "410": { + "description": "Gone — the resource is no longer available", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "429": { + "description": "Too many requests — retry after the window resets", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error — see the message field for details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "502": { + "description": "Bad gateway — an upstream provider returned an error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "503": { + "description": "Service unavailable — try again shortly", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { "tags": [ "Status Pages" ], - "summary": "Update a component group", - "operationId": "updateGroup", + "summary": "Delete a component group (components become ungrouped)", + "operationId": "deleteGroup", "parameters": [ { "name": "id", @@ -42702,28 +48024,20 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateStatusPageComponentGroupRequest" - } - } - }, - "required": true - }, "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/SingleValueResponseStatusPageComponentGroupDto" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad request — the payload failed validation", @@ -42836,13 +48150,15 @@ } } } - }, - "delete": { + } + }, + "/api/v1/status-pages/{id}/incidents": { + "get": { "tags": [ "Status Pages" ], - "summary": "Delete a component group (components become ungrouped)", - "operationId": "deleteGroup", + "summary": "List incidents for this status page (paginated)", + "operationId": "listIncidents", "parameters": [ { "name": "id", @@ -42854,18 +48170,76 @@ } }, { - "name": "groupId", - "in": "path", - "required": true, + "name": "status", + "in": "query", + "required": false, "schema": { - "type": "string", - "format": "uuid" + "type": "array", + "items": { + "type": "string", + "enum": [ + "INVESTIGATING", + "IDENTIFIED", + "MONITORING", + "RESOLVED" + ] + } + } + }, + { + "name": "page", + "in": "query", + "description": "Zero-based page index (0..N)", + "required": false, + "schema": { + "minimum": 0, + "type": "integer", + "default": 0 + } + }, + { + "name": "size", + "in": "query", + "description": "The size of the page to be returned", + "required": false, + "schema": { + "minimum": 1, + "type": "integer", + "default": 50 + } + }, + { + "name": "sort", + "in": "query", + "description": "Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/TableValueResultStatusPageIncidentDto" + } + } + } }, "400": { "description": "Bad request — the payload failed validation", @@ -42978,15 +48352,13 @@ } } } - } - }, - "/api/v1/status-pages/{id}/incidents": { - "get": { + }, + "post": { "tags": [ "Status Pages" ], - "summary": "List incidents for this status page (paginated)", - "operationId": "listIncidents", + "summary": "Create a status page incident (manual)", + "operationId": "createIncident", "parameters": [ { "name": "id", @@ -42998,38 +48370,41 @@ } }, { - "name": "status", - "in": "query", + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", "required": false, "schema": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "INVESTIGATING", - "IDENTIFIED", - "MONITORING", - "RESOLVED" - ] - } + "type": "string" } }, { - "name": "pageable", - "in": "query", - "required": true, + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { - "$ref": "#/components/schemas/Pageable" + "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateStatusPageIncidentRequest" + } + } + }, + "required": true + }, "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/TableValueResultStatusPageIncidentDto" + "$ref": "#/components/schemas/SingleValueResponseStatusPageIncidentDto" } } } @@ -43145,13 +48520,15 @@ } } } - }, - "post": { + } + }, + "/api/v1/status-pages/{id}/incidents/{incidentId}": { + "get": { "tags": [ "Status Pages" ], - "summary": "Create a status page incident (manual)", - "operationId": "createIncident", + "summary": "Get incident details with timeline", + "operationId": "getIncident", "parameters": [ { "name": "id", @@ -43161,21 +48538,29 @@ "type": "string", "format": "uuid" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateStatusPageIncidentRequest" - } + }, + { + "name": "incidentId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { - "201": { - "description": "Created", + "200": { + "description": "OK", "content": { "*/*": { "schema": { @@ -43295,15 +48680,13 @@ } } } - } - }, - "/api/v1/status-pages/{id}/incidents/{incidentId}": { - "get": { + }, + "put": { "tags": [ "Status Pages" ], - "summary": "Get incident details with timeline", - "operationId": "getIncident", + "summary": "Update an incident", + "operationId": "updateIncident", "parameters": [ { "name": "id", @@ -43322,8 +48705,27 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateStatusPageIncidentRequest" + } + } + }, + "required": true + }, "responses": { "200": { "description": "OK", @@ -43447,12 +48849,12 @@ } } }, - "put": { + "delete": { "tags": [ "Status Pages" ], - "summary": "Update an incident", - "operationId": "updateIncident", + "summary": "Delete an incident", + "operationId": "deleteIncident", "parameters": [ { "name": "id", @@ -43471,28 +48873,20 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateStatusPageIncidentRequest" - } - } - }, - "required": true - }, "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/SingleValueResponseStatusPageIncidentDto" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad request — the payload failed validation", @@ -43605,13 +48999,15 @@ } } } - }, - "delete": { + } + }, + "/api/v1/status-pages/{id}/incidents/{incidentId}/dismiss": { + "post": { "tags": [ "Status Pages" ], - "summary": "Delete an incident", - "operationId": "deleteIncident", + "summary": "Dismiss a draft incident (soft-deletes: resolves without publishing)", + "operationId": "dismissIncident", "parameters": [ { "name": "id", @@ -43630,149 +49026,23 @@ "type": "string", "format": "uuid" } - } - ], - "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad request — the payload failed validation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized — missing or invalid credentials", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "402": { - "description": "Payment required — the plan or quota does not allow this", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden — the actor lacks permission for this resource", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Not found — the requested resource does not exist", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } }, - "409": { - "description": "Conflict — the request collides with current resource state", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "410": { - "description": "Gone — the resource is no longer available", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "429": { - "description": "Too many requests — retry after the window resets", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal server error — see the message field for details", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "502": { - "description": "Bad gateway — an upstream provider returned an error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "503": { - "description": "Service unavailable — try again shortly", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/api/v1/status-pages/{id}/incidents/{incidentId}/dismiss": { - "post": { - "tags": [ - "Status Pages" - ], - "summary": "Dismiss a draft incident (soft-deletes: resolves without publishing)", - "operationId": "dismissIncident", - "parameters": [ { - "name": "id", - "in": "path", - "required": true, + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } }, { - "name": "incidentId", - "in": "path", - "required": true, + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], @@ -43918,6 +49188,24 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -44078,6 +49366,24 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -44248,6 +49554,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -44400,6 +49715,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -44564,11 +49888,46 @@ } }, { - "name": "pageable", + "name": "page", "in": "query", - "required": true, + "description": "Zero-based page index (0..N)", + "required": false, + "schema": { + "minimum": 0, + "type": "integer", + "default": 0 + } + }, + { + "name": "size", + "in": "query", + "description": "The size of the page to be returned", + "required": false, + "schema": { + "minimum": 1, + "type": "integer", + "default": 50 + } + }, + { + "name": "sort", + "in": "query", + "description": "Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { - "$ref": "#/components/schemas/Pageable" + "type": "string" } } ], @@ -44710,6 +50069,24 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -44871,6 +50248,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -45020,6 +50406,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -45179,6 +50574,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -45323,6 +50727,24 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -45467,6 +50889,24 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -45627,6 +51067,24 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -45797,6 +51255,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -45973,6 +51440,15 @@ "INCIDENT_RESOLVED" ] } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -46124,6 +51600,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -46276,6 +51761,24 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -46420,11 +51923,46 @@ } }, { - "name": "pageable", + "name": "page", "in": "query", - "required": true, + "description": "Zero-based page index (0..N)", + "required": false, + "schema": { + "minimum": 0, + "type": "integer", + "default": 0 + } + }, + { + "name": "size", + "in": "query", + "description": "The size of the page to be returned", + "required": false, + "schema": { + "minimum": 1, + "type": "integer", + "default": 50 + } + }, + { + "name": "sort", + "in": "query", + "description": "Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", + "required": false, "schema": { - "$ref": "#/components/schemas/Pageable" + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } ], @@ -46566,6 +52104,24 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -46727,6 +52283,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -46861,6 +52426,15 @@ "schema": { "type": "string" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -46995,6 +52569,17 @@ "summary": "Get whole-family Synthetics metrics", "description": "Returns measured target availability for 30 days and distinct recovered monitors for 7 days.", "operationId": "getSyntheticsFamilyMetrics", + "parameters": [ + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", @@ -47139,6 +52724,15 @@ "format": "uuid" } } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -47272,6 +52866,17 @@ ], "summary": "Get public runner-region acceptance status", "operationId": "regions", + "parameters": [ + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", @@ -47402,6 +53007,17 @@ "synthetics-runtime-profile-controller" ], "operationId": "list_17", + "parameters": [ + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", @@ -47540,6 +53156,15 @@ "schema": { "type": "string" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -47673,6 +53298,17 @@ ], "summary": "Read billable synthetics usage for the current period", "operationId": "getCurrentSyntheticsUsage", + "parameters": [ + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", @@ -47806,11 +53442,49 @@ "operationId": "list_4", "parameters": [ { - "name": "pageable", + "name": "page", "in": "query", - "required": true, + "description": "Zero-based page index (0..N)", + "required": false, + "schema": { + "minimum": 0, + "type": "integer", + "default": 0 + } + }, + { + "name": "size", + "in": "query", + "description": "The size of the page to be returned", + "required": false, + "schema": { + "minimum": 1, + "type": "integer", + "default": 50 + } + }, + { + "name": "sort", + "in": "query", + "description": "Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [ + "name,ASC" + ] + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { - "$ref": "#/components/schemas/Pageable" + "type": "string" } } ], @@ -47943,6 +53617,26 @@ ], "summary": "Create a new tag", "operationId": "create_5", + "parameters": [ + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "requestBody": { "content": { "application/json": { @@ -48093,6 +53787,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -48233,6 +53936,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -48383,6 +54095,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -48510,6 +54231,26 @@ "summary": "Rotate DEK", "description": "Generates a new Data Encryption Key, re-encrypts all secrets and alert-channel configs, and bumps the vault version. Admin-only. Pipeline DEK caches expire within ~10 minutes.", "operationId": "rotateDek", + "parameters": [ + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", @@ -48652,11 +54393,49 @@ } }, { - "name": "pageable", + "name": "page", "in": "query", - "required": true, + "description": "Zero-based page index (0..N)", + "required": false, + "schema": { + "minimum": 0, + "type": "integer", + "default": 0 + } + }, + { + "name": "size", + "in": "query", + "description": "The size of the page to be returned", + "required": false, + "schema": { + "minimum": 1, + "type": "integer", + "default": 50 + } + }, + { + "name": "sort", + "in": "query", + "description": "Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [ + "createdAt,DESC" + ] + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { - "$ref": "#/components/schemas/Pageable" + "type": "string" } } ], @@ -48789,6 +54568,26 @@ ], "summary": "Create a webhook testing inbox", "operationId": "createWebhookInbox", + "parameters": [ + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "requestBody": { "content": { "application/json": { @@ -48939,6 +54738,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -49079,6 +54887,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -49212,6 +55029,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -49407,6 +55233,15 @@ "format": "int32", "default": 50 } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -49547,6 +55382,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -49691,6 +55535,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -49840,6 +55693,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -49984,6 +55846,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -50126,6 +55997,24 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -50291,6 +56180,15 @@ "format": "uuid" } } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -50426,11 +56324,49 @@ "operationId": "list_3", "parameters": [ { - "name": "pageable", + "name": "page", + "in": "query", + "description": "Zero-based page index (0..N)", + "required": false, + "schema": { + "minimum": 0, + "type": "integer", + "default": 0 + } + }, + { + "name": "size", "in": "query", - "required": true, + "description": "The size of the page to be returned", + "required": false, + "schema": { + "minimum": 1, + "type": "integer", + "default": 50 + } + }, + { + "name": "sort", + "in": "query", + "description": "Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", + "required": false, "schema": { - "$ref": "#/components/schemas/Pageable" + "type": "array", + "items": { + "type": "string" + }, + "default": [ + "createdAt,DESC" + ] + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" } } ], @@ -50563,6 +56499,26 @@ ], "summary": "Register a new webhook endpoint", "operationId": "create_4", + "parameters": [ + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "requestBody": { "content": { "application/json": { @@ -50713,6 +56669,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -50853,6 +56818,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -51003,6 +56977,15 @@ "type": "string", "format": "uuid" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -51148,6 +57131,15 @@ "format": "int32", "default": 20 } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -51290,6 +57282,24 @@ "type": "string", "format": "uuid" } + }, + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -51433,6 +57443,17 @@ "summary": "List all available webhook event types", "description": "Returns the full catalog of supported outbound webhook event types with their surface grouping and human-readable descriptions. Use this to populate subscription checkboxes when creating or updating a webhook endpoint.", "operationId": "listEvents", + "parameters": [ + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", @@ -51564,6 +57585,17 @@ ], "summary": "Get signing secret metadata for the authenticated org", "operationId": "getSigningSecretInfo", + "parameters": [ + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", @@ -51695,6 +57727,26 @@ ], "summary": "Generate or rotate the organization webhook signing secret", "operationId": "rotateSigningSecret", + "parameters": [ + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", @@ -51828,11 +57880,46 @@ "operationId": "list_2", "parameters": [ { - "name": "pageable", + "name": "page", "in": "query", - "required": true, + "description": "Zero-based page index (0..N)", + "required": false, + "schema": { + "minimum": 0, + "type": "integer", + "default": 0 + } + }, + { + "name": "size", + "in": "query", + "description": "The size of the page to be returned", + "required": false, + "schema": { + "minimum": 1, + "type": "integer", + "default": 50 + } + }, + { + "name": "sort", + "in": "query", + "description": "Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, "schema": { - "$ref": "#/components/schemas/Pageable" + "type": "string" } } ], @@ -51965,6 +58052,26 @@ ], "summary": "Create workspace", "operationId": "create_3", + "parameters": [ + { + "name": "Idempotency-Key", + "in": "header", + "description": "Replays the stored response for 24h when the same key is sent again (1–255 visible ASCII)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } + } + ], "requestBody": { "content": { "application/json": { @@ -52115,6 +58222,15 @@ "type": "integer", "format": "int32" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -52255,6 +58371,15 @@ "type": "integer", "format": "int32" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -52405,6 +58530,15 @@ "type": "integer", "format": "int32" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -52540,6 +58674,15 @@ "type": "integer", "format": "int32" } + }, + { + "name": "X-DevHelm-Client", + "in": "header", + "description": "Calling surface and version, e.g. cli/1.4.0 or sdk-js/2.0.0", + "required": false, + "schema": { + "type": "string" + } } ], "requestBody": { @@ -53106,14 +59249,15 @@ }, "managedBy": { "type": "string", - "description": "Source that created/owns this channel: DASHBOARD, CLI, TERRAFORM, MCP, or API. Null on channels created before this attribution column existed.", + "description": "Source that created/owns this channel: DASHBOARD, GIT, TERRAFORM, MCP or API. Null on channels created before this attribution column existed.", "nullable": true, "enum": [ "DASHBOARD", "CLI", "TERRAFORM", "MCP", - "API" + "API", + "GIT" ] }, "lastDeliveryAt": { @@ -53323,7 +59467,8 @@ "CLI", "TERRAFORM", "MCP", - "API" + "API", + "GIT" ] } }, @@ -53400,7 +59545,8 @@ "CLI", "TERRAFORM", "MCP", - "API" + "API", + "GIT" ] } }, @@ -53974,7 +60120,7 @@ "maximum": 86400, "minimum": 10, "type": "integer", - "description": "New check frequency in seconds (10–86400), required for UPDATE_SCHEDULE", + "description": "Check frequency in seconds for UPDATE_SCHEDULE; minimum depends on plan", "format": "int32", "nullable": true }, @@ -55093,14 +61239,15 @@ }, "managedBy": { "type": "string", - "description": "Source creating this channel: DASHBOARD, CLI, TERRAFORM, MCP, or API. Defaults to API when omitted.", + "description": "Source creating this channel: DASHBOARD, GIT, TERRAFORM, MCP or API (CLI = GIT until 2027-01-31). Defaults to API when omitted.", "nullable": true, "enum": [ "DASHBOARD", "CLI", "TERRAFORM", "MCP", - "API" + "API", + "GIT" ] } } @@ -55139,14 +61286,15 @@ }, "tool": { "type": "string", - "description": "Tool this key writes as on owner-enforced monitors (default: API)", + "description": "Tool this key writes as on owner-enforced monitors (default: API; CLI = GIT until 2027-01-31)", "nullable": true, "enum": [ "DASHBOARD", "CLI", "TERRAFORM", "MCP", - "API" + "API", + "GIT" ] } } @@ -55690,7 +61838,7 @@ "maximum": 86400, "minimum": 10, "type": "integer", - "description": "Check frequency in seconds (10–86400). Null defaults to the plan minimum", + "description": "Check frequency in seconds; minimum depends on plan (default: plan minimum)", "format": "int32", "nullable": true }, @@ -55710,14 +61858,15 @@ }, "managedBy": { "type": "string", - "description": "Source that created this monitor: DASHBOARD, CLI, TERRAFORM, MCP, or API. Defaults to API", + "description": "Source that created this monitor: DASHBOARD, GIT, TERRAFORM, MCP or API (CLI = GIT until 2027-01-31). Defaults to API", "nullable": true, "enum": [ "DASHBOARD", "CLI", "TERRAFORM", "MCP", - "API" + "API", + "GIT" ] }, "ownerEnforced": { @@ -55992,14 +62141,15 @@ }, "managedBy": { "type": "string", - "description": "Source creating this group: DASHBOARD, CLI, TERRAFORM, MCP, or API. Defaults to API when omitted.", + "description": "Source creating this group: DASHBOARD, GIT, TERRAFORM, MCP or API (CLI = GIT until 2027-01-31). Defaults to API when omitted.", "nullable": true, "enum": [ "DASHBOARD", "CLI", "TERRAFORM", "MCP", - "API" + "API", + "GIT" ] } }, @@ -56374,14 +62524,15 @@ }, "managedBy": { "type": "string", - "description": "Source creating this page: DASHBOARD, CLI, TERRAFORM, MCP, or API. Defaults to API when omitted.", + "description": "Source creating this page: DASHBOARD, GIT, TERRAFORM, MCP or API (CLI = GIT until 2027-01-31). Defaults to API when omitted.", "nullable": true, "enum": [ "DASHBOARD", "CLI", "TERRAFORM", "MCP", - "API" + "API", + "GIT" ] } } @@ -60629,118 +66780,6 @@ }, "description": "Frozen failing member identity at peak failing count for a resource-group incident" }, - "IncidentFilterParams": { - "type": "object", - "properties": { - "status": { - "type": "string", - "description": "Filter by incident lifecycle status; null returns every status", - "nullable": true, - "enum": [ - "WATCHING", - "TRIGGERED", - "CONFIRMED", - "RESOLVED" - ] - }, - "severity": { - "type": "string", - "description": "Filter by severity; null returns every severity", - "nullable": true, - "enum": [ - "DOWN", - "DEGRADED", - "MAINTENANCE" - ] - }, - "source": { - "type": "string", - "description": "Filter by where the incident originated (auto, manual, third-party)", - "nullable": true, - "enum": [ - "AUTOMATIC", - "MANUAL", - "MONITORS", - "STATUS_DATA", - "RESOURCE_GROUP" - ] - }, - "monitorId": { - "type": "string", - "description": "Only return incidents tied to this monitor ID", - "format": "uuid", - "nullable": true - }, - "serviceId": { - "type": "string", - "description": "Only return incidents tied to this service ID (third-party services)", - "format": "uuid", - "nullable": true - }, - "resourceGroupId": { - "type": "string", - "description": "Only return incidents owned by this resource group (incidents.resource_group_id)", - "format": "uuid", - "nullable": true - }, - "tagId": { - "type": "string", - "description": "Only return incidents whose monitor carries this tag", - "format": "uuid", - "nullable": true - }, - "environmentId": { - "type": "string", - "description": "Only return incidents whose monitor lives in this environment", - "format": "uuid", - "nullable": true - }, - "excludeId": { - "type": "string", - "description": "Exclude this incident ID from results (related-incident lists)", - "format": "uuid", - "nullable": true - }, - "startedFrom": { - "type": "string", - "description": "Earliest startedAt to include (inclusive, ISO 8601)", - "format": "date-time", - "nullable": true - }, - "startedTo": { - "type": "string", - "description": "Latest startedAt to include (inclusive, ISO 8601)", - "format": "date-time", - "nullable": true - }, - "search": { - "maxLength": 200, - "minLength": 0, - "type": "string", - "description": "Case-insensitive substring match on title or incident ID", - "nullable": true - }, - "page": { - "minimum": 0, - "type": "integer", - "description": "Zero-based page index (default: 0)", - "format": "int32", - "example": 0 - }, - "size": { - "maximum": 200, - "minimum": 1, - "type": "integer", - "description": "Number of incidents per page (1–200, default: 10)", - "format": "int32", - "example": 10 - } - }, - "required": [ - "page", - "size" - ] - }, "IncidentIoChannelConfig": { "required": [ "channelType", @@ -61528,6 +67567,19 @@ "type": "string", "description": "Scopes this key is allowed to call; full grants everything" } + }, + "tool": { + "type": "string", + "description": "Tool this key writes as on owner-enforced monitors", + "nullable": true, + "enum": [ + "DASHBOARD", + "CLI", + "TERRAFORM", + "MCP", + "API", + "GIT" + ] } }, "description": "API key metadata" @@ -62939,7 +68991,7 @@ }, "frequencySeconds": { "type": "integer", - "description": "Check frequency in seconds (30–86400)", + "description": "Check frequency in seconds; minimum depends on plan", "format": "int32" }, "enabled": { @@ -62956,13 +69008,14 @@ }, "managedBy": { "type": "string", - "description": "Source that created/owns this monitor: DASHBOARD, CLI, TERRAFORM, MCP, or API", + "description": "Source that created/owns this monitor: DASHBOARD, GIT, TERRAFORM, MCP or API", "enum": [ "DASHBOARD", "CLI", "TERRAFORM", "MCP", - "API" + "API", + "GIT" ] }, "ownerEnforced": { @@ -63423,7 +69476,8 @@ "CLI", "TERRAFORM", "MCP", - "API" + "API", + "GIT" ] } }, @@ -63682,13 +69736,14 @@ "properties": { "type": { "type": "string", - "description": "Owning tool: DASHBOARD, CLI, TERRAFORM, MCP, or API", + "description": "Owning tool: DASHBOARD, GIT, TERRAFORM, MCP or API", "enum": [ "DASHBOARD", "CLI", "TERRAFORM", "MCP", - "API" + "API", + "GIT" ] }, "project": { @@ -63734,7 +69789,8 @@ "CLI", "TERRAFORM", "MCP", - "API" + "API", + "GIT" ] }, "toOwner": { @@ -63746,7 +69802,8 @@ "CLI", "TERRAFORM", "MCP", - "API" + "API", + "GIT" ] }, "reason": { @@ -63944,125 +70001,6 @@ }, "description": "Per-monitor execution duration summary" }, - "MonitorRunListParams": { - "type": "object", - "properties": { - "phase": { - "type": "string", - "description": "Filter by run phase; not_finished excludes finished runs", - "nullable": true - }, - "outcome": { - "type": "string", - "description": "Outcomes, repeated or comma-separated; not_passed includes retries", - "nullable": true - }, - "region": { - "type": "string", - "description": "Filter by probe region", - "nullable": true - }, - "source": { - "type": "string", - "description": "Filter by what triggered the run", - "nullable": true - }, - "q": { - "type": "string", - "description": "Substring match on headline", - "nullable": true - }, - "revisionId": { - "type": "string", - "description": "Only runs for this published revision", - "format": "uuid", - "nullable": true - }, - "from": { - "type": "string", - "description": "Inclusive enqueue lower bound (clamped to 90 days)", - "format": "date-time", - "nullable": true - }, - "to": { - "type": "string", - "description": "Inclusive enqueue upper bound (default now)", - "format": "date-time", - "nullable": true - }, - "cursor": { - "type": "string", - "description": "Opaque cursor from the previous page; results cover the last 90 days", - "nullable": true - }, - "limit": { - "maximum": 100, - "minimum": 1, - "type": "integer", - "description": "Page size (1–100, default 25)", - "format": "int32" - }, - "monitorType": { - "type": "string", - "description": "Monitor type: BROWSER or MULTI_STEP_API", - "nullable": true - }, - "incidentId": { - "type": "string", - "description": "Runs in the incident window, intersected with from and to", - "format": "uuid", - "nullable": true - }, - "branch": { - "type": "string", - "description": "Exact branch from revision provenance", - "nullable": true - }, - "flaky": { - "type": "boolean", - "description": "Select monitors currently flaky over the last seven days", - "nullable": true - }, - "sessionId": { - "type": "string", - "description": "Caller-provided CI session identifier", - "nullable": true - }, - "evaluationCycleId": { - "type": "string", - "description": "Only runs in this evaluation cycle, including retries", - "format": "uuid", - "nullable": true - }, - "excludeSource": { - "type": "string", - "description": "Exclude this source; omitted preserves all sources", - "nullable": true - }, - "sort": { - "type": "string", - "description": "Enqueue order: asc or desc (default: desc)", - "nullable": true - }, - "step": { - "minimum": 0, - "type": "integer", - "description": "Zero-based failed step index; requires monitor and caseIndex", - "format": "int32", - "nullable": true - }, - "caseIndex": { - "minimum": 0, - "type": "integer", - "description": "Zero-based case index qualifying the failed step", - "format": "int32", - "nullable": true - } - }, - "required": [ - "limit" - ] - }, "MonitorRunSeriesDto": { "required": [ "buckets", @@ -64379,7 +70317,6 @@ }, "MonitorTestRequest": { "required": [ - "config", "type" ], "type": "object", @@ -64399,6 +70336,7 @@ ] }, "config": { + "nullable": true, "oneOf": [ { "$ref": "#/components/schemas/DnsMonitorConfig" @@ -64433,7 +70371,7 @@ }, "environmentId": { "type": "string", - "description": "Environment to test against; null uses the monitor environment", + "description": "Environment to run in; required for browser and multi-step API code", "format": "uuid", "nullable": true }, @@ -64452,6 +70390,13 @@ "$ref": "#/components/schemas/RunSessionContext" } ] + }, + "region": { + "maxLength": 64, + "minLength": 0, + "type": "string", + "description": "Probe region for a code-bundle test (default: us-east)", + "nullable": true } } }, @@ -64596,57 +70541,6 @@ }, "description": "Operational facts for a monitor" }, - "MonitorTriageParams": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Exact monitor name, ignoring case and surrounding spaces", - "nullable": true - }, - "openIncident": { - "type": "boolean", - "description": "Whether a confirmed incident is open", - "nullable": true - }, - "muted": { - "type": "boolean", - "description": "Whether alert delivery is currently muted", - "nullable": true - }, - "quarantined": { - "type": "boolean", - "description": "Whether quarantine has not expired", - "nullable": true - }, - "pausedBefore": { - "type": "string", - "description": "Only monitors paused before this timestamp", - "format": "date-time", - "nullable": true - }, - "flaky": { - "type": "boolean", - "description": "Whether recent completed cycles recovered on retry", - "nullable": true - }, - "group": { - "type": "string", - "description": "List group: failing, not_running, passing, or paused", - "nullable": true - }, - "ownerProject": { - "type": "string", - "description": "Exact project declared by the owning tool", - "nullable": true - }, - "sort": { - "type": "string", - "description": "Use state for group and streak ordering", - "nullable": true - } - } - }, "MonitorUsage": { "required": [ "meter", @@ -64905,12 +70799,14 @@ }, "changedVia": { "type": "string", - "description": "Change source (DASHBOARD, CLI, API)", + "description": "Change source: API, DASHBOARD, GIT, TERRAFORM or MCP", "enum": [ "API", "DASHBOARD", "CLI", - "TERRAFORM" + "TERRAFORM", + "GIT", + "MCP" ] }, "changeSummary": { @@ -65845,32 +71741,6 @@ }, "description": "Advisory location and label declared by the owner" }, - "Pageable": { - "type": "object", - "properties": { - "page": { - "minimum": 0, - "type": "integer", - "format": "int32" - }, - "size": { - "minimum": 1, - "type": "integer", - "format": "int32" - }, - "sort": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "page", - "size", - "sort" - ] - }, "PagerDutyChannelConfig": { "required": [ "channelType", @@ -67004,14 +72874,15 @@ }, "managedBy": { "type": "string", - "description": "Source that created/owns this group: DASHBOARD, CLI, TERRAFORM, MCP, or API. Null on groups created before this attribution column existed.", + "description": "Source that created/owns this group: DASHBOARD, GIT, TERRAFORM, MCP or API. Null on groups created before this attribution column existed.", "nullable": true, "enum": [ "DASHBOARD", "CLI", "TERRAFORM", "MCP", - "API" + "API", + "GIT" ] }, "createdAt": { @@ -68200,17 +74071,6 @@ }, "description": "Run case with nested steps" }, - "RunCaseListParams": { - "type": "object", - "properties": { - "attempt": { - "type": "integer", - "description": "Only return cases for this Playwright attempt", - "format": "int32", - "nullable": true - } - } - }, "RunConsoleDto": { "required": [ "groups", @@ -68246,32 +74106,6 @@ }, "description": "Console groups or ungrouped lines" }, - "RunConsoleParams": { - "type": "object", - "properties": { - "attempt": { - "type": "integer", - "description": "In-check attempt (default selected attempt)", - "format": "int32", - "nullable": true - }, - "ungrouped": { - "type": "boolean", - "description": "Return chronological lines instead of groups", - "nullable": true - }, - "level": { - "type": "string", - "description": "Filter error, warning, or info", - "nullable": true - }, - "format": { - "type": "string", - "description": "raw downloads the ungrouped log as text/plain", - "nullable": true - } - } - }, "RunDiffDto": { "required": [ "baselineKind", @@ -68338,7 +74172,6 @@ "evidence", "executionAttempts", "id", - "monitorId", "phase", "region", "revisionId", @@ -68347,6 +74180,7 @@ "organizationId", "countsTowardHealth", "cancelRequested", + "flaky", "stream", "attempt", "attemptOf", @@ -68366,8 +74200,9 @@ }, "monitorId": { "type": "string", - "description": "Monitor this run belongs to", - "format": "uuid" + "description": "Monitor this run belongs to; null for an ad-hoc validation run", + "format": "uuid", + "nullable": true }, "monitorName": { "type": "string", @@ -68467,7 +74302,8 @@ "type": "string", "description": "Fast-retry parent run", "format": "uuid", - "nullable": true + "nullable": true, + "x-internal": true }, "phase": { "type": "string", @@ -68499,6 +74335,10 @@ "inconclusive" ] }, + "flaky": { + "type": "boolean", + "description": "Whether the run passed only after at least one fast retry" + }, "headline": { "type": "string", "description": "Last control headline", @@ -68507,12 +74347,14 @@ "executionLine": { "type": "string", "description": "Live execution one-liner", - "nullable": true + "nullable": true, + "x-internal": true }, "metaLine": { "type": "string", "description": "Server-composed header meta line", - "nullable": true + "nullable": true, + "x-internal": true }, "bundleDigest": { "minLength": 1, @@ -68618,7 +74460,12 @@ } }, "tabCounts": { - "$ref": "#/components/schemas/RunTabCountsDto" + "allOf": [ + { + "$ref": "#/components/schemas/RunTabCountsDto" + } + ], + "x-internal": true }, "live": { "nullable": true, @@ -68626,24 +74473,28 @@ { "$ref": "#/components/schemas/RunLiveDto" } - ] + ], + "x-internal": true }, "attempt": { "type": "integer", "description": "Selected in-check attempt (1-based)", - "format": "int32" + "format": "int32", + "x-internal": true }, "attemptOf": { "type": "integer", "description": "In-check attempt count", - "format": "int32" + "format": "int32", + "x-internal": true }, "attempts": { "type": "array", "description": "In-check attempts", "items": { "$ref": "#/components/schemas/RunAttemptDto" - } + }, + "x-internal": true }, "incidentId": { "type": "string", @@ -68806,17 +74657,6 @@ }, "description": "Run control event" }, - "RunEventParams": { - "type": "object", - "properties": { - "after": { - "type": "integer", - "description": "Replay events with seq greater than this value", - "format": "int64", - "nullable": true - } - } - }, "RunEvidenceDto": { "required": [ "kind", @@ -69047,142 +74887,6 @@ }, "description": "UTC time buckets of health-voting run attempts" }, - "RunListParams": { - "type": "object", - "properties": { - "phase": { - "type": "string", - "description": "Filter by run phase; not_finished excludes finished runs", - "nullable": true - }, - "outcome": { - "type": "string", - "description": "Outcomes, repeated or comma-separated; not_passed includes retries", - "nullable": true - }, - "region": { - "type": "string", - "description": "Filter by probe region", - "nullable": true - }, - "source": { - "type": "string", - "description": "Filter by what triggered the run", - "nullable": true - }, - "environmentId": { - "type": "string", - "description": "Only return runs executed in this environment", - "format": "uuid", - "nullable": true - }, - "from": { - "type": "string", - "description": "Inclusive enqueue lower bound (default last 24 hours; clamped to 90 days)", - "format": "date-time", - "nullable": true - }, - "to": { - "type": "string", - "description": "Inclusive enqueue upper bound (default now)", - "format": "date-time", - "nullable": true - }, - "q": { - "type": "string", - "description": "Substring match on monitor name or headline", - "nullable": true - }, - "cursor": { - "type": "string", - "description": "Opaque cursor from the previous page", - "nullable": true - }, - "limit": { - "maximum": 100, - "minimum": 1, - "type": "integer", - "description": "Page size (1–100, default 50)", - "format": "int32" - }, - "monitorId": { - "type": "string", - "description": "Only runs for this monitor", - "format": "uuid", - "nullable": true - }, - "revisionId": { - "type": "string", - "description": "Only runs for this revision", - "format": "uuid", - "nullable": true - }, - "monitorType": { - "type": "string", - "description": "Monitor type: BROWSER or MULTI_STEP_API", - "nullable": true - }, - "incidentId": { - "type": "string", - "description": "Runs in the incident window, intersected with from and to", - "format": "uuid", - "nullable": true - }, - "branch": { - "type": "string", - "description": "Exact branch from revision provenance", - "nullable": true - }, - "flaky": { - "type": "boolean", - "description": "Select monitors currently flaky over the last seven days", - "nullable": true - }, - "sessionId": { - "type": "string", - "description": "Caller-provided CI session identifier", - "nullable": true - }, - "evaluationCycleId": { - "type": "string", - "description": "Only runs in this evaluation cycle, including retries", - "format": "uuid", - "nullable": true - }, - "excludeSource": { - "type": "string", - "description": "Exclude this source; omitted preserves all sources", - "nullable": true - }, - "sort": { - "type": "string", - "description": "Enqueue order: asc or desc (default: desc)", - "nullable": true - }, - "step": { - "minimum": 0, - "type": "integer", - "description": "Zero-based failed step index; requires monitor and caseIndex", - "format": "int32", - "nullable": true - }, - "caseIndex": { - "minimum": 0, - "type": "integer", - "description": "Zero-based case index qualifying the failed step", - "format": "int32", - "nullable": true - }, - "bucket": { - "type": "string", - "description": "Histogram width: 30m, 1h or 1d; at most 1000 buckets", - "nullable": true - } - }, - "required": [ - "limit" - ] - }, "RunLiveDto": { "type": "object", "properties": { @@ -69514,47 +75218,6 @@ }, "description": "Network waterfall page" }, - "RunNetworkParams": { - "type": "object", - "properties": { - "attempt": { - "type": "integer", - "description": "In-check attempt (default selected attempt)", - "format": "int32", - "nullable": true - }, - "failed": { - "type": "boolean", - "description": "Only rows with status >= 400 or a failure", - "nullable": true - }, - "slow": { - "type": "boolean", - "description": "Only rows with durationMs >= 1000", - "nullable": true - }, - "stepId": { - "type": "string", - "description": "Only rows for this step", - "nullable": true - }, - "xhr": { - "type": "boolean", - "description": "Only xhr, fetch, and api resource types", - "nullable": true - }, - "source": { - "type": "string", - "description": "page or request", - "nullable": true - }, - "cursor": { - "type": "string", - "description": "Opaque cursor from the previous page", - "nullable": true - } - } - }, "RunOutcomeCountDto": { "required": [ "outcome", @@ -69709,55 +75372,6 @@ }, "description": "Items on this page" }, - "RunSkippedListParams": { - "type": "object", - "properties": { - "from": { - "type": "string", - "description": "Inclusive window start; default last 24 hours, clamped to 90 days", - "format": "date-time", - "nullable": true - }, - "to": { - "type": "string", - "description": "Inclusive window end; default now", - "format": "date-time", - "nullable": true - }, - "monitorId": { - "type": "string", - "description": "Only entries for this monitor", - "format": "uuid", - "nullable": true - }, - "cursor": { - "type": "string", - "description": "Opaque cursor returned by this endpoint", - "nullable": true - }, - "limit": { - "maximum": 100, - "minimum": 1, - "type": "integer", - "description": "Page size (1–100, default 50)", - "format": "int32" - }, - "environmentId": { - "type": "string", - "description": "Current monitor environment; historical ticks retain their snapshot", - "format": "uuid", - "nullable": true - }, - "monitorType": { - "type": "string", - "description": "Monitor type: BROWSER or MULTI_STEP_API", - "nullable": true - } - }, - "required": [ - "limit" - ] - }, "RunStepDto": { "required": [ "caseId", @@ -70034,44 +75648,6 @@ }, "description": "Bounded trace summary for a run" }, - "RunWindowListParams": { - "type": "object", - "properties": { - "from": { - "type": "string", - "description": "Inclusive window start; default last 24 hours, clamped to 90 days", - "format": "date-time", - "nullable": true - }, - "to": { - "type": "string", - "description": "Inclusive window end; default now", - "format": "date-time", - "nullable": true - }, - "monitorId": { - "type": "string", - "description": "Only entries for this monitor", - "format": "uuid", - "nullable": true - }, - "cursor": { - "type": "string", - "description": "Opaque cursor returned by this endpoint", - "nullable": true - }, - "limit": { - "maximum": 100, - "minimum": 1, - "type": "integer", - "description": "Page size (1–100, default 50)", - "format": "int32" - } - }, - "required": [ - "limit" - ] - }, "ScheduledMaintenanceDto": { "required": [ "affectedComponents", @@ -73686,14 +79262,15 @@ }, "managedBy": { "type": "string", - "description": "Source that created/owns this status page: DASHBOARD, CLI, TERRAFORM, MCP, or API. Null on pages created before this attribution column existed.", + "description": "Source that created/owns this status page: DASHBOARD, GIT, TERRAFORM, MCP or API. Null on pages created before this attribution column existed.", "nullable": true, "enum": [ "DASHBOARD", "CLI", "TERRAFORM", "MCP", - "API" + "API", + "GIT" ] }, "createdAt": { @@ -76510,13 +82087,14 @@ "properties": { "to": { "type": "string", - "description": "New owning tool: DASHBOARD, CLI, TERRAFORM, MCP, or API", + "description": "New owning tool: DASHBOARD, GIT, TERRAFORM, MCP or API (CLI = GIT until 2027-01-31)", "enum": [ "DASHBOARD", "CLI", "TERRAFORM", "MCP", - "API" + "API", + "GIT" ] }, "reason": { @@ -76787,14 +82365,15 @@ }, "managedBy": { "type": "string", - "description": "New attribution source: DASHBOARD, CLI, TERRAFORM, MCP, or API; null preserves current value.", + "description": "New attribution source: DASHBOARD, GIT, TERRAFORM, MCP or API (CLI = GIT until 2027-01-31); null preserves current value.", "nullable": true, "enum": [ "DASHBOARD", "CLI", "TERRAFORM", "MCP", - "API" + "API", + "GIT" ] }, "enabled": { @@ -77431,7 +83010,7 @@ "maximum": 86400, "minimum": 10, "type": "integer", - "description": "New check frequency in seconds (10–86400). Null preserves current", + "description": "Check frequency in seconds; minimum depends on plan. Null preserves current", "format": "int32", "nullable": true }, @@ -77458,7 +83037,8 @@ "CLI", "TERRAFORM", "MCP", - "API" + "API", + "GIT" ] }, "ownerEnforced": { @@ -77938,14 +83518,15 @@ }, "managedBy": { "type": "string", - "description": "New attribution source: DASHBOARD, CLI, TERRAFORM, MCP, or API; null preserves current value.", + "description": "New attribution source: DASHBOARD, GIT, TERRAFORM, MCP or API (CLI = GIT until 2027-01-31); null preserves current value.", "nullable": true, "enum": [ "DASHBOARD", "CLI", "TERRAFORM", "MCP", - "API" + "API", + "GIT" ] } }, @@ -78314,14 +83895,15 @@ }, "managedBy": { "type": "string", - "description": "New attribution source: DASHBOARD, CLI, TERRAFORM, MCP, or API; null preserves current value.", + "description": "New attribution source: DASHBOARD, GIT, TERRAFORM, MCP or API (CLI = GIT until 2027-01-31); null preserves current value.", "nullable": true, "enum": [ "DASHBOARD", "CLI", "TERRAFORM", "MCP", - "API" + "API", + "GIT" ] } } diff --git a/src/devhelm/_generated.py b/src/devhelm/_generated.py index 03c4478..9ba48d7 100644 --- a/src/devhelm/_generated.py +++ b/src/devhelm/_generated.py @@ -282,7 +282,7 @@ class AlertChannelDto(BaseModel): str | None, Field( alias="managedBy", - description="Source that created/owns this channel: DASHBOARD, CLI, TERRAFORM, MCP, or API. Null on channels created before this attribution column existed.", + description="Source that created/owns this channel: DASHBOARD, GIT, TERRAFORM, MCP or API. Null on channels created before this attribution column existed.", ), ] = None last_delivery_at: Annotated[ @@ -1076,6 +1076,7 @@ class ManagedBy(StrEnum): terraform = "TERRAFORM" mcp = "MCP" api = "API" + git = "GIT" class Tool(StrEnum): @@ -1084,6 +1085,7 @@ class Tool(StrEnum): terraform = "TERRAFORM" mcp = "MCP" api = "API" + git = "GIT" class CreateApiKeyRequest(BaseModel): @@ -1115,7 +1117,7 @@ class CreateApiKeyRequest(BaseModel): tool: Annotated[ Tool | None, Field( - description="Tool this key writes as on owner-enforced monitors (default: API)" + description="Tool this key writes as on owner-enforced monitors (default: API; CLI = GIT until 2027-01-31)" ), ] = None @@ -3518,117 +3520,6 @@ class IncidentFailingMemberSnapshotDto(BaseModel): ] = None -class Status6(StrEnum): - watching = "WATCHING" - triggered = "TRIGGERED" - confirmed = "CONFIRMED" - resolved = "RESOLVED" - - -class Source(StrEnum): - automatic = "AUTOMATIC" - manual = "MANUAL" - monitors = "MONITORS" - status_data = "STATUS_DATA" - resource_group = "RESOURCE_GROUP" - - -class IncidentFilterParams(BaseModel): - model_config = ConfigDict(extra="forbid", populate_by_name=True) - status: Annotated[ - Status6 | None, - Field( - description="Filter by incident lifecycle status; null returns every status" - ), - ] = None - severity: Annotated[ - Severity1 | None, - Field(description="Filter by severity; null returns every severity"), - ] = None - source: Annotated[ - Source | None, - Field( - description="Filter by where the incident originated (auto, manual, third-party)" - ), - ] = None - monitor_id: Annotated[ - UUID | None, - Field( - alias="monitorId", - description="Only return incidents tied to this monitor ID", - ), - ] = None - service_id: Annotated[ - UUID | None, - Field( - alias="serviceId", - description="Only return incidents tied to this service ID (third-party services)", - ), - ] = None - resource_group_id: Annotated[ - UUID | None, - Field( - alias="resourceGroupId", - description="Only return incidents owned by this resource group (incidents.resource_group_id)", - ), - ] = None - tag_id: Annotated[ - UUID | None, - Field( - alias="tagId", - description="Only return incidents whose monitor carries this tag", - ), - ] = None - environment_id: Annotated[ - UUID | None, - Field( - alias="environmentId", - description="Only return incidents whose monitor lives in this environment", - ), - ] = None - exclude_id: Annotated[ - UUID | None, - Field( - alias="excludeId", - description="Exclude this incident ID from results (related-incident lists)", - ), - ] = None - started_from: Annotated[ - AwareDatetime | None, - Field( - alias="startedFrom", - description="Earliest startedAt to include (inclusive, ISO 8601)", - ), - ] = None - started_to: Annotated[ - AwareDatetime | None, - Field( - alias="startedTo", - description="Latest startedAt to include (inclusive, ISO 8601)", - ), - ] = None - search: Annotated[ - str | None, - Field( - description="Case-insensitive substring match on title or incident ID", - max_length=200, - min_length=0, - ), - ] = None - page: Annotated[ - int, Field(description="Zero-based page index (default: 0)", examples=[0], ge=0) - ] - size: Annotated[ - int, - Field( - description="Number of incidents per page (1–200, default: 10)", - examples=[10], - ge=1, - le=200, - ), - ] - - class IncidentIoChannelConfig(BaseModel): model_config = ConfigDict(extra="ignore", populate_by_name=True) channel_type: Annotated[Literal["incident_io"], Field(alias="channelType")] = ( @@ -3846,6 +3737,10 @@ class KeyInfo(BaseModel): list[str], Field(description="Scopes this key is allowed to call; full grants everything"), ] + tool: Annotated[ + str | None, + Field(description="Tool this key writes as on owner-enforced monitors"), + ] = None class LinearChannelConfig(BaseModel): @@ -4532,7 +4427,7 @@ class MonitorOverlayRequest(BaseModel): class MonitorOwnerDto(BaseModel): model_config = ConfigDict(extra="ignore", populate_by_name=True) type: Annotated[ - str, Field(description="Owning tool: DASHBOARD, CLI, TERRAFORM, MCP, or API") + str, Field(description="Owning tool: DASHBOARD, GIT, TERRAFORM, MCP or API") ] project: Annotated[ str | None, @@ -4627,105 +4522,6 @@ class MonitorRunDurationSummaryDto(BaseModel): ] = None -class MonitorRunListParams(BaseModel): - model_config = ConfigDict(extra="forbid", populate_by_name=True) - phase: Annotated[ - str | None, - Field(description="Filter by run phase; not_finished excludes finished runs"), - ] = None - outcome: Annotated[ - str | None, - Field( - description="Outcomes, repeated or comma-separated; not_passed includes retries" - ), - ] = None - region: Annotated[str | None, Field(description="Filter by probe region")] = None - source: Annotated[ - str | None, Field(description="Filter by what triggered the run") - ] = None - q: Annotated[str | None, Field(description="Substring match on headline")] = None - revision_id: Annotated[ - UUID | None, - Field(alias="revisionId", description="Only runs for this published revision"), - ] = None - from_: Annotated[ - AwareDatetime | None, - Field( - alias="from", - description="Inclusive enqueue lower bound (clamped to 90 days)", - ), - ] = None - to: Annotated[ - AwareDatetime | None, - Field(description="Inclusive enqueue upper bound (default now)"), - ] = None - cursor: Annotated[ - str | None, - Field( - description="Opaque cursor from the previous page; results cover the last 90 days" - ), - ] = None - limit: Annotated[ - int, Field(description="Page size (1–100, default 25)", ge=1, le=100) - ] - monitor_type: Annotated[ - str | None, - Field( - alias="monitorType", description="Monitor type: BROWSER or MULTI_STEP_API" - ), - ] = None - incident_id: Annotated[ - UUID | None, - Field( - alias="incidentId", - description="Runs in the incident window, intersected with from and to", - ), - ] = None - branch: Annotated[ - str | None, Field(description="Exact branch from revision provenance") - ] = None - flaky: Annotated[ - bool | None, - Field(description="Select monitors currently flaky over the last seven days"), - ] = None - session_id: Annotated[ - str | None, - Field(alias="sessionId", description="Caller-provided CI session identifier"), - ] = None - evaluation_cycle_id: Annotated[ - UUID | None, - Field( - alias="evaluationCycleId", - description="Only runs in this evaluation cycle, including retries", - ), - ] = None - exclude_source: Annotated[ - str | None, - Field( - alias="excludeSource", - description="Exclude this source; omitted preserves all sources", - ), - ] = None - sort: Annotated[ - str | None, Field(description="Enqueue order: asc or desc (default: desc)") - ] = None - step: Annotated[ - int | None, - Field( - description="Zero-based failed step index; requires monitor and caseIndex", - ge=0, - ), - ] = None - case_index: Annotated[ - int | None, - Field( - alias="caseIndex", - description="Zero-based case index qualifying the failed step", - ge=0, - ), - ] = None - - class MonitorScheduleDto(BaseModel): model_config = ConfigDict(extra="ignore", populate_by_name=True) next_run_at: Annotated[ @@ -4898,49 +4694,6 @@ class MonitorTestResultDto(BaseModel): warnings: list[str] | None = None -class MonitorTriageParams(BaseModel): - model_config = ConfigDict(extra="forbid", populate_by_name=True) - name: Annotated[ - str | None, - Field(description="Exact monitor name, ignoring case and surrounding spaces"), - ] = None - open_incident: Annotated[ - bool | None, - Field(alias="openIncident", description="Whether a confirmed incident is open"), - ] = None - muted: Annotated[ - bool | None, Field(description="Whether alert delivery is currently muted") - ] = None - quarantined: Annotated[ - bool | None, Field(description="Whether quarantine has not expired") - ] = None - paused_before: Annotated[ - AwareDatetime | None, - Field( - alias="pausedBefore", - description="Only monitors paused before this timestamp", - ), - ] = None - flaky: Annotated[ - bool | None, - Field(description="Whether recent completed cycles recovered on retry"), - ] = None - group: Annotated[ - str | None, - Field(description="List group: failing, not_running, passing, or paused"), - ] = None - owner_project: Annotated[ - str | None, - Field( - alias="ownerProject", - description="Exact project declared by the owning tool", - ), - ] = None - sort: Annotated[ - str | None, Field(description="Use state for group and streak ordering") - ] = None - - class MonitorUsage(BaseModel): model_config = ConfigDict(extra="ignore", populate_by_name=True) monitor_id: Annotated[ @@ -5570,13 +5323,6 @@ class OwnerDeclaration(BaseModel): ] = None -class Pageable(BaseModel): - model_config = ConfigDict(extra="ignore", populate_by_name=True) - page: Annotated[int, Field(ge=0)] - size: Annotated[int, Field(ge=1)] - sort: list[str] - - class PagerDutyChannelConfig(BaseModel): model_config = ConfigDict(extra="ignore", populate_by_name=True) channel_type: Annotated[Literal["pagerduty"], Field(alias="channelType")] = ( @@ -5833,7 +5579,7 @@ class PublishRevisionRequest(BaseModel): ] = None -class Status7(StrEnum): +class Status6(StrEnum): investigating = "INVESTIGATING" identified = "IDENTIFIED" monitoring = "MONITORING" @@ -5854,7 +5600,7 @@ class PublishStatusPageIncidentRequest(BaseModel): Impact | None, Field(description="Impact level; null keeps draft value") ] = None status: Annotated[ - Status7 | None, + Status6 | None, Field( description="Incident status; null keeps draft value (must be an active status)" ), @@ -6603,13 +6349,6 @@ class RunAttemptDto(BaseModel): ] = None -class RunCaseListParams(BaseModel): - model_config = ConfigDict(extra="forbid", populate_by_name=True) - attempt: Annotated[ - int | None, Field(description="Only return cases for this Playwright attempt") - ] = None - - class RunConsoleDto(BaseModel): model_config = ConfigDict(extra="ignore", populate_by_name=True) state: Annotated[ @@ -6627,22 +6366,6 @@ class RunConsoleDto(BaseModel): ] = None -class RunConsoleParams(BaseModel): - model_config = ConfigDict(extra="forbid", populate_by_name=True) - attempt: Annotated[ - int | None, Field(description="In-check attempt (default selected attempt)") - ] = None - ungrouped: Annotated[ - bool | None, Field(description="Return chronological lines instead of groups") - ] = None - level: Annotated[ - str | None, Field(description="Filter error, warning, or info") - ] = None - format: Annotated[ - str | None, Field(description="raw downloads the ungrouped log as text/plain") - ] = None - - class RunEventDto(BaseModel): model_config = ConfigDict(extra="ignore", populate_by_name=True) id: Annotated[UUID, Field(description="Event identifier")] @@ -6675,13 +6398,6 @@ class RunEventDto(BaseModel): ] -class RunEventParams(BaseModel): - model_config = ConfigDict(extra="forbid", populate_by_name=True) - after: Annotated[ - int | None, Field(description="Replay events with seq greater than this value") - ] = None - - class RunEvidenceDto(BaseModel): model_config = ConfigDict(extra="ignore", populate_by_name=True) kind: Annotated[ @@ -6742,118 +6458,6 @@ class RunFailureDto(BaseModel): ] = None -class RunListParams(BaseModel): - model_config = ConfigDict(extra="forbid", populate_by_name=True) - phase: Annotated[ - str | None, - Field(description="Filter by run phase; not_finished excludes finished runs"), - ] = None - outcome: Annotated[ - str | None, - Field( - description="Outcomes, repeated or comma-separated; not_passed includes retries" - ), - ] = None - region: Annotated[str | None, Field(description="Filter by probe region")] = None - source: Annotated[ - str | None, Field(description="Filter by what triggered the run") - ] = None - environment_id: Annotated[ - UUID | None, - Field( - alias="environmentId", - description="Only return runs executed in this environment", - ), - ] = None - from_: Annotated[ - AwareDatetime | None, - Field( - alias="from", - description="Inclusive enqueue lower bound (default last 24 hours; clamped to 90 days)", - ), - ] = None - to: Annotated[ - AwareDatetime | None, - Field(description="Inclusive enqueue upper bound (default now)"), - ] = None - q: Annotated[ - str | None, Field(description="Substring match on monitor name or headline") - ] = None - cursor: Annotated[ - str | None, Field(description="Opaque cursor from the previous page") - ] = None - limit: Annotated[ - int, Field(description="Page size (1–100, default 50)", ge=1, le=100) - ] - monitor_id: Annotated[ - UUID | None, Field(alias="monitorId", description="Only runs for this monitor") - ] = None - revision_id: Annotated[ - UUID | None, - Field(alias="revisionId", description="Only runs for this revision"), - ] = None - monitor_type: Annotated[ - str | None, - Field( - alias="monitorType", description="Monitor type: BROWSER or MULTI_STEP_API" - ), - ] = None - incident_id: Annotated[ - UUID | None, - Field( - alias="incidentId", - description="Runs in the incident window, intersected with from and to", - ), - ] = None - branch: Annotated[ - str | None, Field(description="Exact branch from revision provenance") - ] = None - flaky: Annotated[ - bool | None, - Field(description="Select monitors currently flaky over the last seven days"), - ] = None - session_id: Annotated[ - str | None, - Field(alias="sessionId", description="Caller-provided CI session identifier"), - ] = None - evaluation_cycle_id: Annotated[ - UUID | None, - Field( - alias="evaluationCycleId", - description="Only runs in this evaluation cycle, including retries", - ), - ] = None - exclude_source: Annotated[ - str | None, - Field( - alias="excludeSource", - description="Exclude this source; omitted preserves all sources", - ), - ] = None - sort: Annotated[ - str | None, Field(description="Enqueue order: asc or desc (default: desc)") - ] = None - step: Annotated[ - int | None, - Field( - description="Zero-based failed step index; requires monitor and caseIndex", - ge=0, - ), - ] = None - case_index: Annotated[ - int | None, - Field( - alias="caseIndex", - description="Zero-based case index qualifying the failed step", - ge=0, - ), - ] = None - bucket: Annotated[ - str | None, - Field(description="Histogram width: 30m, 1h or 1d; at most 1000 buckets"), - ] = None - - class RunLiveDto(BaseModel): model_config = ConfigDict(extra="ignore", populate_by_name=True) step_index: Annotated[ @@ -6900,29 +6504,6 @@ class RunnerRegionStatusesDto(BaseModel): ] -class RunNetworkParams(BaseModel): - model_config = ConfigDict(extra="forbid", populate_by_name=True) - attempt: Annotated[ - int | None, Field(description="In-check attempt (default selected attempt)") - ] = None - failed: Annotated[ - bool | None, Field(description="Only rows with status >= 400 or a failure") - ] = None - slow: Annotated[ - bool | None, Field(description="Only rows with durationMs >= 1000") - ] = None - step_id: Annotated[ - str | None, Field(alias="stepId", description="Only rows for this step") - ] = None - xhr: Annotated[ - bool | None, Field(description="Only xhr, fetch, and api resource types") - ] = None - source: Annotated[str | None, Field(description="page or request")] = None - cursor: Annotated[ - str | None, Field(description="Opaque cursor from the previous page") - ] = None - - class RunOutcomeCountDto(BaseModel): model_config = ConfigDict(extra="ignore", populate_by_name=True) outcome: Annotated[str, Field(description="Projected run outcome")] @@ -6974,43 +6555,6 @@ class RunSessionContext(BaseModel): ] = None -class RunSkippedListParams(BaseModel): - model_config = ConfigDict(extra="forbid", populate_by_name=True) - from_: Annotated[ - AwareDatetime | None, - Field( - alias="from", - description="Inclusive window start; default last 24 hours, clamped to 90 days", - ), - ] = None - to: Annotated[ - AwareDatetime | None, Field(description="Inclusive window end; default now") - ] = None - monitor_id: Annotated[ - UUID | None, - Field(alias="monitorId", description="Only entries for this monitor"), - ] = None - cursor: Annotated[ - str | None, Field(description="Opaque cursor returned by this endpoint") - ] = None - limit: Annotated[ - int, Field(description="Page size (1–100, default 50)", ge=1, le=100) - ] - environment_id: Annotated[ - UUID | None, - Field( - alias="environmentId", - description="Current monitor environment; historical ticks retain their snapshot", - ), - ] = None - monitor_type: Annotated[ - str | None, - Field( - alias="monitorType", description="Monitor type: BROWSER or MULTI_STEP_API" - ), - ] = None - - class RunStepDto(BaseModel): model_config = ConfigDict(extra="ignore", populate_by_name=True) id: Annotated[UUID, Field(description="Step identifier")] @@ -7140,30 +6684,6 @@ class RunTraceSummaryDto(BaseModel): ] -class RunWindowListParams(BaseModel): - model_config = ConfigDict(extra="forbid", populate_by_name=True) - from_: Annotated[ - AwareDatetime | None, - Field( - alias="from", - description="Inclusive window start; default last 24 hours, clamped to 90 days", - ), - ] = None - to: Annotated[ - AwareDatetime | None, Field(description="Inclusive window end; default now") - ] = None - monitor_id: Annotated[ - UUID | None, - Field(alias="monitorId", description="Only entries for this monitor"), - ] = None - cursor: Annotated[ - str | None, Field(description="Opaque cursor returned by this endpoint") - ] = None - limit: Annotated[ - int, Field(description="Page size (1–100, default 50)", ge=1, le=100) - ] - - class ScheduledMaintenanceDto(BaseModel): model_config = ConfigDict(extra="ignore", populate_by_name=True) id: Annotated[UUID, Field(description="Unique maintenance record identifier")] @@ -7652,7 +7172,7 @@ class SetMonitorAuthRequest(BaseModel): config: ApiKeyAuthConfig | BasicAuthConfig | BearerAuthConfig | HeaderAuthConfig -class Status8(StrEnum): +class Status7(StrEnum): operational = "OPERATIONAL" degraded_performance = "DEGRADED_PERFORMANCE" partial_outage = "PARTIAL_OUTAGE" @@ -7663,7 +7183,7 @@ class Status8(StrEnum): class SetStatusPageComponentOverrideRequest(BaseModel): model_config = ConfigDict(extra="forbid", populate_by_name=True) status: Annotated[ - Status8, + Status7, Field( description="Override status while active; takes precedence over binding until expiry/clear" ), @@ -9291,12 +8811,16 @@ class To(StrEnum): terraform = "TERRAFORM" mcp = "MCP" api = "API" + git = "GIT" class TransferMonitorRequest(BaseModel): model_config = ConfigDict(extra="forbid", populate_by_name=True) to: Annotated[ - To, Field(description="New owning tool: DASHBOARD, CLI, TERRAFORM, MCP, or API") + To, + Field( + description="New owning tool: DASHBOARD, GIT, TERRAFORM, MCP or API (CLI = GIT until 2027-01-31)" + ), ] reason: Annotated[ str, @@ -9330,7 +8854,7 @@ class Scope(StrEnum): any_region = "any_region" -class Severity3(StrEnum): +class Severity2(StrEnum): down = "down" degraded = "degraded" @@ -9373,7 +8897,7 @@ class TriggerRule(BaseModel): ), ] = None severity: Annotated[ - Severity3, Field(description="Incident severity when this rule fires") + Severity2, Field(description="Incident severity when this rule fires") ] aggregation_type: Annotated[ AggregationType | None, @@ -9451,7 +8975,7 @@ class UpdateApiKeyRequest(BaseModel): ] -class Severity4(StrEnum): +class Severity3(StrEnum): fail = "fail" warn = "warn" @@ -9504,7 +9028,7 @@ class UpdateAssertionRequest(BaseModel): Field(discriminator="type"), ] severity: Annotated[ - Severity4 | None, Field(description="New outcome severity: FAIL or WARN") + Severity3 | None, Field(description="New outcome severity: FAIL or WARN") ] = None @@ -9549,7 +9073,7 @@ class UpdateEmailChannelConfig(BaseModel): ] -class Status9(StrEnum): +class Status8(StrEnum): active = "active" disabled = "disabled" pending_dns = "pending_dns" @@ -9559,7 +9083,7 @@ class Status9(StrEnum): class UpdateEmailDomainRequest(BaseModel): model_config = ConfigDict(extra="forbid", populate_by_name=True) status: Annotated[ - Status9 | None, + Status8 | None, Field( description="Domain lifecycle. Custom domains become active only via POST /verify" ), @@ -9659,7 +9183,7 @@ class UpdateIncidentPolicyRequest(BaseModel): recovery: RecoveryPolicy -class Severity5(StrEnum): +class Severity4(StrEnum): down = "DOWN" degraded = "DEGRADED" maintenance = "MAINTENANCE" @@ -9676,7 +9200,7 @@ class UpdateIncidentRequest(BaseModel): ), ] = None severity: Annotated[ - Severity5 | None, + Severity4 | None, Field( description="New severity: DOWN, DEGRADED, or MAINTENANCE; null preserves current" ), @@ -10063,7 +9587,7 @@ class UpdateResourceGroupRequest(BaseModel): ManagedBy | None, Field( alias="managedBy", - description="New attribution source: DASHBOARD, CLI, TERRAFORM, MCP, or API; null preserves current value.", + description="New attribution source: DASHBOARD, GIT, TERRAFORM, MCP or API (CLI = GIT until 2027-01-31); null preserves current value.", ), ] = None @@ -10254,7 +9778,7 @@ class UpdateStatusPageComponentRequest(BaseModel): ] = None -class Status10(StrEnum): +class Status9(StrEnum): investigating = "INVESTIGATING" identified = "IDENTIFIED" monitoring = "MONITORING" @@ -10272,7 +9796,7 @@ class UpdateStatusPageIncidentRequest(BaseModel): ), ] = None status: Annotated[ - Status10 | None, Field(description="New status; null preserves current") + Status9 | None, Field(description="New status; null preserves current") ] = None impact: Annotated[ Impact | None, Field(description="New impact level; null preserves current") @@ -10341,7 +9865,7 @@ class UpdateStatusPageIncidentUpdateRequest(BaseModel): ), ] status: Annotated[ - Status10 | None, + Status9 | None, Field( description="Replacement lifecycle status for this update; null preserves current" ), @@ -10383,7 +9907,7 @@ class UpdateStatusPageRequest(BaseModel): ManagedBy | None, Field( alias="managedBy", - description="New attribution source: DASHBOARD, CLI, TERRAFORM, MCP, or API; null preserves current value.", + description="New attribution source: DASHBOARD, GIT, TERRAFORM, MCP or API (CLI = GIT until 2027-01-31); null preserves current value.", ), ] = None @@ -10484,7 +10008,7 @@ class UpdateWebhookEndpointRequest(BaseModel): ] = None -class Status12(StrEnum): +class Status11(StrEnum): active = "active" disabled = "disabled" @@ -10499,7 +10023,7 @@ class UpdateWebhookInboxRequest(BaseModel): min_length=0, ), ] = None - status: Annotated[Status12 | None, Field(description="Inbox lifecycle")] = None + status: Annotated[Status11 | None, Field(description="Inbox lifecycle")] = None http_response: Annotated[ InboundWebhookHttpResponsePatch | None, Field(alias="httpResponse") ] = None @@ -11269,7 +10793,7 @@ class BulkMonitorActionRequest(BaseModel): int | None, Field( alias="frequencySeconds", - description="New check frequency in seconds (10–86400), required for UPDATE_SCHEDULE", + description="Check frequency in seconds for UPDATE_SCHEDULE; minimum depends on plan", ge=10, le=86400, ), @@ -11465,7 +10989,7 @@ class CreateAlertChannelRequest(BaseModel): ManagedBy | None, Field( alias="managedBy", - description="Source creating this channel: DASHBOARD, CLI, TERRAFORM, MCP, or API. Defaults to API when omitted.", + description="Source creating this channel: DASHBOARD, GIT, TERRAFORM, MCP or API (CLI = GIT until 2027-01-31). Defaults to API when omitted.", ), ] = None @@ -11555,7 +11079,7 @@ class CreateMonitorRequest(BaseModel): int | None, Field( alias="frequencySeconds", - description="Check frequency in seconds (10–86400). Null defaults to the plan minimum", + description="Check frequency in seconds; minimum depends on plan (default: plan minimum)", ge=10, le=86400, ), @@ -11573,7 +11097,7 @@ class CreateMonitorRequest(BaseModel): ManagedBy | None, Field( alias="managedBy", - description="Source that created this monitor: DASHBOARD, CLI, TERRAFORM, MCP, or API. Defaults to API", + description="Source that created this monitor: DASHBOARD, GIT, TERRAFORM, MCP or API (CLI = GIT until 2027-01-31). Defaults to API", ), ] = None owner_enforced: Annotated[ @@ -11755,7 +11279,7 @@ class CreateResourceGroupRequest(BaseModel): ManagedBy | None, Field( alias="managedBy", - description="Source creating this group: DASHBOARD, CLI, TERRAFORM, MCP, or API. Defaults to API when omitted.", + description="Source creating this group: DASHBOARD, GIT, TERRAFORM, MCP or API (CLI = GIT until 2027-01-31). Defaults to API when omitted.", ), ] = None @@ -11808,7 +11332,7 @@ class CreateStatusPageRequest(BaseModel): ManagedBy | None, Field( alias="managedBy", - description="Source creating this page: DASHBOARD, CLI, TERRAFORM, MCP, or API. Defaults to API when omitted.", + description="Source creating this page: DASHBOARD, GIT, TERRAFORM, MCP or API (CLI = GIT until 2027-01-31). Defaults to API when omitted.", ), ] = None @@ -12850,7 +12374,8 @@ class MonitorTestRequest(BaseModel): | McpServerMonitorConfig | ScriptMonitorConfig | TcpMonitorConfig - ) + | None + ) = None assertions: Annotated[ list[CreateAssertionRequest] | None, Field(description="Optional assertions to evaluate against the test result"), @@ -12859,11 +12384,19 @@ class MonitorTestRequest(BaseModel): UUID | None, Field( alias="environmentId", - description="Environment to test against; null uses the monitor environment", + description="Environment to run in; required for browser and multi-step API code", ), ] = None code: MonitorCodeSpec | None = None session: RunSessionContext | None = None + region: Annotated[ + str | None, + Field( + description="Probe region for a code-bundle test (default: us-east)", + max_length=64, + min_length=0, + ), + ] = None class NetworkRowDto(BaseModel): @@ -14032,7 +13565,7 @@ class StatusPageDto(BaseModel): str | None, Field( alias="managedBy", - description="Source that created/owns this status page: DASHBOARD, CLI, TERRAFORM, MCP, or API. Null on pages created before this attribution column existed.", + description="Source that created/owns this status page: DASHBOARD, GIT, TERRAFORM, MCP or API. Null on pages created before this attribution column existed.", ), ] = None created_at: Annotated[AwareDatetime, Field(alias="createdAt")] @@ -14330,7 +13863,7 @@ class UpdateAlertChannelRequest(BaseModel): ManagedBy | None, Field( alias="managedBy", - description="New attribution source: DASHBOARD, CLI, TERRAFORM, MCP, or API; null preserves current value.", + description="New attribution source: DASHBOARD, GIT, TERRAFORM, MCP or API (CLI = GIT until 2027-01-31); null preserves current value.", ), ] = None enabled: Annotated[ @@ -14365,7 +13898,7 @@ class UpdateMonitorRequest(BaseModel): int | None, Field( alias="frequencySeconds", - description="New check frequency in seconds (10–86400). Null preserves current", + description="Check frequency in seconds; minimum depends on plan. Null preserves current", ge=10, le=86400, ), @@ -14901,7 +14434,7 @@ class ResourceGroupDto(BaseModel): str | None, Field( alias="managedBy", - description="Source that created/owns this group: DASHBOARD, CLI, TERRAFORM, MCP, or API. Null on groups created before this attribution column existed.", + description="Source that created/owns this group: DASHBOARD, GIT, TERRAFORM, MCP or API. Null on groups created before this attribution column existed.", ), ] = None created_at: Annotated[ @@ -14969,8 +14502,12 @@ class RunDto(BaseModel): Field(alias="organizationId", description="Organization this run belongs to"), ] monitor_id: Annotated[ - UUID, Field(alias="monitorId", description="Monitor this run belongs to") - ] + UUID | None, + Field( + alias="monitorId", + description="Monitor this run belongs to; null for an ad-hoc validation run", + ), + ] = None monitor_name: Annotated[ str | None, Field(alias="monitorName", description="Monitor display name") ] = None @@ -15031,6 +14568,10 @@ class RunDto(BaseModel): outcome: Annotated[ str | None, Field(description="Outcome; null until the run is finished") ] = None + flaky: Annotated[ + bool, + Field(description="Whether the run passed only after at least one fast retry"), + ] headline: Annotated[str | None, Field(description="Last control headline")] = None execution_line: Annotated[ str | None, Field(alias="executionLine", description="Live execution one-liner") @@ -15742,7 +15283,7 @@ class MonitorDto(BaseModel): int, Field( alias="frequencySeconds", - description="Check frequency in seconds (30–86400)", + description="Check frequency in seconds; minimum depends on plan", ), ] enabled: Annotated[bool, Field(description="Whether the monitor is active")] @@ -15753,7 +15294,7 @@ class MonitorDto(BaseModel): str, Field( alias="managedBy", - description="Source that created/owns this monitor: DASHBOARD, CLI, TERRAFORM, MCP, or API", + description="Source that created/owns this monitor: DASHBOARD, GIT, TERRAFORM, MCP or API", ), ] owner_enforced: Annotated[ @@ -16031,7 +15572,10 @@ class MonitorVersionDto(BaseModel): ] = None changed_via: Annotated[ str, - Field(alias="changedVia", description="Change source (DASHBOARD, CLI, API)"), + Field( + alias="changedVia", + description="Change source: API, DASHBOARD, GIT, TERRAFORM or MCP", + ), ] change_summary: Annotated[ str | None,