{ "components": { "parameters": { "relatableEntityType": { "description": "Type of the entity (deployment, environment, or resource)", "in": "path", "name": "relatableEntityType", "required": true, "schema": { "$ref": "#/components/schemas/RelatableEntityType" } } }, "schemas": { "AnyApprovalRule": { "properties": { "minApprovals": { "format": "int32", "type": "integer" } }, "required": [ "minApprovals" ], "type": "object" }, "ApprovalStatus": { "enum": [ "approved", "rejected" ], "type": "string" }, "ArgoCDJobAgentConfig": { "properties": { "apiKey": { "description": "ArgoCD API token.", "type": "string" }, "serverUrl": { "description": "ArgoCD server address (host[:port] or URL).", "type": "string" }, "template": { "description": "ArgoCD application template.", "type": "string" } }, "required": [ "serverUrl", "apiKey", "template" ], "type": "object" }, "ArgoWorkflowJobAgentConfig": { "description": "WorkflowTemplate reference execution", "properties": { "apiKey": { "description": "ArgoWorkflow API token.", "type": "string" }, "httpInsecure": { "default": false, "description": "ArgoWorkClient http(s) connection configuration setting", "type": "boolean" }, "name": { "description": "ArgoWorkflow job name", "type": "string" }, "serverUrl": { "description": "ArgoWorkflow server address (host[:port] or URL).", "type": "string" }, "template": { "description": "WorkflowTemplate name.", "type": "string" }, "webhookSecret": { "description": "ArgoEvents webhookSecret", "type": "string" } }, "required": [ "serverUrl", "apiKey", "template", "name", "webhookSecret", "httpInsecure" ], "type": "object" }, "BasicResource": { "properties": { "id": { "type": "string" }, "identifier": { "type": "string" }, "kind": { "type": "string" }, "name": { "type": "string" }, "version": { "type": "string" }, "workspaceId": { "type": "string" } }, "required": [ "id", "name", "version", "kind", "identifier", "workspaceId" ], "type": "object" }, "BooleanValue": { "type": "boolean" }, "CelMatcher": { "properties": { "cel": { "type": "string" } }, "required": [ "cel" ], "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", "apiKey", "appKey", "queries" ], "type": "object" }, "DeployDecision": { "properties": { "policyResults": { "items": { "$ref": "#/components/schemas/PolicyEvaluation" }, "type": "array" } }, "required": [ "policyResults" ], "type": "object" }, "Deployment": { "properties": { "description": { "type": "string" }, "id": { "type": "string" }, "jobAgentConfig": { "$ref": "#/components/schemas/JobAgentConfig" }, "jobAgentSelector": { "description": "CEL expression to match job agents", "type": "string" }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "resourceSelector": { "description": "CEL expression to determine if the deployment should be used", "type": "string" }, "slug": { "type": "string" } }, "required": [ "id", "name", "slug", "jobAgentSelector", "jobAgentConfig", "metadata" ], "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. The expression can reference both deployment properties (deployment.id, deployment.name, deployment.slug, deployment.metadata) and the currently deployed version properties (version.id, version.tag, version.name, version.status, version.metadata, version.createdAt). For example: deployment.name == 'db-migration' && version.tag.startsWith('v2.').", "type": "string" } }, "required": [ "dependsOn" ], "type": "object" }, "DeploymentVariable": { "properties": { "deploymentId": { "type": "string" }, "description": { "type": "string" }, "id": { "type": "string" }, "key": { "type": "string" } }, "required": [ "id", "key", "deploymentId" ], "type": "object" }, "DeploymentVariableValue": { "properties": { "deploymentVariableId": { "type": "string" }, "id": { "type": "string" }, "priority": { "format": "int64", "type": "integer" }, "resourceSelector": { "description": "CEL expression to determine if the deployment variable value should be used", "type": "string" }, "value": { "$ref": "#/components/schemas/Value" } }, "required": [ "id", "deploymentVariableId", "priority", "value" ], "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": { "$ref": "#/components/schemas/JobAgentConfig" }, "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", "metadata" ], "type": "object" }, "DeploymentVersionStatus": { "enum": [ "unspecified", "building", "ready", "failed", "rejected", "paused" ], "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" ], "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" }, "inputs": { "additionalProperties": true, "description": "Resolved input values for the workflow run.", "type": "object" }, "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" }, "EntityRelation": { "properties": { "direction": { "$ref": "#/components/schemas/RelationDirection" }, "entity": { "$ref": "#/components/schemas/RelatableEntity" }, "entityId": { "description": "ID of the related entity", "type": "string" }, "entityType": { "$ref": "#/components/schemas/RelatableEntityType" }, "rule": { "$ref": "#/components/schemas/RelationshipRule" } }, "required": [ "rule", "direction", "entityType", "entityId", "entity" ], "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": { "description": "CEL expression to determine if the environment should be used", "type": "string" }, "workspaceId": { "type": "string" } }, "required": [ "id", "name", "createdAt", "metadata", "workspaceId" ], "type": "object" }, "EnvironmentProgressionRule": { "properties": { "dependsOnEnvironmentSelector": { "description": "CEL expression to determine if the environment progression rule should be used", "type": "string" }, "maximumAgeHours": { "description": "Maximum age of dependency deployment before blocking progression (prevents stale promotions)", "format": "int32", "minimum": 0, "type": "integer" }, "minimumSoakTimeMinutes": { "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": { "format": "float", "maximum": 100, "minimum": 0, "type": "number" }, "requireVerificationPassed": { "default": false, "description": "If true, jobs must also have passed verification to count toward the success percentage", "type": "boolean" }, "successStatuses": { "items": { "$ref": "#/components/schemas/JobStatus" }, "type": "array" } }, "required": [ "dependsOnEnvironmentSelector" ], "type": "object" }, "EnvironmentSummary": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "EnvironmentWithSystems": { "allOf": [ { "$ref": "#/components/schemas/Environment" }, { "properties": { "systems": { "items": { "$ref": "#/components/schemas/System" }, "type": "array" } }, "required": [ "systems" ], "type": "object" } ] }, "ErrorResponse": { "properties": { "error": { "example": "Workspace not found", "type": "string" } }, "type": "object" }, "EvaluateReleaseTargetRequest": { "properties": { "releaseTarget": { "$ref": "#/components/schemas/ReleaseTarget" }, "version": { "$ref": "#/components/schemas/DeploymentVersion" } }, "required": [ "releaseTarget", "version" ], "type": "object" }, "EvaluationScope": { "properties": { "environmentId": { "type": "string" }, "versionId": { "type": "string" } }, "type": "object" }, "GithubEntity": { "properties": { "installationId": { "type": "integer" }, "slug": { "type": "string" } }, "required": [ "installationId", "slug" ], "type": "object" }, "GithubJobAgentConfig": { "properties": { "installationId": { "description": "GitHub app installation ID.", "format": "int", "type": "integer" }, "owner": { "description": "GitHub repository owner.", "type": "string" }, "ref": { "description": "Git ref to run the workflow on (defaults to \"main\" if omitted).", "type": "string" }, "repo": { "description": "GitHub repository name.", "type": "string" }, "workflowId": { "description": "GitHub Actions workflow ID.", "format": "int64", "type": "integer" } }, "required": [ "installationId", "owner", "repo", "workflowId" ], "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": { "$ref": "#/components/schemas/JobAgentConfig" }, "jobAgentId": { "type": "string" }, "message": { "type": "string" }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "releaseId": { "type": "string" }, "startedAt": { "format": "date-time", "type": "string" }, "status": { "$ref": "#/components/schemas/JobStatus" }, "traceToken": { "type": "string" }, "updatedAt": { "format": "date-time", "type": "string" }, "workflowJobId": { "type": "string" } }, "required": [ "id", "releaseId", "workflowJobId", "jobAgentId", "jobAgentConfig", "status", "createdAt", "updatedAt", "metadata" ], "type": "object" }, "JobAgent": { "properties": { "config": { "$ref": "#/components/schemas/JobAgentConfig" }, "id": { "type": "string" }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "type": { "type": "string" }, "workspaceId": { "type": "string" } }, "required": [ "id", "workspaceId", "name", "type", "config" ], "type": "object" }, "JobAgentConfig": { "additionalProperties": true, "type": "object" }, "JobStatus": { "enum": [ "cancelled", "skipped", "inProgress", "actionRequired", "pending", "failure", "invalidJobAgent", "invalidIntegration", "externalRunNotFound", "successful", "queued" ], "type": "string" }, "JobSummary": { "properties": { "id": { "type": "string" }, "links": { "additionalProperties": { "type": "string" }, "description": "External links extracted from job metadata", "type": "object" }, "message": { "type": "string" }, "status": { "$ref": "#/components/schemas/JobStatus" }, "verifications": { "items": { "$ref": "#/components/schemas/JobVerification" }, "type": "array" } }, "required": [ "id", "status", "verifications" ], "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", "message", "metadata", "releaseId", "startedAt", "status", "traceToken", "updatedAt", "workflowJobId" ], "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" }, "JobVerificationStatus": { "enum": [ "running", "passed", "failed", "cancelled" ], "type": "string" }, "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" }, "JobWithVerifications": { "properties": { "job": { "$ref": "#/components/schemas/Job" }, "verifications": { "items": { "$ref": "#/components/schemas/JobVerification" }, "type": "array" } }, "required": [ "job", "verifications" ], "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" }, "PlanValidationOpaRule": { "properties": { "description": { "type": "string" }, "name": { "description": "Human-readable rule name; used in check output to identify which rule produced a violation.", "type": "string" }, "rego": { "description": "Rego v1 source code. Must define a `deny` rule set following the Conftest convention (deny contains msg if { ... }).", "type": "string" } }, "required": [ "name", "rego" ], "type": "object" }, "PlanValidationResult": { "properties": { "evaluatedAt": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "passed": { "type": "boolean" }, "resultId": { "description": "ID of the deployment_plan_target_result this validation was run against.", "type": "string" }, "ruleId": { "description": "Polymorphic rule id. Resolves to a specific rule type (e.g. PlanValidationOpaRule) known by the writing controller.", "type": "string" }, "violations": { "items": { "$ref": "#/components/schemas/PlanValidationViolation" }, "type": "array" } }, "required": [ "id", "resultId", "ruleId", "passed", "violations", "evaluatedAt" ], "type": "object" }, "PlanValidationViolation": { "properties": { "message": { "type": "string" } }, "required": [ "message" ], "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" }, "PolicyEvaluation": { "properties": { "policy": { "$ref": "#/components/schemas/Policy", "nullable": true }, "ruleResults": { "items": { "$ref": "#/components/schemas/RuleEvaluation" }, "type": "array" }, "summary": { "type": "string" } }, "required": [ "ruleResults" ], "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" }, "planValidationOpa": { "$ref": "#/components/schemas/PlanValidationOpaRule" }, "policyId": { "type": "string" }, "retry": { "$ref": "#/components/schemas/RetryRule" }, "rollback": { "$ref": "#/components/schemas/RollbackRule" }, "verification": { "$ref": "#/components/schemas/VerificationRule" }, "versionCooldown": { "$ref": "#/components/schemas/VersionCooldownRule" }, "versionSelector": { "$ref": "#/components/schemas/VersionSelectorRule" } }, "required": [ "id", "policyId", "createdAt" ], "type": "object" }, "PolicySkip": { "properties": { "createdAt": { "description": "When this skip was created", "format": "date-time", "type": "string" }, "createdBy": { "description": "User ID who created this skip", "type": "string" }, "environmentId": { "description": "Environment this skip applies to. If null, applies to all environments.", "type": "string" }, "expiresAt": { "description": "When this skip expires. If null, skip never expires.", "format": "date-time", "type": "string" }, "id": { "description": "Unique identifier for the skip", "type": "string" }, "reason": { "description": "Required reason for why this skip is needed (e.g., incident ticket, emergency situation)", "type": "string" }, "resourceId": { "description": "Resource this skip applies to. If null, applies to all resources (in the environment if specified, or globally).", "type": "string" }, "ruleId": { "description": "Rule ID this skip applies to", "type": "string" }, "versionId": { "description": "Deployment version this skip applies to", "type": "string" }, "workspaceId": { "description": "Workspace this skip belongs to", "type": "string" } }, "required": [ "id", "workspaceId", "versionId", "ruleId", "reason", "createdBy", "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" }, "PropertiesMatcher": { "properties": { "properties": { "items": { "$ref": "#/components/schemas/PropertyMatcher" }, "type": "array" } }, "required": [ "properties" ], "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" }, "RelatableEntity": { "oneOf": [ { "$ref": "#/components/schemas/Deployment" }, { "$ref": "#/components/schemas/Environment" }, { "$ref": "#/components/schemas/Resource" } ] }, "RelatableEntityType": { "enum": [ "deployment", "environment", "resource" ], "type": "string" }, "RelationDirection": { "enum": [ "from", "to" ], "type": "string" }, "RelationshipRule": { "properties": { "description": { "type": "string" }, "fromSelector": { "description": "CEL expression to determine if the relationship rule should be used", "type": "string" }, "fromType": { "$ref": "#/components/schemas/RelatableEntityType" }, "id": { "type": "string" }, "matcher": { "oneOf": [ { "$ref": "#/components/schemas/CelMatcher" }, { "$ref": "#/components/schemas/PropertiesMatcher" } ] }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "reference": { "type": "string" }, "relationshipType": { "type": "string" }, "toSelector": { "description": "CEL expression to determine if the relationship rule should be used", "type": "string" }, "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" }, "id": { "format": "uuid", "type": "string" }, "releaseTarget": { "$ref": "#/components/schemas/ReleaseTarget" }, "variables": { "additionalProperties": { "$ref": "#/components/schemas/LiteralValue" }, "type": "object" }, "version": { "$ref": "#/components/schemas/DeploymentVersion" } }, "required": [ "id", "version", "variables", "encryptedVariables", "releaseTarget", "createdAt" ], "type": "object" }, "ReleaseTarget": { "properties": { "deploymentId": { "type": "string" }, "environmentId": { "type": "string" }, "resourceId": { "type": "string" } }, "required": [ "resourceId", "environmentId", "deploymentId" ], "type": "object" }, "ReleaseTargetAndState": { "properties": { "releaseTarget": { "$ref": "#/components/schemas/ReleaseTarget" }, "state": { "$ref": "#/components/schemas/ReleaseTargetState" } }, "required": [ "releaseTarget", "state" ], "type": "object" }, "ReleaseTargetItem": { "properties": { "currentVersion": { "nullable": true, "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "tag": { "type": "string" } }, "required": [ "id", "name", "tag" ], "type": "object" }, "desiredVersion": { "nullable": true, "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "tag": { "type": "string" } }, "required": [ "id", "name", "tag" ], "type": "object" }, "environment": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "latestJob": { "nullable": true, "properties": { "completedAt": { "format": "date-time", "type": "string" }, "createdAt": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "message": { "type": "string" }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "status": { "$ref": "#/components/schemas/JobStatus" }, "verifications": { "items": { "properties": { "id": { "type": "string" }, "jobId": { "type": "string" }, "metrics": { "items": { "properties": { "count": { "type": "integer" }, "failureCondition": { "nullable": true, "type": "string" }, "failureThreshold": { "nullable": true, "type": "integer" }, "id": { "type": "string" }, "jobId": { "type": "string" }, "name": { "type": "string" }, "policyRuleVerificationMetricId": { "type": "string" }, "provider": { "additionalProperties": true, "type": "object" }, "successCondition": { "type": "string" }, "successThreshold": { "nullable": true, "type": "integer" } }, "required": [ "id", "name", "provider", "count", "successCondition", "successThreshold", "failureCondition", "failureThreshold" ], "type": "object" }, "type": "array" } }, "required": [ "id", "jobId", "metrics" ], "type": "object" }, "type": "array" } }, "required": [ "id", "status", "createdAt", "metadata", "verifications" ], "type": "object" }, "releaseTarget": { "properties": { "deploymentId": { "type": "string" }, "environmentId": { "type": "string" }, "resourceId": { "type": "string" } }, "required": [ "resourceId", "environmentId", "deploymentId" ], "type": "object" }, "resource": { "properties": { "id": { "type": "string" }, "identifier": { "type": "string" }, "kind": { "type": "string" }, "name": { "type": "string" }, "version": { "type": "string" } }, "required": [ "id", "name", "version", "kind", "identifier" ], "type": "object" } }, "required": [ "releaseTarget", "environment", "resource" ], "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/JobWithVerifications" } }, "type": "object" }, "ReleaseTargetStateResponse": { "properties": { "currentRelease": { "$ref": "#/components/schemas/Release" }, "desiredRelease": { "$ref": "#/components/schemas/Release" }, "latestJob": { "properties": { "job": { "$ref": "#/components/schemas/Job" }, "verifications": { "items": { "properties": { "createdAt": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "jobId": { "type": "string" }, "message": { "type": "string" }, "metrics": { "items": { "$ref": "#/components/schemas/VerificationMetricStatus" }, "type": "array" }, "status": { "description": "Computed aggregate status of this verification", "type": "string" } }, "required": [ "id", "jobId", "metrics", "createdAt", "status" ], "type": "object" }, "type": "array" } }, "required": [ "job", "verifications" ], "type": "object" } }, "type": "object" }, "ReleaseTargetSummary": { "properties": { "currentVersion": { "$ref": "#/components/schemas/VersionSummary" }, "desiredVersion": { "$ref": "#/components/schemas/VersionSummary" }, "environment": { "$ref": "#/components/schemas/EnvironmentSummary" }, "latestJob": { "$ref": "#/components/schemas/JobSummary" }, "releaseTarget": { "$ref": "#/components/schemas/ReleaseTarget" }, "resource": { "$ref": "#/components/schemas/ResourceSummary" } }, "required": [ "releaseTarget", "resource", "environment" ], "type": "object" }, "ReleaseTargetWithState": { "properties": { "deployment": { "$ref": "#/components/schemas/Deployment" }, "environment": { "$ref": "#/components/schemas/Environment" }, "releaseTarget": { "$ref": "#/components/schemas/ReleaseTarget" }, "resource": { "$ref": "#/components/schemas/Resource" }, "state": { "$ref": "#/components/schemas/ReleaseTargetState" } }, "required": [ "releaseTarget", "state", "environment", "resource", "deployment" ], "type": "object" }, "ResolvedPolicy": { "properties": { "environmentIds": { "items": { "type": "string" }, "type": "array" }, "policy": { "$ref": "#/components/schemas/Policy" }, "releaseTargets": { "items": { "$ref": "#/components/schemas/ReleaseTarget" }, "type": "array" } }, "required": [ "policy", "environmentIds", "releaseTargets" ], "type": "object" }, "Resource": { "properties": { "config": { "additionalProperties": true, "type": "object" }, "createdAt": { "format": "date-time", "type": "string" }, "deletedAt": { "format": "date-time", "type": "string" }, "id": { "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" }, "variables": { "additionalProperties": { "$ref": "#/components/schemas/Value" }, "type": "object" }, "version": { "type": "string" }, "workspaceId": { "type": "string" } }, "required": [ "id", "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" }, "type": "object" }, "name": { "type": "string" }, "workspaceId": { "format": "uuid", "type": "string" } }, "required": [ "id", "workspaceId", "name", "createdAt", "metadata" ], "type": "object" }, "ResourceSummary": { "properties": { "id": { "type": "string" }, "identifier": { "type": "string" }, "kind": { "type": "string" }, "name": { "type": "string" }, "version": { "type": "string" } }, "required": [ "id", "name", "kind", "version", "identifier" ], "type": "object" }, "ResourceVariable": { "properties": { "key": { "type": "string" }, "priority": { "format": "int64", "type": "integer" }, "resourceId": { "type": "string" }, "resourceSelector": { "description": "A CEL expression to select which resources this value applies to", "type": "string" }, "value": { "$ref": "#/components/schemas/Value" } }, "required": [ "resourceId", "key", "value", "priority" ], "type": "object" }, "ResourceVariablesBulkUpdateEvent": { "properties": { "resourceId": { "type": "string" }, "variables": { "additionalProperties": true, "type": "object" } }, "required": [ "resourceId", "variables" ], "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" }, "RollbackRule": { "properties": { "onJobStatuses": { "description": "Job statuses that will trigger a rollback", "items": { "$ref": "#/components/schemas/JobStatus" }, "type": "array" }, "onVerificationFailure": { "default": false, "description": "If true, a release target will be rolled back if the verification fails", "type": "boolean" } }, "type": "object" }, "RuleEvaluation": { "properties": { "actionRequired": { "description": "Whether the rule requires an action (e.g., approval, wait)", "type": "boolean" }, "actionType": { "description": "Type of action required", "enum": [ "approval", "wait" ], "type": "string" }, "allowed": { "description": "Whether the rule allows the deployment", "type": "boolean" }, "details": { "additionalProperties": true, "description": "Additional details about the rule evaluation", "type": "object" }, "message": { "description": "Human-readable explanation of the rule result", "type": "string" }, "nextEvaluationTime": { "description": "The time when this rule should be re-evaluated (e.g., when soak time will be complete, when gradual rollout schedule is due)", "format": "date-time", "type": "string" }, "ruleId": { "description": "The ID of the rule that was evaluated", "type": "string" }, "satisfiedAt": { "description": "The time when the rule requirement was satisfied (e.g., when approvals were met, soak time completed)", "format": "date-time", "type": "string" } }, "required": [ "ruleId", "allowed", "actionRequired", "message", "details" ], "type": "object" }, "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" }, "workspaceId": { "type": "string" } }, "required": [ "id", "workspaceId", "name" ], "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" }, "TerraformCloudJobAgentConfig": { "properties": { "address": { "description": "Terraform Cloud address (e.g. https://app.terraform.io).", "type": "string" }, "organization": { "description": "Terraform Cloud organization name.", "type": "string" }, "template": { "description": "Terraform Cloud workspace template.", "type": "string" }, "token": { "description": "Terraform Cloud API token.", "type": "string" }, "triggerRunOnChange": { "default": true, "description": "Whether to create a TFC run on dispatch. When false, only the workspace and variables are synced.", "type": "boolean" }, "webhookUrl": { "description": "The ctrlplane API endpoint for TFC webhook notifications (e.g. https://ctrlplane.example.com/api/tfe/webhook).", "type": "string" } }, "required": [ "address", "organization", "token", "template", "webhookUrl" ], "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" }, "TestRunnerJobAgentConfig": { "properties": { "delaySeconds": { "description": "Delay in seconds before resolving the job.", "format": "int", "type": "integer" }, "message": { "description": "Optional message to include in the job output.", "type": "string" }, "status": { "description": "Final status to set (e.g. \"successful\", \"failure\").", "type": "string" } }, "type": "object" }, "UserApprovalRecord": { "properties": { "createdAt": { "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" }, "Value": { "oneOf": [ { "$ref": "#/components/schemas/LiteralValue" }, { "$ref": "#/components/schemas/ReferenceValue" }, { "$ref": "#/components/schemas/SensitiveValue" } ] }, "VariableSet": { "properties": { "createdAt": { "description": "The timestamp when the variable set was created", "format": "date-time", "type": "string" }, "description": { "description": "The description of the variable set", "type": "string" }, "id": { "format": "uuid", "type": "string" }, "name": { "description": "The name of the variable set", "type": "string" }, "priority": { "description": "The priority of the variable set", "format": "int64", "type": "integer" }, "selector": { "description": "A CEL expression to select which resources this value applies to", "type": "string" }, "updatedAt": { "description": "The timestamp when the variable set was last updated", "format": "date-time", "type": "string" } }, "required": [ "id", "name", "description", "selector", "priority", "createdAt", "updatedAt" ], "type": "object" }, "VariableSetVariable": { "properties": { "id": { "description": "The ID of the variable", "format": "uuid", "type": "string" }, "key": { "description": "The key of the variable, unique within the variable set", "type": "string" }, "value": { "$ref": "#/components/schemas/Value" }, "variableSetId": { "description": "The ID of the variable set this variable belongs to", "format": "uuid", "type": "string" } }, "required": [ "id", "variableSetId", "key", "value" ], "type": "object" }, "VariableSetWithVariables": { "allOf": [ { "$ref": "#/components/schemas/VariableSet" }, { "properties": { "variables": { "items": { "$ref": "#/components/schemas/VariableSetVariable" }, "type": "array" } }, "required": [ "variables" ], "type": "object" } ] }, "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", "data" ], "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": { "id": { "type": "string" }, "measurements": { "description": "Individual verification measurements taken for this metric", "items": { "$ref": "#/components/schemas/VerificationMeasurement" }, "type": "array" } }, "required": [ "id", "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": { "description": "CEL expression to determine if the version selector should be used", "type": "string" } }, "required": [ "selector" ], "type": "object" }, "VersionSummary": { "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "tag": { "type": "string" } }, "required": [ "id", "tag", "name" ], "type": "object" }, "Workflow": { "properties": { "id": { "type": "string" }, "inputs": { "items": { "$ref": "#/components/schemas/WorkflowInput" }, "type": "array" }, "jobs": { "items": { "$ref": "#/components/schemas/WorkflowJobAgent" }, "type": "array" }, "name": { "type": "string" }, "slug": { "type": "string" } }, "required": [ "id", "name", "slug", "inputs", "jobs" ], "type": "object" }, "WorkflowArrayInput": { "oneOf": [ { "$ref": "#/components/schemas/WorkflowManualArrayInput" } ] }, "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" }, "workflowRunId": { "type": "string" } }, "required": [ "id", "workflowRunId", "index", "ref", "config" ], "type": "object" }, "WorkflowJobAgent": { "properties": { "config": { "additionalProperties": true, "description": "Configuration for the job agent", "type": "object" }, "name": { "type": "string" }, "ref": { "description": "Reference to the job agent", "type": "string" }, "selector": { "description": "CEL expression to determine if the job agent should dispatch a job", "type": "string" } }, "required": [ "name", "ref", "config", "selector" ], "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" }, "WorkflowRunJob": { "properties": { "jobAgentId": { "description": "Job agent the job was dispatched to", "type": "string" }, "jobId": { "description": "Job id; poll its status via GET /v1/workspaces/{workspaceId}/jobs/{jobId}", "type": "string" } }, "required": [ "jobId", "jobAgentId" ], "type": "object" }, "WorkflowRunResult": { "properties": { "id": { "description": "Workflow run id", "type": "string" }, "inputs": { "additionalProperties": true, "type": "object" }, "jobs": { "description": "Jobs created and dispatched for this run", "items": { "$ref": "#/components/schemas/WorkflowRunJob" }, "type": "array" }, "workflowId": { "type": "string" } }, "required": [ "id", "workflowId", "inputs", "jobs" ], "type": "object" }, "WorkflowStringInput": { "properties": { "default": { "type": "string" }, "key": { "type": "string" }, "type": { "enum": [ "string" ], "type": "string" } }, "required": [ "key", "type" ], "type": "object" } } }, "info": { "description": "OpenAPI schemas for workspace engine protobuf messages", "title": "Workspace Engine API", "version": "1.0.0" }, "openapi": "3.0.0", "paths": { "/v1/deployments/{deploymentId}/job-agents": { "get": { "operationId": "getJobAgentsForDeployment", "parameters": [ { "description": "ID of the deployment", "in": "path", "name": "deploymentId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "items": { "items": { "$ref": "#/components/schemas/JobAgent" }, "type": "array" } }, "required": [ "items" ], "type": "object" } } }, "description": "Job agents matching the deployment selector" }, "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 agents matching a deployment selector" } }, "/v1/deployments/{deploymentId}/release-targets": { "get": { "operationId": "listReleaseTargets", "parameters": [ { "description": "ID of the deployment", "in": "path", "name": "deploymentId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "items": { "items": { "$ref": "#/components/schemas/ReleaseTargetItem" }, "type": "array" } }, "required": [ "items" ], "type": "object" } } }, "description": "List of release targets for the deployment" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" } }, "summary": "List release targets for a deployment" } }, "/v1/jobs/{jobId}/verification-status": { "get": { "operationId": "getJobVerificationStatus", "parameters": [ { "description": "ID of the job", "in": "path", "name": "jobId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "status": { "description": "Aggregate verification status", "enum": [ "passed", "running", "failed", "" ], "type": "string" } }, "required": [ "status" ], "type": "object" } } }, "description": "Aggregate verification status for the job" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" } }, "summary": "Get aggregate verification status for a job" } }, "/v1/validate/resource-selector": { "post": { "operationId": "validateResourceSelector", "requestBody": { "content": { "application/json": { "schema": { "properties": { "resourceSelector": { "description": "CEL expression to validate.", "type": "string" } }, "required": [ "resourceSelector" ], "type": "object" } } } }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "errors": { "items": { "type": "string" }, "type": "array" }, "valid": { "type": "boolean" } }, "required": [ "valid", "errors" ], "type": "object" } } }, "description": "The validated resource selector" } }, "summary": "Validate a resource selector" } }, "/v1/workspaces/{workspaceId}/deployments": { "get": { "description": "Returns a paginated list of deployments for a workspace. Optionally filter with a CEL expression using the \"deployment\" variable.", "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" } }, { "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/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" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" } }, "summary": "List deployments" } }, "/v1/workspaces/{workspaceId}/release-targets/{releaseTargetKey}/eligible-versions": { "post": { "description": "Returns deployment versions that currently pass every policy rule for this release target. An optional CEL filter narrows the result; pagination is applied to the filtered set. Use the \"version\" variable in the CEL expression to access version properties.", "operationId": "listEligibleVersionsForReleaseTarget", "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" } } ], "requestBody": { "content": { "application/json": { "schema": { "properties": { "excludeRuleIds": { "description": "Policy rule IDs to skip during evaluation. Useful when a caller wants to ignore a specific constraint (for example, a versionSelector pin) while still respecting every other rule.", "items": { "format": "uuid", "type": "string" }, "type": "array" }, "filter": { "description": "CEL expression to filter eligible versions. Defaults to \"true\" (all eligible versions).", "type": "string" } }, "type": "object" } } }, "required": true }, "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": "Eligible versions 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": "List versions eligible for a release target" } }, "/v1/workspaces/{workspaceId}/release-targets/{releaseTargetKey}/state": { "get": { "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" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ReleaseTargetStateResponse" } } }, "description": "Release target state" }, "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 of a release target" } }, "/v1/workspaces/{workspaceId}/resources/aggregates": { "post": { "description": "Filters resources by a CEL expression and groups them by specified properties, returning counts per group.", "operationId": "computeAggergate", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "properties": { "filter": { "description": "CEL expression to filter resources. Defaults to \"true\" (all resources).", "type": "string" }, "groupBy": { "items": { "properties": { "name": { "description": "Label for this grouping", "type": "string" }, "property": { "description": "Dot-path property to group by (e.g. kind, metadata.region)", "type": "string" } }, "required": [ "name", "property" ], "type": "object" }, "type": "array" } }, "type": "object" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "groups": { "items": { "properties": { "count": { "description": "Number of resources in this group", "type": "integer" }, "key": { "additionalProperties": { "type": "string" }, "description": "Map of grouping name to its value for this bucket", "type": "object" } }, "required": [ "key", "count" ], "type": "object" }, "type": "array" }, "total": { "description": "Total number of matching resources", "type": "integer" } }, "required": [ "total", "groups" ], "type": "object" } } }, "description": "OK response" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" } }, "summary": "Compute resource aggregate" } }, "/v1/workspaces/{workspaceId}/resources/query": { "post": { "description": "Returns paginated resources that match the provided CEL expression. Use the \"resource\" variable in your expression to access resource properties.", "operationId": "queryResources", "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": { "filter": { "description": "CEL expression to filter resources. Defaults to \"true\" (all resources).", "type": "string" } }, "type": "object" } } }, "required": true }, "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" } }, "summary": "Query resources with CEL expression" } }, "/v1/workspaces/{workspaceId}/workflows/{workflowId}/runs": { "post": { "description": "Creates a new run for the specified workflow with the provided inputs.", "operationId": "createWorkflowRun", "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": { "properties": { "inputs": { "additionalProperties": true, "description": "Input values for the workflow run.", "type": "object" } }, "required": [ "inputs" ], "type": "object" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WorkflowRunResult" } } }, "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": "Create a workflow run" } } } }