{ "components": { "parameters": { }, "schemas": { "AnyApprovalRule": { "properties": { "minApprovals": { "format": "int32", "type": "integer" } }, "required": [ "minApprovals" ], "type": "object" }, "ApprovalStatus": { "enum": [ "approved", "rejected" ], "type": "string" }, "BooleanValue": { "type": "boolean" }, "CreateDeploymentPlanRequest": { "properties": { "metadata": { "additionalProperties": { "type": "string" }, "description": "Arbitrary key-value metadata for the plan (e.g. GitHub PR links, CI run URLs)", "type": "object" }, "version": { "$ref": "#/components/schemas/DeploymentPlanVersion" } }, "required": [ "version" ], "type": "object" }, "CreateDeploymentRequest": { "properties": { "description": { "type": "string" }, "jobAgentConfig": { "additionalProperties": true, "type": "object" }, "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": [ "name", "slug" ], "type": "object" }, "CreateDeploymentVersionRequest": { "properties": { "config": { "additionalProperties": true, "type": "object" }, "createdAt": { "format": "date-time", "type": "string" }, "dependencies": { "additionalProperties": { "properties": { "versionSelector": { "description": "CEL expression evaluated against the dependency deployment's current release version on the same resource.", "type": "string" } }, "required": [ "versionSelector" ], "type": "object" }, "description": "Map of dependency deployment ID to a CEL version selector evaluated against that deployment's current release on the same resource. Inserted atomically with the version so reconciliation cannot fire before edges are attached.", "type": "object" }, "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": { "description": "CEL expression to determine if the environment should be used", "type": "string" } }, "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" }, "planValidationOpa": { "$ref": "#/components/schemas/PlanValidationOpaRule" }, "retry": { "$ref": "#/components/schemas/RetryRule" }, "verification": { "$ref": "#/components/schemas/VerificationRule" }, "versionCooldown": { "$ref": "#/components/schemas/VersionCooldownRule" }, "versionSelector": { "$ref": "#/components/schemas/VersionSelectorRule" } }, "type": "object" }, "CreateRelationshipRuleRequest": { "properties": { "cel": { "type": "string" }, "description": { "type": "string" }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "reference": { "type": "string" } }, "required": [ "name", "reference", "cel", "metadata" ], "type": "object" }, "CreateSystemRequest": { "properties": { "description": { "type": "string" }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "slug": { "type": "string" } }, "required": [ "name" ], "type": "object" }, "CreateVariableSet": { "properties": { "description": { "default": "", "type": "string" }, "name": { "type": "string" }, "priority": { "default": 0, "type": "integer" }, "selector": { "description": "A CEL expression to select which release targets this variable set applies to", "type": "string" }, "variables": { "items": { "$ref": "#/components/schemas/VariableSetVariable" }, "type": "array" } }, "required": [ "name", "selector", "variables" ], "type": "object" }, "CreateWorkflow": { "properties": { "inputs": { "items": { "$ref": "#/components/schemas/WorkflowInput" }, "type": "array" }, "jobAgents": { "items": { "$ref": "#/components/schemas/CreateWorkflowJobAgent" }, "type": "array" }, "name": { "type": "string" }, "slug": { "description": "URL-safe identifier unique within the workspace. Derived from name if omitted.", "type": "string" } }, "required": [ "name", "inputs", "jobAgents" ], "type": "object" }, "CreateWorkflowJobAgent": { "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" }, "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" }, "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" ], "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" }, "DeploymentPlan": { "properties": { "id": { "type": "string" }, "status": { "enum": [ "computing", "completed", "failed" ], "type": "string" }, "summary": { "$ref": "#/components/schemas/DeploymentPlanSummary" }, "targets": { "items": { "$ref": "#/components/schemas/DeploymentPlanTarget" }, "type": "array" } }, "required": [ "id", "status", "targets" ], "type": "object" }, "DeploymentPlanSummary": { "properties": { "changed": { "type": "integer" }, "errored": { "type": "integer" }, "total": { "type": "integer" }, "unchanged": { "type": "integer" }, "unsupported": { "type": "integer" } }, "required": [ "total", "changed", "unchanged", "errored" ], "type": "object" }, "DeploymentPlanTarget": { "properties": { "environmentId": { "type": "string" }, "environmentName": { "type": "string" }, "hasChanges": { "description": "True if any result for this target has changes", "type": "boolean" }, "resourceId": { "type": "string" }, "resourceName": { "type": "string" }, "results": { "items": { "$ref": "#/components/schemas/DeploymentPlanTargetResult" }, "type": "array" } }, "required": [ "environmentId", "environmentName", "resourceId", "resourceName", "hasChanges", "results" ], "type": "object" }, "DeploymentPlanTargetResult": { "properties": { "contentHash": { "description": "Hash of the rendered output for change detection", "type": "string" }, "current": { "description": "Full rendered output of the currently deployed state", "type": "string" }, "hasChanges": { "type": "boolean" }, "id": { "type": "string" }, "message": { "description": "Agent message (e.g. error explanation or summary)", "type": "string" }, "proposed": { "description": "Full rendered output of the proposed version", "type": "string" }, "status": { "enum": [ "computing", "completed", "errored", "unsupported" ], "type": "string" } }, "required": [ "id", "status", "hasChanges", "contentHash", "current", "proposed", "message" ], "type": "object" }, "DeploymentPlanVersion": { "properties": { "config": { "additionalProperties": true, "type": "object" }, "jobAgentConfig": { "additionalProperties": true, "type": "object" }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "description": "Display name for the proposed version (defaults to tag if omitted)", "type": "string" }, "tag": { "description": "Version tag for the proposed deployment (e.g. pr-123-abc123)", "type": "string" } }, "required": [ "tag" ], "type": "object" }, "DeploymentRequestAccepted": { "properties": { "id": { "type": "string" }, "message": { "type": "string" } }, "required": [ "id", "message" ], "type": "object" }, "DeploymentVariable": { "properties": { "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": { "description": "A CEL expression to select which resources this value applies to", "type": "string" }, "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" }, "DeploymentVersionDependency": { "properties": { "dependencyDeploymentId": { "type": "string" }, "deploymentVersionId": { "type": "string" }, "versionSelector": { "description": "CEL expression evaluated against the dependency deployment's current release version on the same resource.", "type": "string" } }, "required": [ "deploymentVersionId", "dependencyDeploymentId", "versionSelector" ], "type": "object" }, "DeploymentVersionStatus": { "enum": [ "unspecified", "building", "ready", "failed", "rejected" ], "type": "string" }, "DeploymentVersionWithDependencies": { "properties": { "config": { "additionalProperties": true, "type": "object" }, "createdAt": { "format": "date-time", "type": "string" }, "dependencies": { "additionalProperties": { "properties": { "versionSelector": { "type": "string" } }, "required": [ "versionSelector" ], "type": "object" }, "description": "Map of dependency deployment ID to its CEL version selector evaluated against that deployment's current release on the same resource.", "type": "object" }, "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", "dependencies" ], "type": "object" }, "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" }, "inputs": { "additionalProperties": true, "description": "Resolved input values for a 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" }, "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" } }, "required": [ "id", "name", "createdAt" ], "type": "object" }, "EnvironmentProgressionRule": { "properties": { "dependsOnEnvironmentSelector": { "description": "CEL expression to match the environment(s) that must have a successful release before this environment can proceed.", "type": "string" }, "maximumAgeHours": { "description": "Maximum age of dependency deployment before blocking progression (prevents stale promotions)", "format": "int32", "minimum": 0, "type": "integer" }, "minimumSoakTimeMinutes": { "description": "Minimum time to wait after the depends on environment is in a success state before the current environment can be deployed. Defaults to 0 if not provided.", "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" }, "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", "queued" ], "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" }, "ListResourcesFilters": { "properties": { "identifiers": { "items": { "type": "string" }, "type": "array" }, "kinds": { "items": { "type": "string" }, "type": "array" }, "limit": { "default": 500, "maximum": 1000, "minimum": 1, "type": "integer" }, "metadata": { "additionalProperties": { "type": "string" }, "description": "Exact metadata key/value matches", "type": "object" }, "offset": { "default": 0, "minimum": 0, "type": "integer" }, "order": { "default": "asc", "enum": [ "asc", "desc" ], "type": "string" }, "providerIds": { "items": { "type": "string" }, "type": "array" }, "query": { "description": "Text search on name or identifier", "type": "string" }, "sortBy": { "enum": [ "createdAt", "updatedAt", "name", "kind" ], "type": "string" }, "versions": { "items": { "type": "string" }, "type": "array" } }, "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" }, "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" }, "planValidationOpa": { "$ref": "#/components/schemas/PlanValidationOpaRule" }, "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" }, "RelationshipRule": { "properties": { "cel": { "type": "string" }, "description": { "type": "string" }, "id": { "type": "string" }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "reference": { "type": "string" }, "workspaceId": { "type": "string" } }, "required": [ "id", "name", "reference", "cel", "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" }, "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", "enum": [ "passed", "running", "failed" ], "type": "string" } }, "required": [ "id", "jobId", "metrics", "createdAt", "status" ], "type": "object" }, "type": "array" } }, "required": [ "job", "verifications" ], "type": "object" } }, "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" }, "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" }, "UpdateVariableSet": { "properties": { "description": { "type": "string" }, "name": { "type": "string" }, "priority": { "type": "integer" }, "selector": { "type": "string" }, "variables": { "items": { "$ref": "#/components/schemas/VariableSetVariable" }, "type": "array" } }, "type": "object" }, "UpdateWorkflow": { "properties": { "inputs": { "items": { "$ref": "#/components/schemas/WorkflowInput" }, "type": "array" }, "jobAgents": { "items": { "$ref": "#/components/schemas/CreateWorkflowJobAgent" }, "type": "array" }, "name": { "type": "string" }, "slug": { "description": "URL-safe identifier unique within the workspace.", "type": "string" } }, "required": [ "name", "inputs", "jobAgents" ], "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" }, "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": [ "name", "slug" ], "type": "object" }, "UpsertDeploymentVariableRequest": { "properties": { "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": { "description": "A CEL expression to select which resources this value applies to", "type": "string" }, "value": { "$ref": "#/components/schemas/Value" } }, "required": [ "deploymentVariableId", "priority", "value" ], "type": "object" }, "UpsertDeploymentVersionDependencyRequest": { "properties": { "versionSelector": { "description": "CEL expression evaluated against the dependency deployment's current release version on the same resource.", "type": "string" } }, "required": [ "versionSelector" ], "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": { "description": "CEL expression to determine if the environment should be used", "type": "string" } }, "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" }, "planValidationOpa": { "$ref": "#/components/schemas/PlanValidationOpaRule" }, "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": { "cel": { "type": "string" }, "description": { "type": "string" }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "reference": { "type": "string" } }, "required": [ "name", "reference", "cel", "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" }, "UpsertResourceRequest": { "properties": { "config": { "additionalProperties": true, "type": "object" }, "kind": { "type": "string" }, "metadata": { "additionalProperties": { "type": "string" }, "type": "object" }, "name": { "type": "string" }, "variables": { "additionalProperties": true, "type": "object" }, "version": { "type": "string" } }, "required": [ "name", "version", "kind" ], "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" } ] }, "VariableSet": { "properties": { "createdAt": { "format": "date-time", "type": "string" }, "description": { "type": "string" }, "id": { "format": "uuid", "type": "string" }, "name": { "type": "string" }, "priority": { "type": "integer" }, "selector": { "description": "A CEL expression to select which release targets this variable set applies to", "type": "string" }, "updatedAt": { "format": "date-time", "type": "string" } }, "required": [ "id", "name", "description", "selector", "priority", "createdAt", "updatedAt" ], "type": "object" }, "VariableSetVariable": { "properties": { "key": { "type": "string" }, "value": { "$ref": "#/components/schemas/Value" } }, "required": [ "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" ], "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": { "description": "CEL expression to select which versions are eligible for deployment.", "type": "string" } }, "required": [ "selector" ], "type": "object" }, "Workflow": { "properties": { "id": { "type": "string" }, "inputs": { "items": { "$ref": "#/components/schemas/WorkflowInput" }, "type": "array" }, "jobAgents": { "items": { "$ref": "#/components/schemas/WorkflowJobAgent" }, "type": "array" }, "name": { "type": "string" }, "slug": { "type": "string" } }, "required": [ "id", "name", "slug", "inputs", "jobAgents" ], "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" }, "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" }, "WorkflowSelectorArrayInput": { "properties": { "key": { "type": "string" }, "selector": { "properties": { "default": { "description": "CEL expression for the default selector.", "type": "string" }, "entityType": { "enum": [ "resource", "environment", "deployment" ], "type": "string" } }, "required": [ "entityType" ], "type": "object" }, "type": { "enum": [ "array" ], "type": "string" } }, "required": [ "key", "type", "selector" ], "type": "object" }, "WorkflowSlugConflictResponse": { "properties": { "code": { "enum": [ "DUPLICATE_SLUG" ], "type": "string" }, "details": { "properties": { "existingWorkflowId": { "description": "UUID of the workflow that already uses this slug, if known.", "type": "string" }, "slug": { "description": "The slug that collided.", "type": "string" } }, "required": [ "slug" ], "type": "object" }, "message": { "type": "string" } }, "required": [ "message", "code", "details" ], "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}/dependencies": { "get": { "description": "Returns the dependency edges declared by this deployment version.", "operationId": "listDeploymentVersionDependencies", "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" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "items": { "$ref": "#/components/schemas/DeploymentVersionDependency" }, "type": "array" } } }, "description": "OK response" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Resource not found" } }, "summary": "List deployment-version dependencies" } }, "/v1/workspaces/{workspaceId}/deployment-versions/{deploymentVersionId}/dependencies/{dependencyDeploymentId}": { "delete": { "operationId": "requestDeploymentVersionDependencyDeletion", "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" } }, { "description": "ID of the dependency deployment", "in": "path", "name": "dependencyDeploymentId", "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-version dependency" }, "put": { "description": "Declare or update a version-selector dependency from this deployment version to another deployment. Identified by the (deploymentVersionId, dependencyDeploymentId) pair.", "operationId": "requestDeploymentVersionDependencyUpsert", "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" } }, { "description": "ID of the dependency deployment", "in": "path", "name": "dependencyDeploymentId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpsertDeploymentVersionDependencyRequest" } } }, "required": true }, "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": "Upsert deployment-version dependency" } }, "/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" } }, { "allowReserved": true, "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" } }, "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" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "409": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Deployment name already exists in this workspace" } }, "summary": "Create deployment" } }, "/v1/workspaces/{workspaceId}/deployments/name/{name}": { "get": { "operationId": "getDeploymentByName", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "Name of the deployment", "in": "path", "name": "name", "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 by name" } }, "/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" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "409": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Deployment name already exists in this workspace" } }, "summary": "Upsert deployment" } }, "/v1/workspaces/{workspaceId}/deployments/{deploymentId}/plan": { "post": { "description": "Compute a dry-run plan showing rendered diffs for each release target without creating a version.", "operationId": "createDeploymentPlan", "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/CreateDeploymentPlanRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeploymentPlan" } } }, "description": "OK response" }, "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeploymentPlan" } } }, "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": "Create a deployment plan" } }, "/v1/workspaces/{workspaceId}/deployments/{deploymentId}/plan/{planId}": { "get": { "description": "Retrieve the status and results of a previously created deployment plan.", "operationId": "getDeploymentPlan", "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": "ID of the deployment plan", "in": "path", "name": "planId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeploymentPlan" } } }, "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 plan" } }, "/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" } }, { "description": "Sort order for results", "in": "query", "name": "order", "required": false, "schema": { "default": "desc", "enum": [ "asc", "desc" ], "type": "string" } }, { "allowReserved": true, "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/DeploymentVersionWithDependencies" }, "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": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeploymentVersion" } } }, "description": "Deployment version created" }, "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 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" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "409": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Environment name already exists in this workspace" } }, "summary": "Create environment" } }, "/v1/workspaces/{workspaceId}/environments/name/{name}": { "get": { "operationId": "getEnvironmentByName", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "Name of the environment", "in": "path", "name": "name", "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 by name" } }, "/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" }, "409": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Environment name already exists in this workspace" } }, "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}/job-agents/{jobAgentId}/jobs": { "get": { "description": "Returns the jobs assigned to a job agent, optionally filtered by status.", "operationId": "listJobAgentJobs", "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" } }, { "description": "Filter jobs by status", "in": "query", "name": "status", "required": false, "schema": { "$ref": "#/components/schemas/JobStatus" } }, { "description": "Include the dispatch context on each job. It can be large, so it is omitted by default.", "in": "query", "name": "includeDispatchContext", "required": false, "schema": { "default": false, "type": "boolean" } }, { "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/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": "List jobs for a job agent" } }, "/v1/workspaces/{workspaceId}/job-agents/{jobAgentId}/jobs/{jobId}/claim": { "post": { "description": "Atomically claims a queued job for the job agent, transitioning it to in progress. Returns 409 if the job is no longer available to claim.", "operationId": "claimJob", "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" } }, { "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": "Job claimed" }, "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" }, "409": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Job is not available to claim" } }, "summary": "Claim a job" } }, "/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": { "properties": { "status": { "$ref": "#/components/schemas/JobStatus" } }, "required": [ "status" ], "type": "object" } } }, "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}/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}/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" } }, { "allowReserved": true, "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/ReleaseTargetStateResponse" } } }, "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}": { "delete": { "operationId": "deleteResourceProviderByName", "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": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ResourceProvider" } } }, "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 a resource provider by 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" } }, { "allowReserved": true, "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" ] }, "put": { "description": "Creates or updates a resource by its identifier, including metadata and variables.", "operationId": "upsertResourceByIdentifier", "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": { "$ref": "#/components/schemas/UpsertResourceRequest" } } }, "required": true }, "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": "Upsert 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/search": { "post": { "description": "Returns a paginated list of resources matching the given filters.", "operationId": "searchResources", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ListResourcesFilters" } } }, "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": "Matching resources" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" } }, "summary": "Search resources", "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}/variable-sets": { "get": { "description": "Returns a list of variable sets.", "operationId": "listVariableSets", "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/VariableSetWithVariables" }, "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 variable sets", "tags": [ "Variable Sets" ] }, "post": { "description": "Creates a variable set.", "operationId": "createVariableSet", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateVariableSet" } } }, "required": true }, "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/VariableSet" } } }, "description": "Resource created successfully" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" } }, "summary": "Create a variable set", "tags": [ "Variable Sets" ] } }, "/v1/workspaces/{workspaceId}/variable-sets/{variableSetId}": { "delete": { "description": "Deletes a variable set.", "operationId": "deleteVariableSet", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the variable set", "in": "path", "name": "variableSetId", "required": true, "schema": { "type": "string" } } ], "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/VariableSet" } } }, "description": "Variable set 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 variable set", "tags": [ "Variable Sets" ] }, "get": { "description": "Gets a variable set by ID.", "operationId": "getVariableSet", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the variable set", "in": "path", "name": "variableSetId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/VariableSetWithVariables" } } }, "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 variable set", "tags": [ "Variable Sets" ] }, "put": { "description": "Updates a variable set.", "operationId": "updateVariableSet", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "ID of the variable set", "in": "path", "name": "variableSetId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateVariableSet" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/VariableSet" } } }, "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 variable set", "tags": [ "Variable Sets" ] } }, "/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": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Workflow" } } }, "description": "Resource created successfully" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Invalid request" }, "409": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WorkflowSlugConflictResponse" } } }, "description": "Workflow slug already exists in this workspace" } }, "summary": "Create a workflow", "tags": [ "Workflows" ] } }, "/v1/workspaces/{workspaceId}/workflows/slug/{slug}": { "get": { "description": "Gets a workflow by its slug within the workspace.", "operationId": "getWorkflowBySlug", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "Slug of the workflow", "in": "path", "name": "slug", "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 by slug", "tags": [ "Workflows" ] } }, "/v1/workspaces/{workspaceId}/workflows/slug/{slug}/runs": { "post": { "description": "Creates a new run for a workflow identified by slug.", "operationId": "createWorkflowRunBySlug", "parameters": [ { "description": "ID of the workspace", "in": "path", "name": "workspaceId", "required": true, "schema": { "type": "string" } }, { "description": "Slug of the workflow", "in": "path", "name": "slug", "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": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WorkflowRunResult" } } }, "description": "Resource created successfully" }, "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 by slug", "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" }, "409": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WorkflowSlugConflictResponse" } } }, "description": "Workflow slug already exists in this workspace" } }, "summary": "Update a workflow", "tags": [ "Workflows" ] } }, "/v1/workspaces/{workspaceId}/workflows/{workflowId}/runs": { "post": { "description": "Creates a new run for a workflow.", "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": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WorkflowRunResult" } } }, "description": "Resource created successfully" }, "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", "tags": [ "Workflows" ] } } }, "security": [ { "ApiKeyAuth": [ ] }, { "BearerAuth": [ ] } ], "servers": [ { "description": "Development server", "url": "http://localhost:3001/api" } ] }