{ "components": { "parameters": { }, "schemas": { "AnyApprovalRule": { "properties": { "minApprovals": { "format": "int32", "type": "integer" } }, "required": [ "minApprovals" ], "type": "object" }, "ApprovalStatus": { "enum": [ "approved", "rejected" ], "type": "string" }, "BooleanValue": { "type": "boolean" }, "CelMatcher": { "properties": { "cel": { "type": "string" } }, "required": [ "cel" ], "type": "object" }, "CelSelector": { "properties": { "cel": { "type": "string" } }, "required": [ "cel" ], "type": "object" }, "CreateDeploymentRequest": { "properties": { "description": { "type": "string" }, "jobAgentConfig": { "additionalProperties": true, "type": "object" }, "jobAgentId": { "type": "string" }, "jobAgents": { "items": { "$ref": "#/components/schemas/DeploymentJobAgent" }, "type": "array" }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "resourceSelector": { "$ref": "#/components/schemas/Selector" }, "slug": { "type": "string" } }, "required": [ "name", "slug" ], "type": "object" }, "CreateDeploymentVersionRequest": { "properties": { "config": { "additionalProperties": true, "type": "object" }, "createdAt": { "format": "date-time", "type": "string" }, "jobAgentConfig": { "additionalProperties": true, "type": "object" }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "status": { "$ref": "#/components/schemas/DeploymentVersionStatus" }, "tag": { "type": "string" } }, "required": [ "name", "tag", "status" ], "type": "object" }, "CreateEnvironmentRequest": { "properties": { "description": { "type": "string" }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "resourceSelector": { "$ref": "#/components/schemas/Selector" } }, "required": [ "name" ], "type": "object" }, "CreatePolicyRequest": { "properties": { "description": { "type": "string" }, "enabled": { "type": "boolean" }, "metadata": { "additionalProperties": { "type": "string" }, "description": "Arbitrary metadata for the policy (record)", "type": "object" }, "name": { "type": "string" }, "priority": { "type": "integer" }, "rules": { "items": { "$ref": "#/components/schemas/CreatePolicyRule" }, "type": "array" }, "selector": { "description": "CEL expression for matching release targets. Use \"true\" to match all targets.", "type": "string" } }, "required": [ "name" ], "type": "object" }, "CreatePolicyRule": { "properties": { "anyApproval": { "$ref": "#/components/schemas/AnyApprovalRule" }, "deploymentDependency": { "$ref": "#/components/schemas/DeploymentDependencyRule" }, "deploymentWindow": { "$ref": "#/components/schemas/DeploymentWindowRule" }, "environmentProgression": { "$ref": "#/components/schemas/EnvironmentProgressionRule" }, "gradualRollout": { "$ref": "#/components/schemas/GradualRolloutRule" }, "retry": { "$ref": "#/components/schemas/RetryRule" }, "verification": { "$ref": "#/components/schemas/VerificationRule" }, "versionCooldown": { "$ref": "#/components/schemas/VersionCooldownRule" }, "versionSelector": { "$ref": "#/components/schemas/VersionSelectorRule" } }, "type": "object" }, "CreateRelationshipRuleRequest": { "properties": { "description": { "type": "string" }, "fromSelector": { "$ref": "#/components/schemas/Selector" }, "fromType": { "$ref": "#/components/schemas/RelatableEntityType" }, "matcher": { "oneOf": [ { "$ref": "#/components/schemas/CelMatcher" } ] }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "reference": { "type": "string" }, "relationshipType": { "type": "string" }, "toSelector": { "$ref": "#/components/schemas/Selector" }, "toType": { "$ref": "#/components/schemas/RelatableEntityType" } }, "required": [ "name", "reference", "fromType", "toType", "matcher", "relationshipType", "metadata" ], "type": "object" }, "CreateSystemRequest": { "properties": { "description": { "type": "string" }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "slug": { "type": "string" } }, "required": [ "name" ], "type": "object" }, "CreateWorkflow": { "properties": { "inputs": { "items": { "$ref": "#/components/schemas/WorkflowInput" }, "type": "array" }, "jobs": { "items": { "$ref": "#/components/schemas/CreateWorkflowJobTemplate" }, "type": "array" }, "name": { "type": "string" } }, "required": [ "name", "inputs", "jobs" ], "type": "object" }, "CreateWorkflowJobTemplate": { "properties": { "config": { "additionalProperties": true, "description": "Configuration for the job agent", "type": "object" }, "if": { "description": "CEL expression to determine if the job should run", "type": "string" }, "matrix": { "$ref": "#/components/schemas/WorkflowJobMatrix" }, "name": { "type": "string" }, "ref": { "description": "Reference to the job agent", "type": "string" } }, "required": [ "name", "ref", "config" ], "type": "object" }, "CreateWorkspaceRequest": { "properties": { "name": { "description": "Display name of the workspace", "maxLength": 30, "minLength": 3, "type": "string" }, "slug": { "description": "URL-friendly unique identifier (lowercase, no spaces)", "maxLength": 50, "minLength": 3, "pattern": "^[a-z0-9-]+$", "type": "string" } }, "required": [ "name", "slug" ], "type": "object" }, "DatadogMetricProvider": { "properties": { "aggregator": { "default": "last", "description": "Datadog aggregator", "enum": [ "avg", "min", "max", "sum", "last", "percentile", "mean", "l2norm", "area" ], "type": "string" }, "apiKey": { "description": "Datadog API key (supports Go templates for variable references)", "example": "{{.variables.dd_api_key}}", "type": "string" }, "appKey": { "description": "Datadog Application key (supports Go templates for variable references)", "example": "{{.variables.dd_app_key}}", "type": "string" }, "formula": { "description": "Datadog formula (supports Go templates)", "type": "string" }, "intervalSeconds": { "example": 30, "format": "int64", "maximum": 3600, "minimum": 1, "type": "integer" }, "queries": { "additionalProperties": { "type": "string" }, "description": "Datadog metrics queries (supports Go templates)", "example": { "q": "sum:requests.error.rate{service:{{.resource.name}}}" }, "type": "object" }, "site": { "default": "datadoghq.com", "description": "Datadog site URL (e.g., datadoghq.com, datadoghq.eu, us3.datadoghq.com)", "type": "string" }, "type": { "description": "Provider type", "enum": [ "datadog" ], "type": "string" } }, "required": [ "type", "queries", "apiKey", "appKey" ], "type": "object" }, "Deployment": { "properties": { "description": { "type": "string" }, "id": { "type": "string" }, "jobAgentConfig": { "additionalProperties": true, "type": "object" }, "jobAgentId": { "type": "string" }, "jobAgents": { "items": { "$ref": "#/components/schemas/DeploymentJobAgent" }, "type": "array" }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "resourceSelector": { "$ref": "#/components/schemas/Selector" }, "slug": { "type": "string" } }, "required": [ "id", "name", "slug", "jobAgentConfig" ], "type": "object" }, "DeploymentAndSystems": { "properties": { "deployment": { "$ref": "#/components/schemas/Deployment" }, "systems": { "items": { "$ref": "#/components/schemas/System" }, "type": "array" } }, "required": [ "deployment", "systems" ], "type": "object" }, "DeploymentDependencyRule": { "properties": { "dependsOn": { "description": "CEL expression to match upstream deployment(s) that must have a successful release before this deployment can proceed.", "type": "string" } }, "required": [ "dependsOn" ], "type": "object" }, "DeploymentJobAgent": { "properties": { "config": { "$ref": "#/components/schemas/JobAgentConfig" }, "ref": { "type": "string" }, "selector": { "description": "CEL expression to determine if the job agent should be used", "type": "string" } }, "required": [ "ref", "config", "selector" ], "type": "object" }, "DeploymentRequestAccepted": { "properties": { "id": { "type": "string" }, "message": { "type": "string" } }, "required": [ "id", "message" ], "type": "object" }, "DeploymentVariable": { "properties": { "defaultValue": { "$ref": "#/components/schemas/LiteralValue" }, "deploymentId": { "type": "string" }, "description": { "type": "string" }, "id": { "type": "string" }, "key": { "type": "string" } }, "required": [ "id", "key", "deploymentId" ], "type": "object" }, "DeploymentVariableRequestAccepted": { "properties": { "id": { "type": "string" }, "message": { "type": "string" } }, "required": [ "id", "message" ], "type": "object" }, "DeploymentVariableValue": { "properties": { "deploymentVariableId": { "type": "string" }, "id": { "type": "string" }, "priority": { "format": "int64", "type": "integer" }, "resourceSelector": { "$ref": "#/components/schemas/Selector" }, "value": { "$ref": "#/components/schemas/Value" } }, "required": [ "id", "deploymentVariableId", "priority", "value" ], "type": "object" }, "DeploymentVariableValueRequestAccepted": { "properties": { "id": { "type": "string" }, "message": { "type": "string" } }, "required": [ "id", "message" ], "type": "object" }, "DeploymentVariableWithValues": { "properties": { "values": { "items": { "$ref": "#/components/schemas/DeploymentVariableValue" }, "type": "array" }, "variable": { "$ref": "#/components/schemas/DeploymentVariable" } }, "required": [ "variable", "values" ], "type": "object" }, "DeploymentVersion": { "properties": { "config": { "additionalProperties": true, "type": "object" }, "createdAt": { "format": "date-time", "type": "string" }, "deploymentId": { "type": "string" }, "id": { "type": "string" }, "jobAgentConfig": { "additionalProperties": true, "type": "object" }, "message": { "type": "string" }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "status": { "$ref": "#/components/schemas/DeploymentVersionStatus" }, "tag": { "type": "string" } }, "required": [ "id", "name", "tag", "config", "jobAgentConfig", "deploymentId", "status", "createdAt" ], "type": "object" }, "DeploymentVersionStatus": { "enum": [ "unspecified", "building", "ready", "failed", "rejected" ], "type": "string" }, "DeploymentWindowRule": { "properties": { "allowWindow": { "default": true, "description": "If true, deployments are only allowed during the window. If false, deployments are blocked during the window (deny window)", "type": "boolean" }, "durationMinutes": { "description": "Duration of each deployment window in minutes", "format": "int32", "minimum": 1, "type": "integer" }, "rrule": { "description": "RFC 5545 recurrence rule defining when deployment windows start (e.g., FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR;BYHOUR=9)", "type": "string" }, "timezone": { "description": "IANA timezone for the rrule (e.g., America/New_York). Defaults to UTC if not specified", "type": "string" } }, "required": [ "rrule", "durationMinutes", "allowWindow" ], "type": "object" }, "DeploymentWithVariablesAndSystems": { "properties": { "deployment": { "$ref": "#/components/schemas/Deployment" }, "systems": { "items": { "$ref": "#/components/schemas/System" }, "type": "array" }, "variables": { "items": { "$ref": "#/components/schemas/DeploymentVariableWithValues" }, "type": "array" } }, "required": [ "deployment", "variables", "systems" ], "type": "object" }, "DispatchContext": { "properties": { "deployment": { "$ref": "#/components/schemas/Deployment" }, "environment": { "$ref": "#/components/schemas/Environment" }, "jobAgent": { "$ref": "#/components/schemas/JobAgent" }, "jobAgentConfig": { "$ref": "#/components/schemas/JobAgentConfig" }, "release": { "$ref": "#/components/schemas/Release" }, "resource": { "$ref": "#/components/schemas/Resource" }, "variables": { "additionalProperties": { "$ref": "#/components/schemas/LiteralValue" }, "type": "object" }, "version": { "$ref": "#/components/schemas/DeploymentVersion" }, "workflow": { "$ref": "#/components/schemas/Workflow" }, "workflowJob": { "$ref": "#/components/schemas/WorkflowJob" }, "workflowRun": { "$ref": "#/components/schemas/WorkflowRun" } }, "required": [ "jobAgent", "jobAgentConfig" ], "type": "object" }, "Environment": { "properties": { "createdAt": { "format": "date-time", "type": "string" }, "description": { "type": "string" }, "id": { "type": "string" }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "resourceSelector": { "$ref": "#/components/schemas/Selector" } }, "required": [ "id", "name", "createdAt" ], "type": "object" }, "EnvironmentProgressionRule": { "properties": { "dependsOnEnvironmentSelector": { "$ref": "#/components/schemas/Selector" }, "maximumAgeHours": { "description": "Maximum age of dependency deployment before blocking progression (prevents stale promotions)", "format": "int32", "minimum": 0, "type": "integer" }, "minimumSockTimeMinutes": { "default": 0, "description": "Minimum time to wait after the depends on environment is in a success state before the current environment can be deployed", "format": "int32", "minimum": 0, "type": "integer" }, "minimumSuccessPercentage": { "default": 100, "format": "float", "maximum": 100, "minimum": 0, "type": "number" }, "successStatuses": { "items": { "$ref": "#/components/schemas/JobStatus" }, "type": "array" } }, "required": [ "dependsOnEnvironmentSelector" ], "type": "object" }, "EnvironmentRequestAccepted": { "properties": { "id": { "type": "string" }, "message": { "type": "string" } }, "required": [ "id", "message" ], "type": "object" }, "EnvironmentWithSystems": { "allOf": [ { "$ref": "#/components/schemas/Environment" }, { "properties": { "systems": { "items": { "$ref": "#/components/schemas/System" }, "type": "array" } }, "required": [ "systems" ], "type": "object" } ] }, "Error": { "properties": { "code": { "description": "Error code", "type": "string" }, "details": { "description": "Additional error details", "type": "object" }, "message": { "description": "Error message", "type": "string" } }, "required": [ "message" ], "type": "object" }, "ErrorResponse": { "properties": { "error": { "example": "Workspace not found", "type": "string" } }, "type": "object" }, "GradualRolloutRule": { "properties": { "rolloutType": { "description": "Strategy for scheduling deployments to release targets. \"linear\": Each target is deployed at a fixed interval of timeScaleInterval seconds. \"linear-normalized\": Deployments are spaced evenly so that the last target is scheduled at or before timeScaleInterval seconds. See rolloutType algorithm documentation for details.", "enum": [ "linear", "linear-normalized" ], "type": "string" }, "timeScaleInterval": { "description": "Base time interval in seconds used to compute the delay between deployments to release targets.", "format": "int32", "minimum": 0, "type": "integer" } }, "required": [ "timeScaleInterval", "rolloutType" ], "type": "object" }, "HTTPMetricProvider": { "properties": { "body": { "description": "Request body (supports Go templates)", "type": "string" }, "headers": { "additionalProperties": { "type": "string" }, "description": "HTTP headers (values support Go templates)", "type": "object" }, "method": { "default": "GET", "description": "HTTP method", "enum": [ "GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS" ], "type": "string" }, "timeout": { "default": "30s", "description": "Request timeout (duration string, e.g., \"30s\")", "type": "string" }, "type": { "description": "Provider type", "enum": [ "http" ], "type": "string" }, "url": { "description": "HTTP endpoint URL (supports Go templates)", "example": "http://{{ .resource.name }}.{{ .environment.name }}/health", "type": "string" } }, "required": [ "type", "url" ], "type": "object" }, "IntegerValue": { "type": "integer" }, "Job": { "properties": { "completedAt": { "format": "date-time", "type": "string" }, "createdAt": { "format": "date-time", "type": "string" }, "dispatchContext": { "$ref": "#/components/schemas/DispatchContext" }, "externalId": { "type": "string" }, "id": { "type": "string" }, "jobAgentConfig": { "additionalProperties": true, "type": "object" }, "jobAgentId": { "type": "string" }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "releaseId": { "type": "string" }, "startedAt": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/components/schemas/JobStatus" }, "updatedAt": { "format": "date-time", "type": "string" } }, "required": [ "id", "releaseId", "jobAgentId", "jobAgentConfig", "status", "createdAt", "updatedAt", "metadata" ], "type": "object" }, "JobAgent": { "properties": { "config": { "additionalProperties": true, "type": "object" }, "id": { "type": "string" }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "type": { "type": "string" } }, "required": [ "id", "name", "type", "config", "metadata" ], "type": "object" }, "JobAgentConfig": { "additionalProperties": true, "type": "object" }, "JobAgentRequestAccepted": { "properties": { "id": { "type": "string" }, "message": { "type": "string" } }, "required": [ "id", "message" ], "type": "object" }, "JobStatus": { "enum": [ "cancelled", "skipped", "inProgress", "actionRequired", "pending", "failure", "invalidJobAgent", "invalidIntegration", "externalRunNotFound", "successful" ], "type": "string" }, "JobStatusRequestAccepted": { "properties": { "id": { "type": "string" }, "message": { "type": "string" } }, "required": [ "id", "message" ], "type": "object" }, "JobUpdateEvent": { "oneOf": [ { "required": [ "id" ] }, { "required": [ "agentId", "externalId" ] } ], "properties": { "agentId": { "type": "string" }, "externalId": { "type": "string" }, "fieldsToUpdate": { "items": { "enum": [ "completedAt", "createdAt", "dispatchContext", "externalId", "id", "jobAgentConfig", "jobAgentId", "metadata", "releaseId", "startedAt", "status", "updatedAt" ], "type": "string" }, "type": "array" }, "id": { "type": "string" }, "job": { "$ref": "#/components/schemas/Job" } }, "required": [ "job" ], "type": "object" }, "JobVerification": { "properties": { "createdAt": { "description": "When verification was created", "format": "date-time", "type": "string" }, "id": { "type": "string" }, "jobId": { "type": "string" }, "message": { "description": "Summary message of verification result", "type": "string" }, "metrics": { "description": "Metrics associated with this verification", "items": { "$ref": "#/components/schemas/VerificationMetricStatus" }, "type": "array" } }, "required": [ "id", "jobId", "metrics", "createdAt" ], "type": "object" }, "JobWithRelease": { "properties": { "deployment": { "$ref": "#/components/schemas/Deployment" }, "environment": { "$ref": "#/components/schemas/Environment" }, "job": { "$ref": "#/components/schemas/Job" }, "release": { "$ref": "#/components/schemas/Release" }, "resource": { "$ref": "#/components/schemas/Resource" } }, "required": [ "job", "release" ], "type": "object" }, "JsonSelector": { "properties": { "json": { "additionalProperties": true, "type": "object" } }, "required": [ "json" ], "type": "object" }, "LiteralValue": { "oneOf": [ { "$ref": "#/components/schemas/BooleanValue" }, { "$ref": "#/components/schemas/NumberValue" }, { "$ref": "#/components/schemas/IntegerValue" }, { "$ref": "#/components/schemas/StringValue" }, { "$ref": "#/components/schemas/ObjectValue" }, { "$ref": "#/components/schemas/NullValue" } ] }, "MetricProvider": { "discriminator": { "mapping": { "datadog": "#/components/schemas/DatadogMetricProvider", "http": "#/components/schemas/HTTPMetricProvider", "prometheus": "#/components/schemas/PrometheusMetricProvider", "sleep": "#/components/schemas/SleepMetricProvider", "terraformCloudRun": "#/components/schemas/TerraformCloudRunMetricProvider" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/components/schemas/HTTPMetricProvider" }, { "$ref": "#/components/schemas/SleepMetricProvider" }, { "$ref": "#/components/schemas/DatadogMetricProvider" }, { "$ref": "#/components/schemas/PrometheusMetricProvider" }, { "$ref": "#/components/schemas/TerraformCloudRunMetricProvider" } ] }, "NullValue": { "enum": [ true ], "type": "boolean" }, "NumberValue": { "type": "number" }, "ObjectValue": { "properties": { "object": { "additionalProperties": true, "type": "object" } }, "required": [ "object" ], "type": "object" }, "Policy": { "properties": { "createdAt": { "type": "string" }, "description": { "type": "string" }, "enabled": { "type": "boolean" }, "id": { "type": "string" }, "metadata": { "additionalProperties": { "type": "string" }, "description": "Arbitrary metadata for the policy (record)", "type": "object" }, "name": { "type": "string" }, "priority": { "type": "integer" }, "rules": { "items": { "$ref": "#/components/schemas/PolicyRule" }, "type": "array" }, "selector": { "description": "CEL expression for matching release targets. Use \"true\" to match all targets.", "type": "string" }, "workspaceId": { "type": "string" } }, "required": [ "id", "name", "createdAt", "workspaceId", "selector", "rules", "metadata", "priority", "enabled" ], "type": "object" }, "PolicyRule": { "properties": { "anyApproval": { "$ref": "#/components/schemas/AnyApprovalRule" }, "createdAt": { "type": "string" }, "deploymentDependency": { "$ref": "#/components/schemas/DeploymentDependencyRule" }, "deploymentWindow": { "$ref": "#/components/schemas/DeploymentWindowRule" }, "environmentProgression": { "$ref": "#/components/schemas/EnvironmentProgressionRule" }, "gradualRollout": { "$ref": "#/components/schemas/GradualRolloutRule" }, "id": { "type": "string" }, "policyId": { "type": "string" }, "retry": { "$ref": "#/components/schemas/RetryRule" }, "verification": { "$ref": "#/components/schemas/VerificationRule" }, "versionCooldown": { "$ref": "#/components/schemas/VersionCooldownRule" }, "versionSelector": { "$ref": "#/components/schemas/VersionSelectorRule" } }, "required": [ "id", "policyId", "createdAt" ], "type": "object" }, "PrometheusMetricProvider": { "properties": { "address": { "description": "Prometheus server address (supports Go templates)", "example": "http://prometheus.example.com:9090", "type": "string" }, "authentication": { "description": "Authentication configuration for Prometheus", "properties": { "bearerToken": { "description": "Bearer token for authentication (supports Go templates for variable references)", "example": "{{.variables.prometheus_token}}", "type": "string" }, "oauth2": { "description": "OAuth2 client credentials flow", "properties": { "clientId": { "description": "OAuth2 client ID (supports Go templates)", "type": "string" }, "clientSecret": { "description": "OAuth2 client secret (supports Go templates)", "type": "string" }, "scopes": { "description": "OAuth2 scopes", "items": { "type": "string" }, "type": "array" }, "tokenUrl": { "description": "Token endpoint URL", "type": "string" } }, "required": [ "tokenUrl", "clientId", "clientSecret" ], "type": "object" } }, "type": "object" }, "headers": { "description": "Additional HTTP headers for the Prometheus request (values support Go templates)", "items": { "properties": { "key": { "example": "X-Scope-OrgID", "type": "string" }, "value": { "example": "tenant_a", "type": "string" } }, "required": [ "key", "value" ], "type": "object" }, "type": "array" }, "insecure": { "default": false, "description": "Skip TLS certificate verification", "type": "boolean" }, "query": { "description": "PromQL query expression (supports Go templates)", "example": "sum(irate(istio_requests_total{reporter=\"source\",destination_service=~\"{{.resource.name}}\",response_code!~\"5.*\"}[5m]))", "type": "string" }, "rangeQuery": { "description": "If provided, a range query (/api/v1/query_range) is used instead of an instant query (/api/v1/query)", "properties": { "end": { "description": "How far back from now for the query end, as a Prometheus duration (e.g., \"0s\" for now, \"1m\" for 1 minute ago). Defaults to \"0s\" (now) if unset.", "example": "0s", "type": "string" }, "start": { "description": "How far back from now to start the query, as a Prometheus duration (e.g., \"5m\", \"1h\"). Defaults to 10 * step if unset.", "example": "5m", "type": "string" }, "step": { "description": "Query resolution step width as a Prometheus duration (e.g., \"15s\", \"1m\", \"500ms\")", "example": "1m", "type": "string" } }, "required": [ "step" ], "type": "object" }, "timeout": { "description": "Query timeout in seconds", "example": 30, "format": "int64", "type": "integer" }, "type": { "description": "Provider type", "enum": [ "prometheus" ], "type": "string" } }, "required": [ "type", "address", "query" ], "type": "object" }, "PropertyMatcher": { "properties": { "fromProperty": { "items": { "type": "string" }, "type": "array" }, "operator": { "enum": [ "equals", "notEquals", "contains", "startsWith", "endsWith", "regex" ], "type": "string" }, "toProperty": { "items": { "type": "string" }, "type": "array" } }, "required": [ "fromProperty", "toProperty", "operator" ], "type": "object" }, "ReferenceValue": { "properties": { "path": { "items": { "type": "string" }, "type": "array" }, "reference": { "type": "string" } }, "required": [ "reference", "path" ], "type": "object" }, "RelatableEntityType": { "enum": [ "deployment", "environment", "resource" ], "type": "string" }, "RelationshipRule": { "properties": { "description": { "type": "string" }, "fromSelector": { "$ref": "#/components/schemas/Selector" }, "fromType": { "$ref": "#/components/schemas/RelatableEntityType" }, "id": { "type": "string" }, "matcher": { "oneOf": [ { "$ref": "#/components/schemas/CelMatcher" } ] }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "reference": { "type": "string" }, "relationshipType": { "type": "string" }, "toSelector": { "$ref": "#/components/schemas/Selector" }, "toType": { "$ref": "#/components/schemas/RelatableEntityType" }, "workspaceId": { "type": "string" } }, "required": [ "id", "name", "reference", "fromType", "toType", "matcher", "relationshipType", "metadata", "workspaceId" ], "type": "object" }, "Release": { "properties": { "createdAt": { "type": "string" }, "encryptedVariables": { "items": { "type": "string" }, "type": "array" }, "releaseTarget": { "$ref": "#/components/schemas/ReleaseTarget" }, "variables": { "additionalProperties": { "$ref": "#/components/schemas/LiteralValue" }, "type": "object" }, "version": { "$ref": "#/components/schemas/DeploymentVersion" } }, "required": [ "version", "variables", "encryptedVariables", "releaseTarget", "createdAt" ], "type": "object" }, "ReleaseTarget": { "properties": { "deploymentId": { "type": "string" }, "environmentId": { "type": "string" }, "resourceId": { "type": "string" } }, "required": [ "resourceId", "environmentId", "deploymentId" ], "type": "object" }, "ReleaseTargetPreview": { "properties": { "deployment": { "$ref": "#/components/schemas/Deployment" }, "environment": { "$ref": "#/components/schemas/Environment" }, "system": { "$ref": "#/components/schemas/System" } }, "required": [ "system", "deployment", "environment" ], "type": "object" }, "ReleaseTargetState": { "properties": { "currentRelease": { "$ref": "#/components/schemas/Release" }, "desiredRelease": { "$ref": "#/components/schemas/Release" }, "latestJob": { "$ref": "#/components/schemas/Job" } }, "type": "object" }, "ReleaseTargetWithState": { "properties": { "releaseTarget": { "$ref": "#/components/schemas/ReleaseTarget" }, "state": { "$ref": "#/components/schemas/ReleaseTargetState" } }, "required": [ "releaseTarget", "state" ], "type": "object" }, "Resource": { "properties": { "config": { "additionalProperties": true, "type": "object" }, "createdAt": { "format": "date-time", "type": "string" }, "deletedAt": { "format": "date-time", "type": "string" }, "identifier": { "type": "string" }, "kind": { "type": "string" }, "lockedAt": { "format": "date-time", "type": "string" }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "providerId": { "type": "string" }, "updatedAt": { "format": "date-time", "type": "string" }, "version": { "type": "string" }, "workspaceId": { "type": "string" } }, "required": [ "name", "version", "kind", "identifier", "createdAt", "workspaceId", "config", "metadata" ], "type": "object" }, "ResourcePreviewRequest": { "properties": { "config": { "additionalProperties": true, "type": "object" }, "identifier": { "type": "string" }, "kind": { "type": "string" }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "version": { "type": "string" } }, "required": [ "name", "version", "kind", "identifier", "config", "metadata" ], "type": "object" }, "ResourceProvider": { "properties": { "createdAt": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "metadata": { "additionalProperties": { "type": "string" }, "description": "Arbitrary metadata for the resource provider (record)", "type": "object" }, "name": { "type": "string" }, "workspaceId": { "format": "uuid", "type": "string" } }, "required": [ "id", "workspaceId", "name", "createdAt" ], "type": "object" }, "ResourceProviderResource": { "properties": { "config": { "additionalProperties": true, "type": "object" }, "createdAt": { "format": "date-time", "type": "string" }, "deletedAt": { "format": "date-time", "type": "string" }, "identifier": { "type": "string" }, "kind": { "type": "string" }, "lockedAt": { "format": "date-time", "type": "string" }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "updatedAt": { "format": "date-time", "type": "string" }, "version": { "type": "string" } }, "required": [ "name", "version", "kind", "identifier", "createdAt", "config", "metadata" ], "type": "object" }, "ResourceProviderSetRequestAccepted": { "properties": { "batchId": { "type": "string" }, "method": { "type": "string" }, "ok": { "type": "boolean" } }, "required": [ "ok", "method" ], "type": "object" }, "ResourceRequestAccepted": { "properties": { "id": { "type": "string" }, "message": { "type": "string" } }, "required": [ "id", "message" ], "type": "object" }, "ResourceVariable": { "properties": { "key": { "type": "string" }, "resourceId": { "type": "string" }, "value": { "$ref": "#/components/schemas/Value" } }, "required": [ "resourceId", "key", "value" ], "type": "object" }, "RetryRule": { "properties": { "backoffSeconds": { "description": "Minimum seconds to wait between retry attempts. If null, retries are allowed immediately after job completion.", "format": "int32", "minimum": 0, "type": "integer" }, "backoffStrategy": { "default": "linear", "description": "Backoff strategy: \"linear\" uses constant backoffSeconds delay, \"exponential\" doubles the delay with each retry (backoffSeconds * 2^(attempt-1)).", "enum": [ "linear", "exponential" ], "type": "string" }, "maxBackoffSeconds": { "description": "Maximum backoff time in seconds (cap for exponential backoff). If null, no maximum is enforced.", "format": "int32", "minimum": 0, "type": "integer" }, "maxRetries": { "description": "Maximum number of retries allowed. 0 means no retries (1 attempt total), 3 means up to 4 attempts (1 initial + 3 retries).", "format": "int32", "minimum": 0, "type": "integer" }, "retryOnStatuses": { "description": "Job statuses that count toward the retry limit. If null or empty, defaults to [\"failure\", \"invalidIntegration\", \"invalidJobAgent\"] for maxRetries > 0, or [\"failure\", \"invalidIntegration\", \"invalidJobAgent\", \"successful\"] for maxRetries = 0. Cancelled and skipped jobs never count by default (allows redeployment after cancellation). Example: [\"failure\", \"cancelled\"] will only count failed/cancelled jobs.", "items": { "$ref": "#/components/schemas/JobStatus" }, "type": "array" } }, "required": [ "maxRetries" ], "type": "object" }, "Selector": { "oneOf": [ { "$ref": "#/components/schemas/JsonSelector" }, { "$ref": "#/components/schemas/CelSelector" } ] }, "SensitiveValue": { "properties": { "valueHash": { "type": "string" } }, "required": [ "valueHash" ], "type": "object" }, "SleepMetricProvider": { "properties": { "durationSeconds": { "example": 30, "format": "int32", "maximum": 3600, "minimum": 1, "type": "integer" }, "type": { "description": "Provider type", "enum": [ "sleep" ], "type": "string" } }, "required": [ "type", "durationSeconds" ], "type": "object" }, "StringValue": { "type": "string" }, "System": { "properties": { "description": { "type": "string" }, "id": { "type": "string" }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "slug": { "type": "string" }, "workspaceId": { "type": "string" } }, "required": [ "id", "workspaceId", "name", "slug" ], "type": "object" }, "SystemDeploymentLink": { "properties": { "deploymentId": { "type": "string" }, "systemId": { "type": "string" } }, "required": [ "systemId", "deploymentId" ], "type": "object" }, "SystemEnvironmentLink": { "properties": { "environmentId": { "type": "string" }, "systemId": { "type": "string" } }, "required": [ "systemId", "environmentId" ], "type": "object" }, "SystemRequestAccepted": { "properties": { "id": { "type": "string" }, "message": { "type": "string" } }, "required": [ "id", "message" ], "type": "object" }, "SystemWithLinkedEntities": { "allOf": [ { "$ref": "#/components/schemas/System" }, { "properties": { "deployments": { "items": { "$ref": "#/components/schemas/Deployment" }, "type": "array" }, "environments": { "items": { "$ref": "#/components/schemas/Environment" }, "type": "array" } }, "required": [ "environments", "deployments" ], "type": "object" } ] }, "TerraformCloudRunMetricProvider": { "properties": { "address": { "description": "Terraform Cloud address", "example": "https://app.terraform.io", "type": "string" }, "runId": { "description": "Terraform Cloud run ID", "example": "run-1234567890", "type": "string" }, "token": { "description": "Terraform Cloud token", "example": "{{.variables.terraform_cloud_token}}", "type": "string" }, "type": { "description": "Provider type", "enum": [ "terraformCloudRun" ], "type": "string" } }, "required": [ "type", "address", "token", "runId" ], "type": "object" }, "UpdateDeploymentVersionRequest": { "properties": { "config": { "additionalProperties": true, "type": "object" }, "createdAt": { "format": "date-time", "type": "string" }, "jobAgentConfig": { "additionalProperties": true, "type": "object" }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "status": { "$ref": "#/components/schemas/DeploymentVersionStatus" }, "tag": { "type": "string" } }, "required": [ "id" ], "type": "object" }, "UpdateWorkflow": { "properties": { "inputs": { "items": { "$ref": "#/components/schemas/WorkflowInput" }, "type": "array" }, "jobs": { "items": { "$ref": "#/components/schemas/CreateWorkflowJobTemplate" }, "type": "array" }, "name": { "type": "string" } }, "required": [ "name", "inputs", "jobs" ], "type": "object" }, "UpdateWorkspaceRequest": { "properties": { "name": { "description": "Display name of the workspace", "maxLength": 30, "minLength": 3, "type": "string" }, "slug": { "description": "URL-friendly unique identifier (lowercase, no spaces)", "maxLength": 50, "minLength": 3, "pattern": "^[a-z0-9-]+$", "type": "string" } }, "type": "object" }, "UpsertDeploymentRequest": { "properties": { "description": { "type": "string" }, "jobAgentConfig": { "additionalProperties": true, "type": "object" }, "jobAgentId": { "type": "string" }, "jobAgents": { "items": { "$ref": "#/components/schemas/DeploymentJobAgent" }, "type": "array" }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "resourceSelector": { "$ref": "#/components/schemas/Selector" }, "slug": { "type": "string" } }, "required": [ "name", "slug" ], "type": "object" }, "UpsertDeploymentVariableRequest": { "properties": { "defaultValue": { "$ref": "#/components/schemas/LiteralValue" }, "deploymentId": { "type": "string" }, "description": { "type": "string" }, "key": { "type": "string" } }, "required": [ "deploymentId", "key" ], "type": "object" }, "UpsertDeploymentVariableValueRequest": { "properties": { "deploymentVariableId": { "type": "string" }, "priority": { "format": "int64", "type": "integer" }, "resourceSelector": { "$ref": "#/components/schemas/Selector" }, "value": { "$ref": "#/components/schemas/Value" } }, "required": [ "deploymentVariableId", "priority", "value" ], "type": "object" }, "UpsertDeploymentVersionRequest": { "properties": { "config": { "additionalProperties": true, "type": "object" }, "createdAt": { "format": "date-time", "type": "string" }, "deploymentId": { "type": "string" }, "jobAgentConfig": { "additionalProperties": true, "type": "object" }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "status": { "$ref": "#/components/schemas/DeploymentVersionStatus" }, "tag": { "type": "string" } }, "required": [ "tag", "deploymentId" ], "type": "object" }, "UpsertEnvironmentRequest": { "properties": { "description": { "type": "string" }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "resourceSelector": { "$ref": "#/components/schemas/Selector" } }, "required": [ "name" ], "type": "object" }, "UpsertJobAgentRequest": { "properties": { "config": { "additionalProperties": true, "type": "object" }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "type": { "type": "string" } }, "required": [ "name", "type", "config" ], "type": "object" }, "UpsertPolicyRequest": { "properties": { "description": { "type": "string" }, "enabled": { "type": "boolean" }, "metadata": { "additionalProperties": { "type": "string" }, "description": "Arbitrary metadata for the policy (record)", "type": "object" }, "name": { "type": "string" }, "priority": { "type": "integer" }, "rules": { "items": { "$ref": "#/components/schemas/UpsertPolicyRule" }, "type": "array" }, "selector": { "description": "CEL expression for matching release targets. Use \"true\" to match all targets.", "type": "string" } }, "required": [ "name", "selector", "rules", "priority", "enabled", "metadata" ], "type": "object" }, "UpsertPolicyRule": { "properties": { "anyApproval": { "$ref": "#/components/schemas/AnyApprovalRule" }, "createdAt": { "type": "string" }, "deploymentDependency": { "$ref": "#/components/schemas/DeploymentDependencyRule" }, "deploymentWindow": { "$ref": "#/components/schemas/DeploymentWindowRule" }, "environmentProgression": { "$ref": "#/components/schemas/EnvironmentProgressionRule" }, "gradualRollout": { "$ref": "#/components/schemas/GradualRolloutRule" }, "id": { "type": "string" }, "policyId": { "type": "string" }, "retry": { "$ref": "#/components/schemas/RetryRule" }, "verification": { "$ref": "#/components/schemas/VerificationRule" }, "versionCooldown": { "$ref": "#/components/schemas/VersionCooldownRule" }, "versionSelector": { "$ref": "#/components/schemas/VersionSelectorRule" } }, "type": "object" }, "UpsertRelationshipRuleRequest": { "properties": { "description": { "type": "string" }, "fromSelector": { "$ref": "#/components/schemas/Selector" }, "fromType": { "$ref": "#/components/schemas/RelatableEntityType" }, "matcher": { "oneOf": [ { "$ref": "#/components/schemas/CelMatcher" } ] }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "reference": { "type": "string" }, "relationshipType": { "type": "string" }, "toSelector": { "$ref": "#/components/schemas/Selector" }, "toType": { "$ref": "#/components/schemas/RelatableEntityType" } }, "required": [ "name", "reference", "fromType", "toType", "matcher", "relationshipType", "metadata" ], "type": "object" }, "UpsertResourceProviderRequest": { "properties": { "id": { "type": "string" }, "metadata": { "additionalProperties": { "type": "string" }, "description": "Arbitrary metadata for the resource provider (record)", "type": "object" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "UpsertSystemRequest": { "properties": { "description": { "type": "string" }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "slug": { "type": "string" } }, "required": [ "name" ], "type": "object" }, "UpsertUserApprovalRecordRequest": { "properties": { "environmentIds": { "items": { "type": "string" }, "type": "array" }, "reason": { "type": "string" }, "status": { "$ref": "#/components/schemas/ApprovalStatus" } }, "required": [ "status", "environmentIds" ], "type": "object" }, "UserApprovalRecord": { "properties": { "createdAt": { "format": "date-time", "type": "string" }, "environmentId": { "type": "string" }, "reason": { "type": "string" }, "status": { "$ref": "#/components/schemas/ApprovalStatus" }, "userId": { "type": "string" }, "versionId": { "type": "string" } }, "required": [ "userId", "versionId", "environmentId", "status", "createdAt" ], "type": "object" }, "UserApprovalRecordRequestAccepted": { "properties": { "id": { "type": "string" }, "message": { "type": "string" } }, "required": [ "id", "message" ], "type": "object" }, "Value": { "oneOf": [ { "$ref": "#/components/schemas/LiteralValue" }, { "$ref": "#/components/schemas/ReferenceValue" }, { "$ref": "#/components/schemas/SensitiveValue" } ] }, "VerificationMeasurement": { "properties": { "data": { "additionalProperties": true, "description": "Raw measurement data", "type": "object" }, "measuredAt": { "description": "When measurement was taken", "format": "date-time", "type": "string" }, "message": { "description": "Measurement result message", "type": "string" }, "status": { "$ref": "#/components/schemas/VerificationMeasurementStatus" } }, "required": [ "status", "measuredAt" ], "type": "object" }, "VerificationMeasurementStatus": { "description": "Status of a verification measurement", "enum": [ "passed", "failed", "inconclusive" ], "type": "string" }, "VerificationMetricSpec": { "properties": { "count": { "description": "Number of measurements to take", "minimum": 1, "type": "integer" }, "failureCondition": { "description": "CEL expression to evaluate measurement failure (e.g., \"result.statusCode == 500\"), if not provided, a failure is just the opposite of the success condition", "example": "result.statusCode == 500", "type": "string" }, "failureThreshold": { "default": 0, "description": "Stop after this many consecutive failures (0 = no limit)", "type": "integer" }, "intervalSeconds": { "description": "Interval between measurements in seconds", "example": 30, "format": "int32", "minimum": 1, "type": "integer" }, "name": { "description": "Name of the verification metric", "type": "string" }, "provider": { "$ref": "#/components/schemas/MetricProvider" }, "successCondition": { "description": "CEL expression to evaluate measurement success (e.g., \"result.statusCode == 200\")", "example": "result.statusCode == 200", "type": "string" }, "successThreshold": { "description": "Minimum number of consecutive successful measurements required to consider the metric successful", "example": 0, "type": "integer" } }, "required": [ "name", "intervalSeconds", "count", "provider", "successCondition" ], "type": "object" }, "VerificationMetricStatus": { "allOf": [ { "$ref": "#/components/schemas/VerificationMetricSpec" }, { "properties": { "measurements": { "description": "Individual verification measurements taken for this metric", "items": { "$ref": "#/components/schemas/VerificationMeasurement" }, "type": "array" } }, "required": [ "measurements" ], "type": "object" } ] }, "VerificationRule": { "properties": { "metrics": { "description": "Metrics to verify", "items": { "$ref": "#/components/schemas/VerificationMetricSpec" }, "minItems": 1, "type": "array" }, "triggerOn": { "default": "jobSuccess", "description": "When to trigger verification", "enum": [ "jobCreated", "jobStarted", "jobSuccess", "jobFailure" ], "type": "string" } }, "required": [ "metrics" ], "type": "object" }, "VersionCooldownRule": { "properties": { "intervalSeconds": { "description": "Minimum time in seconds that must pass since the currently deployed (or in-progress) version was created before allowing another deployment. This enables batching of frequent upstream releases into periodic deployments.", "format": "int32", "minimum": 0, "type": "integer" } }, "required": [ "intervalSeconds" ], "type": "object" }, "VersionSelectorRule": { "properties": { "description": { "description": "Human-readable description of what this version selector does. Example: \"Only deploy v2.x versions to staging environments\"", "type": "string" }, "selector": { "$ref": "#/components/schemas/Selector" } }, "required": [ "selector" ], "type": "object" }, "Workflow": { "properties": { "id": { "type": "string" }, "inputs": { "items": { "$ref": "#/components/schemas/WorkflowInput" }, "type": "array" }, "jobs": { "items": { "$ref": "#/components/schemas/WorkflowJobTemplate" }, "type": "array" }, "name": { "type": "string" } }, "required": [ "id", "name", "inputs", "jobs" ], "type": "object" }, "WorkflowArrayInput": { "oneOf": [ { "$ref": "#/components/schemas/WorkflowManualArrayInput" }, { "$ref": "#/components/schemas/WorkflowSelectorArrayInput" } ] }, "WorkflowBooleanInput": { "properties": { "default": { "type": "boolean" }, "key": { "type": "string" }, "type": { "enum": [ "boolean" ], "type": "string" } }, "required": [ "key", "type" ], "type": "object" }, "WorkflowInput": { "oneOf": [ { "$ref": "#/components/schemas/WorkflowStringInput" }, { "$ref": "#/components/schemas/WorkflowNumberInput" }, { "$ref": "#/components/schemas/WorkflowBooleanInput" }, { "$ref": "#/components/schemas/WorkflowArrayInput" }, { "$ref": "#/components/schemas/WorkflowObjectInput" } ] }, "WorkflowJob": { "properties": { "config": { "additionalProperties": true, "description": "Configuration for the job agent", "type": "object" }, "id": { "type": "string" }, "index": { "type": "integer" }, "ref": { "description": "Reference to the job agent", "type": "string" }, "workflowId": { "type": "string" } }, "required": [ "id", "workflowId", "index", "ref", "config" ], "type": "object" }, "WorkflowJobAgentConfig": { "properties": { "config": { "additionalProperties": true, "type": "object" }, "id": { "type": "string" } }, "required": [ "id", "config" ], "type": "object" }, "WorkflowJobMatrix": { "additionalProperties": { "oneOf": [ { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, { "type": "string" } ] }, "type": "object" }, "WorkflowJobTemplate": { "properties": { "config": { "additionalProperties": true, "description": "Configuration for the job agent", "type": "object" }, "id": { "type": "string" }, "if": { "description": "CEL expression to determine if the job should run", "type": "string" }, "matrix": { "$ref": "#/components/schemas/WorkflowJobMatrix" }, "name": { "type": "string" }, "ref": { "description": "Reference to the job agent", "type": "string" } }, "required": [ "id", "name", "ref", "config" ], "type": "object" }, "WorkflowManualArrayInput": { "properties": { "default": { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, "key": { "type": "string" }, "type": { "enum": [ "array" ], "type": "string" } }, "required": [ "key", "type" ], "type": "object" }, "WorkflowNumberInput": { "properties": { "default": { "type": "number" }, "key": { "type": "string" }, "type": { "enum": [ "number" ], "type": "string" } }, "required": [ "key", "type" ], "type": "object" }, "WorkflowObjectInput": { "properties": { "default": { "additionalProperties": true, "type": "object" }, "key": { "type": "string" }, "type": { "enum": [ "object" ], "type": "string" } }, "required": [ "key", "type" ], "type": "object" }, "WorkflowRun": { "properties": { "id": { "type": "string" }, "inputs": { "additionalProperties": true, "type": "object" }, "workflowId": { "type": "string" } }, "required": [ "id", "workflowId", "inputs" ], "type": "object" }, "WorkflowSelectorArrayInput": { "properties": { "key": { "type": "string" }, "selector": { "properties": { "default": { "$ref": "#/components/schemas/Selector" }, "entityType": { "enum": [ "resource", "environment", "deployment" ], "type": "string" } }, "required": [ "entityType" ], "type": "object" }, "type": { "enum": [ "array" ], "type": "string" } }, "required": [ "key", "type", "selector" ], "type": "object" }, "WorkflowStringInput": { "properties": { "default": { "type": "string" }, "key": { "type": "string" }, "type": { "enum": [ "string" ], "type": "string" } }, "required": [ "key", "type" ], "type": "object" }, "Workspace": { "properties": { "awsRoleArn": { "description": "AWS IAM role ARN for integrations", "nullable": true, "type": "string" }, "createdAt": { "description": "Timestamp when workspace was created", "format": "date-time", "type": "string" }, "googleServiceAccountEmail": { "description": "Google service account email for integrations", "format": "email", "nullable": true, "type": "string" }, "id": { "description": "Unique identifier for the workspace", "format": "uuid", "type": "string" }, "name": { "description": "Display name of the workspace", "maxLength": 30, "minLength": 3, "type": "string" }, "slug": { "description": "URL-friendly unique identifier", "maxLength": 50, "minLength": 3, "pattern": "^[a-z0-9-]+$", "type": "string" } }, "required": [ "id", "name", "slug", "createdAt" ], "type": "object" }, "WorkspaceList": { "properties": { "total": { "description": "Total number of workspaces", "type": "integer" }, "workspaces": { "items": { "$ref": "#/components/schemas/Workspace" }, "type": "array" } }, "required": [ "workspaces", "total" ], "type": "object" } }, "securitySchemes": { "ApiKeyAuth": { "description": "API key authentication using X-API-Key header", "in": "header", "name": "X-API-Key", "type": "apiKey" }, "BearerAuth": { "bearerFormat": "JWT", "description": "Session-based authentication using Better Auth", "scheme": "bearer", "type": "http" } } }, "info": { "description": "OpenAPI schemas for Ctrlplane API", "title": "Ctrlplane API", "version": "1.0.0" }, "openapi": "3.0.0", "paths": { "/v1/workspaces": { "get": { "description": "Get all workspaces accessible to the authenticated user", "operationId": "listWorkspaces", "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WorkspaceList" } } }, "description": "List of workspaces" }, "401": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } }, "description": "Unauthorized" }, "500": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } }, "description": "Internal server error" } }, "summary": "List workspaces", "tags": [ "Workspaces" ] }, "post": { "description": "Create a new workspace and assign creator as owner", "operationId": "createWorkspace", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateWorkspaceRequest" } } }, "required": true }, "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Workspace" } } }, "description": "Workspace created successfully" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } }, "description": "Invalid request" }, "401": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } }, "description": "Unauthorized" }, "409": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } }, "description": "Workspace slug already exists" }, "500": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } }, "description": "Internal server error" } }, "summary": "Create workspace", "tags": [ "Workspaces" ] } }, "/v1/workspaces/slug/{workspaceSlug}": { "get": { "description": "Get a specific workspace by its slug", "operationId": "getWorkspaceBySlug", "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Workspace" } } }, "description": "Workspace details" }, "401": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } }, "description": "Unauthorized" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } }, "description": "Workspace not found" }, "500": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } }, "description": "Internal server error" } }, "summary": "Get workspace by slug", "tags": [ "Workspaces" ] }, "parameters": [ { "description": "Workspace slug", "in": "path", "name": "workspaceSlug", "required": true, "schema": { "type": "string" } } ] }, "/v1/workspaces/{workspaceId}": { "delete": { "description": "Delete a workspace and all associated data", "operationId": "deleteWorkspace", "responses": { "204": { "description": "Workspace deleted successfully" }, "401": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } }, "description": "Unauthorized" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } }, "description": "Workspace not found" }, "500": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } }, "description": "Internal server error" } }, "summary": "Delete workspace", "tags": [ "Workspaces" ] }, "get": { "description": "Get a specific workspace by ID", "operationId": "getWorkspace", "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Workspace" } } }, "description": "Workspace details" }, "401": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } }, "description": "Unauthorized" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } }, "description": "Workspace not found" }, "500": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } }, "description": "Internal server error" } }, "summary": "Get workspace", "tags": [ "Workspaces" ] }, "parameters": [ { "description": "Workspace ID", "in": "path", "name": "workspaceId", "required": true, "schema": { "format": "uuid", "type": "string" } } ], "patch": { "description": "Update workspace properties", "operationId": "updateWorkspace", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateWorkspaceRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Workspace" } } }, "description": "Workspace updated successfully" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } }, "description": "Invalid request" }, "401": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } }, "description": "Unauthorized" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } }, "description": "Workspace not found" }, "409": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } }, "description": "Workspace slug already exists" }, "500": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } }, "description": "Internal server error" } }, "summary": "Update workspace", "tags": [ "Workspaces" ] } }, "/v1/workspaces/{workspaceId}/deployment-variable-values/{valueId}": { "delete": { "description": "Deletes a variable value override by ID.", "operationId": "requestDeploymentVariableValueDeletion", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the variable value", "in": "path", "name": "valueId", "required": true, "schema": { "type": "string" } } ], "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeploymentVariableValueRequestAccepted" } } }, "description": "Accepted response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Delete deployment variable value" }, "get": { "description": "Returns a specific variable value override by ID.", "operationId": "getDeploymentVariableValue", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the variable value", "in": "path", "name": "valueId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeploymentVariableValue" } } }, "description": "The requested variable value" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Get deployment variable value" }, "put": { "description": "Creates or updates a variable value override by ID.", "operationId": "requestDeploymentVariableValueUpsert", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the variable value", "in": "path", "name": "valueId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpsertDeploymentVariableValueRequest" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeploymentVariableValueRequestAccepted" } } }, "description": "Accepted response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Upsert deployment variable value" } }, "/v1/workspaces/{workspaceId}/deployment-variables/{variableId}": { "delete": { "description": "Deletes a deployment variable by ID.", "operationId": "requestDeploymentVariableDeletion", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the deployment variable", "in": "path", "name": "variableId", "required": true, "schema": { "type": "string" } } ], "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeploymentVariableRequestAccepted" } } }, "description": "Accepted response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Delete deployment variable" }, "get": { "description": "Returns a specific deployment variable by ID.", "operationId": "getDeploymentVariable", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the deployment variable", "in": "path", "name": "variableId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeploymentVariableWithValues" } } }, "description": "The requested deployment variable" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Get deployment variable" }, "put": { "description": "Creates or updates a deployment variable by ID.", "operationId": "requestDeploymentVariableUpdate", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the deployment variable", "in": "path", "name": "variableId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpsertDeploymentVariableRequest" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeploymentVariableRequestAccepted" } } }, "description": "Accepted response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Upsert deployment variable" } }, "/v1/workspaces/{workspaceId}/deployment-versions/{deploymentVersionId}/user-approval-records": { "put": { "operationId": "requestUserApprovalRecordUpsert", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the deployment version", "in": "path", "name": "deploymentVersionId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpsertUserApprovalRecordRequest" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserApprovalRecordRequestAccepted" } } }, "description": "Accepted response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Upsert user approval record" } }, "/v1/workspaces/{workspaceId}/deployments": { "get": { "operationId": "listDeployments", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "Maximum number of items to return", "in": "query", "name": "limit", "required": false, "schema": { "default": 50, "maximum": 1000, "minimum": 1, "type": "integer" } }, { "description": "Number of items to skip", "in": "query", "name": "offset", "required": false, "schema": { "default": 0, "minimum": 0, "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "items": { "items": { "$ref": "#/components/schemas/DeploymentAndSystems" }, "type": "array" }, "limit": { "description": "Maximum number of items returned", "type": "integer" }, "offset": { "description": "Number of items skipped", "type": "integer" }, "total": { "description": "Total number of items available", "type": "integer" } }, "required": [ "items", "total", "limit", "offset" ], "type": "object" } } }, "description": "Paginated list of items" } }, "summary": "List deployments" }, "post": { "operationId": "requestDeploymentCreation", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateDeploymentRequest" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeploymentRequestAccepted" } } }, "description": "Accepted response" } }, "summary": "Create deployment" } }, "/v1/workspaces/{workspaceId}/deployments/{deploymentId}": { "delete": { "operationId": "requestDeploymentDeletion", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the deployment", "in": "path", "name": "deploymentId", "required": true, "schema": { "type": "string" } } ], "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeploymentRequestAccepted" } } }, "description": "Accepted response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Delete deployment" }, "get": { "operationId": "getDeployment", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the deployment", "in": "path", "name": "deploymentId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeploymentWithVariablesAndSystems" } } }, "description": "OK response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Get deployment" }, "put": { "operationId": "requestDeploymentUpsert", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the deployment", "in": "path", "name": "deploymentId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpsertDeploymentRequest" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeploymentRequestAccepted" } } }, "description": "Accepted response" } }, "summary": "Upsert deployment" } }, "/v1/workspaces/{workspaceId}/deployments/{deploymentId}/variables": { "get": { "description": "Returns a list of variables for a deployment, including their configured values.", "operationId": "listDeploymentVariablesByDeployment", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the deployment", "in": "path", "name": "deploymentId", "required": true, "schema": { "type": "string" } }, { "description": "Maximum number of items to return", "in": "query", "name": "limit", "required": false, "schema": { "default": 50, "maximum": 1000, "minimum": 1, "type": "integer" } }, { "description": "Number of items to skip", "in": "query", "name": "offset", "required": false, "schema": { "default": 0, "minimum": 0, "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "items": { "items": { "$ref": "#/components/schemas/DeploymentVariableWithValues" }, "type": "array" }, "limit": { "description": "Maximum number of items returned", "type": "integer" }, "offset": { "description": "Number of items skipped", "type": "integer" }, "total": { "description": "Total number of items available", "type": "integer" } }, "required": [ "items", "total", "limit", "offset" ], "type": "object" } } }, "description": "Paginated list of items" } }, "summary": "List deployment variables by deployment" } }, "/v1/workspaces/{workspaceId}/deployments/{deploymentId}/versions": { "get": { "operationId": "listDeploymentVersions", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the deployment", "in": "path", "name": "deploymentId", "required": true, "schema": { "type": "string" } }, { "description": "Maximum number of items to return", "in": "query", "name": "limit", "required": false, "schema": { "default": 50, "maximum": 1000, "minimum": 1, "type": "integer" } }, { "description": "Number of items to skip", "in": "query", "name": "offset", "required": false, "schema": { "default": 0, "minimum": 0, "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "items": { "items": { "$ref": "#/components/schemas/DeploymentVersion" }, "type": "array" }, "limit": { "description": "Maximum number of items returned", "type": "integer" }, "offset": { "description": "Number of items skipped", "type": "integer" }, "total": { "description": "Total number of items available", "type": "integer" } }, "required": [ "items", "total", "limit", "offset" ], "type": "object" } } }, "description": "Paginated list of items" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "List deployment versions" }, "post": { "operationId": "createDeploymentVersion", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the deployment", "in": "path", "name": "deploymentId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateDeploymentVersionRequest" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeploymentVersion" } } }, "description": "Accepted response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" } }, "summary": "Create a deployment version" } }, "/v1/workspaces/{workspaceId}/deploymentversions/{deploymentVersionId}": { "patch": { "operationId": "requestDeploymentVersionUpdate", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the deployment version", "in": "path", "name": "deploymentVersionId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateDeploymentVersionRequest" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeploymentVersion" } } }, "description": "Accepted response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" } }, "summary": "Update deployment version" } }, "/v1/workspaces/{workspaceId}/environments": { "get": { "operationId": "listEnvironments", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "Maximum number of items to return", "in": "query", "name": "limit", "required": false, "schema": { "default": 50, "maximum": 1000, "minimum": 1, "type": "integer" } }, { "description": "Number of items to skip", "in": "query", "name": "offset", "required": false, "schema": { "default": 0, "minimum": 0, "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "items": { "items": { "$ref": "#/components/schemas/Environment" }, "type": "array" }, "limit": { "description": "Maximum number of items returned", "type": "integer" }, "offset": { "description": "Number of items skipped", "type": "integer" }, "total": { "description": "Total number of items available", "type": "integer" } }, "required": [ "items", "total", "limit", "offset" ], "type": "object" } } }, "description": "Paginated list of items" } }, "summary": "List environments" }, "post": { "operationId": "requestEnvironmentCreation", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateEnvironmentRequest" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/EnvironmentRequestAccepted" } } }, "description": "Accepted response" } }, "summary": "Create environment" } }, "/v1/workspaces/{workspaceId}/environments/{environmentId}": { "delete": { "operationId": "requestEnvironmentDeletion", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the environment", "in": "path", "name": "environmentId", "required": true, "schema": { "type": "string" } } ], "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/EnvironmentRequestAccepted" } } }, "description": "Accepted response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Delete environment" }, "get": { "operationId": "getEnvironment", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the environment", "in": "path", "name": "environmentId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/EnvironmentWithSystems" } } }, "description": "OK response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Get environment" }, "put": { "operationId": "requestEnvironmentUpsert", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the environment", "in": "path", "name": "environmentId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpsertEnvironmentRequest" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/EnvironmentRequestAccepted" } } }, "description": "Accepted response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Upsert environment" } }, "/v1/workspaces/{workspaceId}/job-agents": { "get": { "description": "Returns a list of job agents.", "operationId": "listJobAgents", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "Maximum number of items to return", "in": "query", "name": "limit", "required": false, "schema": { "default": 50, "maximum": 1000, "minimum": 1, "type": "integer" } }, { "description": "Number of items to skip", "in": "query", "name": "offset", "required": false, "schema": { "default": 0, "minimum": 0, "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "items": { "items": { "$ref": "#/components/schemas/JobAgent" }, "type": "array" }, "limit": { "description": "Maximum number of items returned", "type": "integer" }, "offset": { "description": "Number of items skipped", "type": "integer" }, "total": { "description": "Total number of items available", "type": "integer" } }, "required": [ "items", "total", "limit", "offset" ], "type": "object" } } }, "description": "Paginated list of items" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" } }, "summary": "List job agents" } }, "/v1/workspaces/{workspaceId}/job-agents/{jobAgentId}": { "delete": { "operationId": "requestJobAgentDeletion", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the job agent", "in": "path", "name": "jobAgentId", "required": true, "schema": { "type": "string" } } ], "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobAgentRequestAccepted" } } }, "description": "Job agent deleted" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Delete a job agent" }, "get": { "operationId": "getJobAgent", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the job agent", "in": "path", "name": "jobAgentId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobAgent" } } }, "description": "OK response" } }, "summary": "Get a job agent" }, "put": { "operationId": "requestJobAgentUpsert", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the job agent", "in": "path", "name": "jobAgentId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpsertJobAgentRequest" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobAgentRequestAccepted" } } }, "description": "Accepted response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Upsert a job agent" } }, "/v1/workspaces/{workspaceId}/jobs": { "get": { "description": "Returns a list of jobs.", "operationId": "getJobs", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "Maximum number of items to return", "in": "query", "name": "limit", "required": false, "schema": { "default": 50, "maximum": 1000, "minimum": 1, "type": "integer" } }, { "description": "Number of items to skip", "in": "query", "name": "offset", "required": false, "schema": { "default": 0, "minimum": 0, "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "items": { "items": { "$ref": "#/components/schemas/JobWithRelease" }, "type": "array" }, "limit": { "description": "Maximum number of items returned", "type": "integer" }, "offset": { "description": "Number of items skipped", "type": "integer" }, "total": { "description": "Total number of items available", "type": "integer" } }, "required": [ "items", "total", "limit", "offset" ], "type": "object" } } }, "description": "Paginated list of items" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "List jobs" } }, "/v1/workspaces/{workspaceId}/jobs/{jobId}": { "get": { "description": "Returns a specific job by ID.", "operationId": "getJob", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the job", "in": "path", "name": "jobId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Job" } } }, "description": "Get job" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Get job" } }, "/v1/workspaces/{workspaceId}/jobs/{jobId}/status": { "put": { "description": "Updates the status of a specific job by ID.", "operationId": "requestJobStatusUpsert", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the job", "in": "path", "name": "jobId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobStatus" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobStatusRequestAccepted" } } }, "description": "Update job status" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Update job status" } }, "/v1/workspaces/{workspaceId}/jobs/{jobId}/with-release": { "get": { "description": "Returns a specific job by ID with its release.", "operationId": "getJobWithRelease", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the job", "in": "path", "name": "jobId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/JobWithRelease" } } }, "description": "Get job with release" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Get job with release" } }, "/v1/workspaces/{workspaceId}/policies": { "get": { "operationId": "listPolicies", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "Maximum number of items to return", "in": "query", "name": "limit", "required": false, "schema": { "default": 50, "maximum": 1000, "minimum": 1, "type": "integer" } }, { "description": "Number of items to skip", "in": "query", "name": "offset", "required": false, "schema": { "default": 0, "minimum": 0, "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "items": { "items": { "$ref": "#/components/schemas/Policy" }, "type": "array" }, "limit": { "description": "Maximum number of items returned", "type": "integer" }, "offset": { "description": "Number of items skipped", "type": "integer" }, "total": { "description": "Total number of items available", "type": "integer" } }, "required": [ "items", "total", "limit", "offset" ], "type": "object" } } }, "description": "Paginated list of items" } }, "summary": "List policies" }, "post": { "operationId": "requestPolicyCreation", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreatePolicyRequest" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Policy" } } }, "description": "Accepted response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" } }, "summary": "Create a policy" } }, "/v1/workspaces/{workspaceId}/policies/{policyId}": { "delete": { "operationId": "requestPolicyDeletion", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the policy", "in": "path", "name": "policyId", "required": true, "schema": { "type": "string" } } ], "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Policy" } } }, "description": "Policy deleted" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Delete a policy by ID" }, "get": { "operationId": "getPolicy", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the policy", "in": "path", "name": "policyId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Policy" } } }, "description": "OK response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Get a policy by ID" }, "put": { "operationId": "requestPolicyUpsert", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the policy", "in": "path", "name": "policyId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpsertPolicyRequest" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Policy" } } }, "description": "Accepted response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Upsert a policy by ID" } }, "/v1/workspaces/{workspaceId}/relationship-rules": { "get": { "description": "Returns all relationship rules for the specified workspace.", "operationId": "getRelationshipRules", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "Number of items to skip", "in": "query", "name": "offset", "required": false, "schema": { "default": 0, "minimum": 0, "type": "integer" } }, { "description": "Maximum number of items to return", "in": "query", "name": "limit", "required": false, "schema": { "default": 50, "maximum": 1000, "minimum": 1, "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "items": { "items": { "$ref": "#/components/schemas/RelationshipRule" }, "type": "array" }, "limit": { "description": "Maximum number of items returned", "type": "integer" }, "offset": { "description": "Number of items skipped", "type": "integer" }, "total": { "description": "Total number of items available", "type": "integer" } }, "required": [ "items", "total", "limit", "offset" ], "type": "object" } } }, "description": "Paginated list of items" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Get relationship rules for a given workspace" }, "post": { "operationId": "createRelationshipRule", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateRelationshipRuleRequest" } } }, "required": true }, "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RelationshipRule" } } }, "description": "Resource created successfully" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" } }, "summary": "Create relationship rule" } }, "/v1/workspaces/{workspaceId}/relationship-rules/{relationshipRuleId}": { "delete": { "operationId": "deleteRelationship", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the relationship rule", "in": "path", "name": "relationshipRuleId", "required": true, "schema": { "type": "string" } } ], "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RelationshipRule" } } }, "description": "Accepted response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Delete relationship" }, "get": { "operationId": "getRelationshipRule", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the relationship rule", "in": "path", "name": "relationshipRuleId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RelationshipRule" } } }, "description": "OK response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Get relationship" }, "put": { "operationId": "requestRelationshipRuleUpsert", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the relationship rule", "in": "path", "name": "relationshipRuleId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpsertRelationshipRuleRequest" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RelationshipRule" } } }, "description": "Accepted response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Upsert relationship" } }, "/v1/workspaces/{workspaceId}/release-targets/resource-preview": { "post": { "description": "Simulates which release targets would be created if the given resource were added to the workspace. This is a dry-run endpoint — no resources or release targets are actually created.", "operationId": "previewReleaseTargetsForResource", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "Maximum number of items to return", "in": "query", "name": "limit", "required": false, "schema": { "default": 50, "maximum": 1000, "minimum": 1, "type": "integer" } }, { "description": "Number of items to skip", "in": "query", "name": "offset", "required": false, "schema": { "default": 0, "minimum": 0, "type": "integer" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ResourcePreviewRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "items": { "items": { "$ref": "#/components/schemas/ReleaseTargetPreview" }, "type": "array" }, "limit": { "description": "Maximum number of items returned", "type": "integer" }, "offset": { "description": "Number of items skipped", "type": "integer" }, "total": { "description": "Total number of items available", "type": "integer" } }, "required": [ "items", "total", "limit", "offset" ], "type": "object" } } }, "description": "Paginated list of items" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" } }, "summary": "Preview release targets for a resource" } }, "/v1/workspaces/{workspaceId}/release-targets/state": { "post": { "description": "Returns paginated release target states for a given deployment and environment.", "operationId": "getReleaseTargetStates", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "Maximum number of items to return", "in": "query", "name": "limit", "required": false, "schema": { "default": 50, "maximum": 1000, "minimum": 1, "type": "integer" } }, { "description": "Number of items to skip", "in": "query", "name": "offset", "required": false, "schema": { "default": 0, "minimum": 0, "type": "integer" } } ], "requestBody": { "content": { "application/json": { "schema": { "properties": { "deploymentId": { "type": "string" }, "environmentId": { "type": "string" } }, "required": [ "deploymentId", "environmentId" ], "type": "object" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "items": { "items": { "$ref": "#/components/schemas/ReleaseTargetWithState" }, "type": "array" }, "limit": { "description": "Maximum number of items returned", "type": "integer" }, "offset": { "description": "Number of items skipped", "type": "integer" }, "total": { "description": "Total number of items available", "type": "integer" } }, "required": [ "items", "total", "limit", "offset" ], "type": "object" } } }, "description": "Paginated list of items" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" } }, "summary": "Get release target states by deployment and environment" } }, "/v1/workspaces/{workspaceId}/release-targets/{releaseTargetKey}/desired-release": { "get": { "description": "Returns the desired release for a release target {releaseTargetKey}.", "operationId": "getReleaseTargetDesiredRelease", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "Key of the release target", "in": "path", "name": "releaseTargetKey", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "desiredRelease": { "$ref": "#/components/schemas/Release" } } } } }, "description": "The desired release for the release target" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Get the desired release for a release target" } }, "/v1/workspaces/{workspaceId}/release-targets/{releaseTargetKey}/jobs": { "get": { "description": "Returns a list of jobs for a release target {releaseTargetKey}.", "operationId": "getJobsForReleaseTarget", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "Key of the release target", "in": "path", "name": "releaseTargetKey", "required": true, "schema": { "type": "string" } }, { "description": "Maximum number of items to return", "in": "query", "name": "limit", "required": false, "schema": { "default": 50, "maximum": 1000, "minimum": 1, "type": "integer" } }, { "description": "Number of items to skip", "in": "query", "name": "offset", "required": false, "schema": { "default": 0, "minimum": 0, "type": "integer" } }, { "description": "CEL expression to filter the results", "in": "query", "name": "cel", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "items": { "items": { "$ref": "#/components/schemas/Job" }, "type": "array" }, "limit": { "description": "Maximum number of items returned", "type": "integer" }, "offset": { "description": "Number of items skipped", "type": "integer" }, "total": { "description": "Total number of items available", "type": "integer" } }, "required": [ "items", "total", "limit", "offset" ], "type": "object" } } }, "description": "Paginated list of items" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Get jobs for a release target" } }, "/v1/workspaces/{workspaceId}/release-targets/{releaseTargetKey}/state": { "get": { "description": "Returns the state for a release target {releaseTargetKey}.", "operationId": "getReleaseTargetState", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "Key of the release target", "in": "path", "name": "releaseTargetKey", "required": true, "schema": { "type": "string" } }, { "description": "Whether to bypass the cache", "in": "query", "name": "bypassCache", "required": false, "schema": { "type": "boolean" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ReleaseTargetState" } } }, "description": "The state for the release target" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Get the state for a release target" } }, "/v1/workspaces/{workspaceId}/releases/{releaseId}": { "get": { "description": "Returns a specific release by ID.", "operationId": "getRelease", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the release", "in": "path", "name": "releaseId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Release" } } }, "description": "The requested release" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Get release" } }, "/v1/workspaces/{workspaceId}/resource-providers": { "put": { "operationId": "requestResourceProviderUpsert", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpsertResourceProviderRequest" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ResourceProvider" } } }, "description": "Accepted response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" } }, "summary": "Upsert resource provider" } }, "/v1/workspaces/{workspaceId}/resource-providers/name/{name}": { "get": { "operationId": "getResourceProviderByName", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "Name of the resource provider", "in": "path", "name": "name", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ResourceProvider" } } }, "description": "OK response" } }, "summary": "Get a resource provider by name" } }, "/v1/workspaces/{workspaceId}/resource-providers/name/{name}/resources": { "get": { "operationId": "getResourceProviderResources", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "Name of the resource provider", "in": "path", "name": "name", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "items": { "items": { "$ref": "#/components/schemas/Resource" }, "type": "array" }, "limit": { "description": "Maximum number of items returned", "type": "integer" }, "offset": { "description": "Number of items skipped", "type": "integer" }, "total": { "description": "Total number of items available", "type": "integer" } }, "required": [ "items", "total", "limit", "offset" ], "type": "object" } } }, "description": "Paginated list of items" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Get the resources for a resource provider" } }, "/v1/workspaces/{workspaceId}/resource-providers/{providerId}/set": { "put": { "operationId": "setResourceProviderResources", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the resource provider", "in": "path", "name": "providerId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "properties": { "resources": { "items": { "$ref": "#/components/schemas/ResourceProviderResource" }, "type": "array" } }, "required": [ "resources" ], "type": "object" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ResourceProviderSetRequestAccepted" } } }, "description": "Accepted response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Set the resources for a provider" } }, "/v1/workspaces/{workspaceId}/resources": { "get": { "description": "Returns a paginated list of resources for workspace {workspaceId}.", "operationId": "getAllResources", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "Maximum number of items to return", "in": "query", "name": "limit", "required": false, "schema": { "default": 50, "maximum": 1000, "minimum": 1, "type": "integer" } }, { "description": "Number of items to skip", "in": "query", "name": "offset", "required": false, "schema": { "default": 0, "minimum": 0, "type": "integer" } }, { "description": "CEL expression to filter the results", "in": "query", "name": "cel", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "items": { "items": { "$ref": "#/components/schemas/Resource" }, "type": "array" }, "limit": { "description": "Maximum number of items returned", "type": "integer" }, "offset": { "description": "Number of items skipped", "type": "integer" }, "total": { "description": "Total number of items available", "type": "integer" } }, "required": [ "items", "total", "limit", "offset" ], "type": "object" } } }, "description": "Paginated list of items" } }, "summary": "Get all resources", "tags": [ "Resources" ] } }, "/v1/workspaces/{workspaceId}/resources/identifier/{identifier}": { "delete": { "description": "Deletes a resource by its identifier.", "operationId": "requestResourceDeletionByIdentifier", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "Identifier of the resource", "in": "path", "name": "identifier", "required": true, "schema": { "type": "string" } } ], "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ResourceRequestAccepted" } } }, "description": "Accepted response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Delete resource by identifier", "tags": [ "Resources" ] }, "get": { "description": "Returns a resource by its identifier.", "operationId": "getResourceByIdentifier", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "Identifier of the resource", "in": "path", "name": "identifier", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Resource" } } }, "description": "OK response" } }, "summary": "Get resource by identifier", "tags": [ "Resources" ] } }, "/v1/workspaces/{workspaceId}/resources/identifier/{identifier}/deployments": { "get": { "description": "Returns a paginated list of deployments that match the given resource.", "operationId": "getDeploymentsForResource", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "Identifier of the resource", "in": "path", "name": "identifier", "required": true, "schema": { "type": "string" } }, { "description": "Maximum number of items to return", "in": "query", "name": "limit", "required": false, "schema": { "default": 50, "maximum": 1000, "minimum": 1, "type": "integer" } }, { "description": "Number of items to skip", "in": "query", "name": "offset", "required": false, "schema": { "default": 0, "minimum": 0, "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "items": { "items": { "$ref": "#/components/schemas/Deployment" }, "type": "array" }, "limit": { "description": "Maximum number of items returned", "type": "integer" }, "offset": { "description": "Number of items skipped", "type": "integer" }, "total": { "description": "Total number of items available", "type": "integer" } }, "required": [ "items", "total", "limit", "offset" ], "type": "object" } } }, "description": "The matching deployments" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Get deployments for a resource", "tags": [ "Resources" ] } }, "/v1/workspaces/{workspaceId}/resources/identifier/{identifier}/variables": { "get": { "description": "Returns a list of variables for a resource", "operationId": "getVariablesForResource", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "Identifier of the resource", "in": "path", "name": "identifier", "required": true, "schema": { "type": "string" } }, { "description": "Maximum number of items to return", "in": "query", "name": "limit", "required": false, "schema": { "default": 50, "maximum": 1000, "minimum": 1, "type": "integer" } }, { "description": "Number of items to skip", "in": "query", "name": "offset", "required": false, "schema": { "default": 0, "minimum": 0, "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "items": { "items": { "$ref": "#/components/schemas/ResourceVariable" }, "type": "array" }, "limit": { "description": "Maximum number of items returned", "type": "integer" }, "offset": { "description": "Number of items skipped", "type": "integer" }, "total": { "description": "Total number of items available", "type": "integer" } }, "required": [ "items", "total", "limit", "offset" ], "type": "object" } } }, "description": "The requested variables" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Get variables for a resource", "tags": [ "Resources" ] }, "patch": { "description": "Updates the variables for a resource", "operationId": "requestResourceVariablesUpdate", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "Identifier of the resource", "in": "path", "name": "identifier", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "additionalProperties": true, "type": "object" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ResourceRequestAccepted" } } }, "description": "The updated variables" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Update variables for a resource", "tags": [ "Resources" ] } }, "/v1/workspaces/{workspaceId}/resources/{resourceIdentifier}/release-targets/deployment/{deploymentId}": { "get": { "description": "Returns a release target for a resource in a deployment.", "operationId": "getReleaseTargetForResourceInDeployment", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "Identifier of the resource", "in": "path", "name": "resourceIdentifier", "required": true, "schema": { "type": "string" } }, { "description": "ID of the deployment", "in": "path", "name": "deploymentId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ReleaseTarget" } } }, "description": "The requested release target" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Get release target for a resource in a deployment", "tags": [ "Resources" ] } }, "/v1/workspaces/{workspaceId}/systems": { "get": { "operationId": "listSystems", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "Maximum number of items to return", "in": "query", "name": "limit", "required": false, "schema": { "default": 50, "maximum": 1000, "minimum": 1, "type": "integer" } }, { "description": "Number of items to skip", "in": "query", "name": "offset", "required": false, "schema": { "default": 0, "minimum": 0, "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "items": { "items": { "$ref": "#/components/schemas/System" }, "type": "array" }, "limit": { "description": "Maximum number of items returned", "type": "integer" }, "offset": { "description": "Number of items skipped", "type": "integer" }, "total": { "description": "Total number of items available", "type": "integer" } }, "required": [ "items", "total", "limit", "offset" ], "type": "object" } } }, "description": "Paginated list of items" } }, "summary": "List systems" }, "post": { "operationId": "requestSystemCreation", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateSystemRequest" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SystemRequestAccepted" } } }, "description": "Accepted response" } }, "summary": "Create system" } }, "/v1/workspaces/{workspaceId}/systems/{systemId}": { "delete": { "operationId": "requestSystemDeletion", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the system", "in": "path", "name": "systemId", "required": true, "schema": { "type": "string" } } ], "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SystemRequestAccepted" } } }, "description": "Accepted response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Delete system" }, "get": { "operationId": "getSystem", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the system", "in": "path", "name": "systemId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SystemWithLinkedEntities" } } }, "description": "OK response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Get system" }, "put": { "operationId": "requestSystemUpsert", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the system", "in": "path", "name": "systemId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpsertSystemRequest" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SystemRequestAccepted" } } }, "description": "Accepted response" } }, "summary": "Upsert system" } }, "/v1/workspaces/{workspaceId}/systems/{systemId}/deployments/{deploymentId}": { "delete": { "operationId": "unlinkDeploymentFromSystem", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the system", "in": "path", "name": "systemId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the deployment", "in": "path", "name": "deploymentId", "required": true, "schema": { "type": "string" } } ], "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SystemRequestAccepted" } } }, "description": "Accepted response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Unlink deployment from system" }, "get": { "operationId": "getDeploymentSystemLink", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the system", "in": "path", "name": "systemId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the deployment", "in": "path", "name": "deploymentId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SystemDeploymentLink" } } }, "description": "OK response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Get deployment system link" }, "put": { "operationId": "linkDeploymentToSystem", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the system", "in": "path", "name": "systemId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the deployment", "in": "path", "name": "deploymentId", "required": true, "schema": { "type": "string" } } ], "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SystemRequestAccepted" } } }, "description": "Accepted response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Link deployment to system" } }, "/v1/workspaces/{workspaceId}/systems/{systemId}/environments/{environmentId}": { "delete": { "operationId": "unlinkEnvironmentFromSystem", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the system", "in": "path", "name": "systemId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the environment", "in": "path", "name": "environmentId", "required": true, "schema": { "type": "string" } } ], "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SystemRequestAccepted" } } }, "description": "Accepted response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Unlink environment from system" }, "get": { "operationId": "getEnvironmentSystemLink", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the system", "in": "path", "name": "systemId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the environment", "in": "path", "name": "environmentId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SystemEnvironmentLink" } } }, "description": "OK response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Get environment system link" }, "put": { "operationId": "linkEnvironmentToSystem", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the system", "in": "path", "name": "systemId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the environment", "in": "path", "name": "environmentId", "required": true, "schema": { "type": "string" } } ], "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SystemRequestAccepted" } } }, "description": "Accepted response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Link environment to system" } }, "/v1/workspaces/{workspaceId}/workflows": { "get": { "description": "Returns a list of workflows.", "operationId": "listWorkflows", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "Maximum number of items to return", "in": "query", "name": "limit", "required": false, "schema": { "default": 50, "maximum": 1000, "minimum": 1, "type": "integer" } }, { "description": "Number of items to skip", "in": "query", "name": "offset", "required": false, "schema": { "default": 0, "minimum": 0, "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "items": { "items": { "$ref": "#/components/schemas/Workflow" }, "type": "array" }, "limit": { "description": "Maximum number of items returned", "type": "integer" }, "offset": { "description": "Number of items skipped", "type": "integer" }, "total": { "description": "Total number of items available", "type": "integer" } }, "required": [ "items", "total", "limit", "offset" ], "type": "object" } } }, "description": "Paginated list of items" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" } }, "summary": "List workflows", "tags": [ "Workflows" ] }, "post": { "description": "Creates a workflow.", "operationId": "createWorkflow", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateWorkflow" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Workflow" } } }, "description": "Accepted response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" } }, "summary": "Create a workflow", "tags": [ "Workflows" ] } }, "/v1/workspaces/{workspaceId}/workflows/{workflowId}": { "delete": { "description": "Deletes a workflow.", "operationId": "deleteWorkflow", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the workflow", "in": "path", "name": "workflowId", "required": true, "schema": { "type": "string" } } ], "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Workflow" } } }, "description": "Workflow deleted" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Delete a workflow", "tags": [ "Workflows" ] }, "get": { "description": "Gets a workflow by ID.", "operationId": "getWorkflow", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the workflow", "in": "path", "name": "workflowId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Workflow" } } }, "description": "OK response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Get a workflow", "tags": [ "Workflows" ] }, "put": { "description": "Updates a workflow template.", "operationId": "updateWorkflow", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the workflow", "in": "path", "name": "workflowId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateWorkflow" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Workflow" } } }, "description": "Accepted response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "Update a workflow", "tags": [ "Workflows" ] } } }, "security": [ { "ApiKeyAuth": [ ] }, { "BearerAuth": [ ] } ], "servers": [ { "description": "Development server", "url": "http://localhost:3001/api" } ] }